Files
E3/interface_can.h
2025-10-04 16:06:55 +08:00

204 lines
7.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 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 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 */