176 lines
6.4 KiB
C
176 lines
6.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 MOTOR_INPUT_ID_1 0x189
|
|
#define MOTOR_INPUT_ID_2 0x18A
|
|
|
|
#define MOTOR_INPUT_ID_3 0x103
|
|
#define MOTOR_INPUT_ID_4 0x104
|
|
|
|
|
|
|
|
//#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 0x100
|
|
#define BMS_INPUT_ID2 0x101
|
|
#define REMOTE_ID 0x12000023
|
|
#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 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 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 */ |