206 lines
7.4 KiB
C
206 lines
7.4 KiB
C
|
||
#ifndef _INTERFACE_CAN_H_
|
||
#define _INTERFACE_CAN_H_
|
||
|
||
#include "regs_base.h"
|
||
#include "irq_num.h"
|
||
#include <sdrv_flexcan.h>
|
||
|
||
|
||
#define CAN_INDEX_0 FLEXCAN7
|
||
#define CAN_INDEX_1 FLEXCAN21
|
||
#define CAN_INDEX_2 FLEXCAN16
|
||
#define CAN_INDEX_3 FLEXCAN3
|
||
#define CAN_INDEX_4 FLEXCAN23
|
||
#define CAN_INDEX_5 FLEXCAN5
|
||
#define CAN_INDEX_6 FLEXCAN6
|
||
#define CAN_INDEX_7 FLEXCAN4
|
||
|
||
|
||
|
||
#define TX_MB_INDEX (USED_MB_FOR_FIFO)
|
||
|
||
|
||
#define LEFT_FRONT_MOTOR_INPUT1 0x101
|
||
#define LEFT_FRONT_MOTOR_INPUT2 0x103//ζÈ
|
||
|
||
|
||
#define LEFT_REAR_MOTOR2_INPUT1 0x102
|
||
#define LEFT_REAR_MOTOR2_INPUT2 0x104//ζÈ
|
||
|
||
|
||
#define RIGHT_FRONT_MOTOR_INPUT1 0x101
|
||
#define RIGHT_FRONT_MOTOR_INPUT2 0x103//ζÈ
|
||
|
||
|
||
#define RIGHT_REAR_MOTOR_INPUT1 0x102
|
||
#define RIGHT_REAR_MOTOR_INPUT2 0x104//ζÈ
|
||
|
||
|
||
#define LEFT_FRONT_MOTOR_OUTPUT1 0x201
|
||
#define LEFT_FRONT_MOTOR_OUTPUT2 0x401
|
||
|
||
#define LEFT_REAR_MOTOR_OUTPUT1 0x202
|
||
#define LEFT_REAR_MOTOR_OUTPUT2 0x402
|
||
|
||
#define RIGHT_FRONT_MOTOR_OUTPUT1 0x201
|
||
#define RIGHT_FRONT_MOTOR_OUTPUT2 0x401
|
||
|
||
#define RIGHT_REAR_MOTOR_OUTPUT1 0x202
|
||
#define RIGHT_REAR_MOTOR_OUTPUT2 0x402
|
||
|
||
|
||
|
||
|
||
//#define MOTOR_INPUT_ID_1 0x15000003//²É¼¯Ä£¿é
|
||
//#define MOTOR_INPUT_ID_2 0x10F92708//ÓÒǰ
|
||
//#define MOTOR_INPUT_ID_3 0x15000003//²É¼¯Ä£¿é
|
||
//#define MOTOR_INPUT_ID_4 0x10F94708//ÓÒºó
|
||
//
|
||
//
|
||
#define MOTOR_INPUT_ID_5 0x10F81708//×óǰ µµÎ»
|
||
#define MOTOR_INPUT_ID_6 0x10F82708//ÓÒǰ
|
||
#define MOTOR_INPUT_ID_7 0x10F83708//×óºó
|
||
#define MOTOR_INPUT_ID_8 0x10F84708//ÓÒºó
|
||
|
||
|
||
|
||
|
||
#define BMS_INPUT_ID1 0x4028001
|
||
#define BMS_REQUEST_ID 0x400FF80
|
||
|
||
#define REMOTE_ID 0x12000023
|
||
#define REMOTE_ID_1 0x12000024
|
||
#define TEMP_MODULE_INPUT_ID_1 0x15000003
|
||
|
||
|
||
|
||
#define CAN_FIFO_SIZE 8
|
||
|
||
//#define TEMP_MODULE_INPUT_ID_2 0x302
|
||
|
||
|
||
// ¹ÊÕÏÐÅÏ¢
|
||
typedef struct _StrCanFault
|
||
{
|
||
uint8_t navigator_count; //µ¼º½ÒǼÆÊýÆ÷
|
||
uint8_t motor1_count; //ÊÖ¶¯Êý¾Ý¼ÆÊýÆ÷
|
||
uint8_t motor2_count; //ÊÖ¶¯Êý¾Ý¼ÆÊýÆ÷
|
||
uint8_t motor3_count; //ÊÖ¶¯Êý¾Ý¼ÆÊýÆ÷
|
||
uint8_t motor4_count; //ÊÖ¶¯Êý¾Ý¼ÆÊýÆ÷
|
||
|
||
uint8_t bms_count; //bms¼ÆÊýÆ÷
|
||
uint8_t temperature_count; //ζȼÆÊýÆ÷
|
||
uint8_t remote_count; //Ò£¿Ø¼ÆÊýÆ÷
|
||
|
||
uint8_t navigator_state; //µ¼º½Êý¾Ý״̬
|
||
uint8_t motor1_state; //µç»ú1Êý¾Ý״̬
|
||
uint8_t motor2_state; //µç»ú2Êý¾Ý״̬
|
||
uint8_t motor3_state; //µç»ú1Êý¾Ý״̬
|
||
uint8_t motor4_state; //µç»ú2Êý¾Ý״̬
|
||
uint8_t bms_state; //bms״̬
|
||
uint8_t temperature_state; //ζȼÆÊýÆ÷
|
||
uint8_t remote_state; //Ò£¿Ø×´Ì¬
|
||
} StrCanFault;
|
||
|
||
typedef union _UnCanFault
|
||
{
|
||
StrCanFault bit_data; // ʹÓö¨ÒåµÄ½á¹¹Ìå±äÁ¿Ãû
|
||
uint8_t arr[sizeof(StrCanFault)]; // ͨ¹ý½á¹¹ÌåÀàÐÍÈ·¶¨´óС
|
||
} UnCanFault;
|
||
|
||
|
||
|
||
|
||
|
||
// can»º´æ½Úµã
|
||
typedef struct _StrCanBuffer
|
||
{
|
||
uint32_t id; //**< CAN Frame Identifier. */
|
||
uint8_t dataBuffer[8]; //Êý¾Ý»º´æ
|
||
unsigned int length : 7; //**< CAN frame payload length in bytes(Range: 0~8). */
|
||
unsigned int type : 1; //**< CAN Frame Type(DATA or REMOTE). */
|
||
unsigned int format : 1; //**< CAN Frame Identifier(STD or EXT format). */
|
||
|
||
}StrCanBuffer;
|
||
|
||
|
||
|
||
typedef struct Fifo_Queue_Tag
|
||
{
|
||
StrCanBuffer Data[CAN_FIFO_SIZE];//»º´æ
|
||
uint8_t front;//Í·Ö¸Õë
|
||
uint8_t rear;//βָÕë
|
||
}StrCanFifoQueue;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
#define ON 1
|
||
#define OFF 0
|
||
|
||
#define left_motor_fan(Value) un_inf_can_kgf_output1.bit_data.KGF01 = Value;//µç»ú¿ØÖÆÆ÷·çÉÈ×ó
|
||
#define right_motor_fan(Value) un_inf_can_kgf_output1.bit_data.KGF03 = Value;//µç»ú¿ØÖÆÆ÷·çÉÈÓÒ
|
||
#define pre_charge_relay(Value) un_inf_can_kgf_output1.bit_data.KGF04 = Value;//Ô¤³ä
|
||
#define high_voltage_relay(Value) un_inf_can_kgf_output1.bit_data.KGF07 = Value;un_inf_can_kgf_output1.bit_data.KGF08 = Value//¸ßѹ¼ÌµçÆ÷
|
||
#define low_voltage_relay(Value) un_inf_can_kgf_output1.bit_data.KGF11 = Value;un_inf_can_kgf_output1.bit_data.KGF12 = Value//µÍѹ¼ÌµçÆ÷
|
||
#define yellow_light(Value) un_inf_can_kgf_output1.bit_data.KGF06 = Value;//»ÆµÆ
|
||
#define red_light(Value) un_inf_can_kgf_output1.bit_data.KGF09 = Value;//ºìµÆ
|
||
#define left_vehicle_fan(Value) un_inf_can_kgf_output1.bit_data.KGF14 = Value;//³µ×ó·çÉÈ
|
||
#define right_vehicle_fan(Value) un_inf_can_kgf_output2.bit_data.KGF03 = Value;//³µÓÒ·çÉÈ
|
||
#define computer(Value) un_inf_can_kgf_output2.bit_data.KGF01 = Value;un_inf_can_kgf_output2.bit_data.KGF02 = Value//×ÔÖ÷¼ÆËã»ú
|
||
#define network_switch(Value) un_inf_can_kgf_output2.bit_data.KGF05 = Value;un_inf_can_kgf_output2.bit_data.KGF06 = Value//ÍøÂç½»»»»úº¬Â·ÓÉÆ÷
|
||
|
||
//HÇÅ
|
||
#define brake_motor_forward un_h_bridge_output.bit_data.channel_01 = ON ;un_h_bridge_output.bit_data.channel_04 = ON ;un_h_bridge_output.bit_data.channel_02 = OFF;un_h_bridge_output.bit_data.channel_03 = OFF;un_h_bridge_output.bit_data.sleep_01 = ON ;un_h_bridge_output.bit_data.sleep_02 = ON//Õýת
|
||
#define brake_motor_reversal un_h_bridge_output.bit_data.channel_01 = OFF;un_h_bridge_output.bit_data.channel_04 = OFF;un_h_bridge_output.bit_data.channel_02 = ON ;un_h_bridge_output.bit_data.channel_03 = ON ;un_h_bridge_output.bit_data.sleep_01 = ON ;un_h_bridge_output.bit_data.sleep_02 = ON//·´×ª
|
||
#define brake_motor_off un_h_bridge_output.bit_data.channel_01 = OFF;un_h_bridge_output.bit_data.channel_04 = OFF;un_h_bridge_output.bit_data.channel_02 = OFF;un_h_bridge_output.bit_data.channel_03 = OFF;un_h_bridge_output.bit_data.sleep_01 = OFF;un_h_bridge_output.bit_data.sleep_02 = OFF//¹Ø±Õ
|
||
|
||
|
||
|
||
|
||
//Íⲿº¯Êý
|
||
void flexcan_transfer_callback(flexcan_handle_t *handle,flexcan_status_e status, uint32_t result,void *userData);
|
||
uint8_t flexcan_config_rx_fifo(flexcan_handle_t *handle,flexcan_rx_fifo_config_t *config);
|
||
uint8_t CAN_Send_Msg( flexcan_handle_t *handle, uint32_t ID, flexcan_frame_format_e ide, flexcan_frame_type_e rtr, uint8_t *msg, uint8_t len, uint8_t tx_index);
|
||
void flexcan_Busoff_Recovery(void);
|
||
void initialization_All_Flexcan(void);
|
||
|
||
|
||
|
||
|
||
//Íⲿ±äÁ¿
|
||
extern flexcan_handle_t g_flexcan_handle;
|
||
extern bool busoff_occur_flag;//±êÖ¾Á¿
|
||
extern bool WDTReFresh_flag;//¸üбêÖ¾
|
||
extern flexcan_handle_t g_flexcan_handle;
|
||
extern uint16_t FrameHeader;//Ö¡Í·
|
||
extern flexcan_handle_t can_handle_0;//can³õʼ»¯½á¹¹Ìå
|
||
extern flexcan_handle_t can_handle_1;
|
||
extern flexcan_handle_t can_handle_2;
|
||
extern flexcan_handle_t can_handle_3;
|
||
extern flexcan_handle_t can_handle_4;
|
||
extern flexcan_handle_t can_handle_5;
|
||
extern flexcan_handle_t can_handle_6;
|
||
extern flexcan_handle_t can_handle_7;
|
||
extern UnCanFault can_fault_info;
|
||
|
||
extern uint32_t time_elapsed;
|
||
extern uint32_t time_elapsed1;
|
||
|
||
//Íⲿº¯Êý
|
||
void canInterfaceInit(void);
|
||
|
||
|
||
#endif /* INTERFACE_CAN_H */ |