📄 drv_can.h
字号:
UINT32 DLC_BIT :4; //数据长度
UINT32 RSV_BIT10 :10; //保留
UINT32 RTR_BIT :1; //远程帧、数据帧识别位
UINT32 FF_BIT :1; //扩展帧、标准帧识别位
}Bits;
}uCANRFS,*P_uCANRFS;
//CANID寄存器的数据类型定义
typedef union _canid_
{
UINT32 Word; //字操作定义
union _frame_format
{
struct _strFrameFm_ //标准帧结构
{
UINT32 ID_BIT :11;
UINT32 RSV_BIT21 :21;
}stcSTRFRFM;
struct _etxFrameFm_ //远程帧结构
{
UINT32 ID_BIT :29;
UINT32 RSV_BIT3 :3;
}stcETXFRFM;
}FrameFm;
}uCANID,*P_uCANID;
//数据寄存器数据类型定义
typedef union _candf_
{
UINT32 Word; //字操作定义
struct
{
UINT32 Data1_BIT :8; //数据字节
UINT32 Data2_BIT :8;
UINT32 Data3_BIT :8;
UINT32 Data4_BIT :8;
}Bits;
}uCANDF,*P_uCANDF;
//CANTFI寄存器的数据类型定义
typedef union _cantfi_
{
UINT32 Word; //字节操作定义
struct
{
UINT32 PRIO_BIT :8; //缓冲区数据发送优先级的值
UINT32 RSV_BIT8 :8;
UINT32 DLC_BIT :4; //发送数据长度
UINT32 RSV_BIT10 :10;
UINT32 RTR_BIT :1; //远程帧、数据帧辨别位
UINT32 FF_BIT :1; //扩展帧、标准帧辨别位
}Bits;
}uCANTFI,*P_uCANTFI;
//定义发送帧结构
typedef struct _stcTXBUF_
{
uCANTFI TxFrameInfo; //发送帧信息结构
uCANID TxCANID; //发送帧信息ID
uCANDF CANTDA; //发送数据1~4字节
uCANDF CANTDB; //发送数据5~8字节
}*P_stcTxBUF,stcTxBUF;
//定义集中发送状态寄存器结构
typedef union _uCANTxSR_
{
UINT32 Word; //字操作定义
struct
{
UINT32 TS1_BIT :1; //CAN1正在发送状态
UINT32 TS2_BIT :1; //CAN2正在发送状态
UINT32 TS3_BIT :1; //CAN3正在发送状态
UINT32 TS4_BIT :1; //CAN4正在发送状态
UINT32 RSV_BIT1 :4; //保留
UINT32 TBS1_BIT :1; //CAN1发送缓冲区锁定状态
UINT32 TBS2_BIT :1; //CAN2发送缓冲区锁定状态
UINT32 TBS3_BIT :1; //CAN3发送缓冲区锁定状态
UINT32 TBS4_BIT :1; //CAN4发送缓冲区锁定状态
UINT32 RSV_BIT2 :4; //
UINT32 TCS1_BIT :1; //CAN1发送完成状态
UINT32 TCS2_BIT :1; //CAN2发送完成状态
UINT32 TCS3_BIT :1; //CAN3发送完成状态
UINT32 TCS4_BIT :1; //CAN4发送完成状态
UINT32 RSV_BIT12 :12; //保留
}Bits;
}*P_uCANTxSR,uCANTxSR;
//定义集中接收状态寄存器结构
typedef union _uCANRxSR_
{
UINT32 Word; //字操作定义
struct
{
UINT32 RS1_BIT :1; //CAN1正在接收状态
UINT32 RS2_BIT :1; //CAN2正在接收状态
UINT32 RS3_BIT :1; //CAN3正在接收状态
UINT32 RS4_BIT :1; //CAN4正在接收状态
UINT32 RSV_BIT1 :4; //保留
UINT32 RBS1_BIT :1; //CAN1接收缓冲区有效
UINT32 RBS2_BIT :1; //CAN2接收缓冲区有效
UINT32 RBS3_BIT :1; //CAN3接收缓冲区有效
UINT32 RBS4_BIT :1; //CAN4接收缓冲区有效
UINT32 RSV_BIT2 :4; //
UINT32 DOS1_BIT :1; //CAN1接收缓冲区溢出
UINT32 DOS2_BIT :1; //CAN2接收缓冲区溢出
UINT32 DOS3_BIT :1; //CAN3接收缓冲区溢出
UINT32 DOS4_BIT :1; //CAN4接收缓冲区溢出
UINT32 RSV_BIT12 :12; //保留
}Bits;
}*P_uCANRxSR, uCANRxSR;
//RxBuf Struct
typedef struct _stcRXBUF_
{
uCANRFS CANRcvFS;
uCANID RxCANID;
uCANDF CANRDA;
uCANDF CANRDB;
}*P_stcRxBUF,stcRxBUF;
//定义集中其他状态寄存器结构
typedef union _uCANMSR_
{
UINT32 Word; //字操作定义
struct
{
UINT32 ES1_BIT :1; //CAN1错误报警
UINT32 ES2_BIT :1; //CAN2错误报警
UINT32 ES3_BIT :1; //CAN3错误报警
UINT32 ES4_BIT :1; //CAN4错误报警
UINT32 RSV_BIT1 :4; //保留
UINT32 BS1_BIT :1; //CAN1总线脱离
UINT32 BS2_BIT :1; //CAN2总线脱离
UINT32 BS3_BIT :1; //CAN3总线脱离
UINT32 BS4_BIT :1; //CAN4总线脱离
UINT32 RSV_BIT20 :20; //保留
}Bits;
}*P_uCANMSR, uCANMSR;
//定义验收滤波模式寄存器结构
typedef union _canafmr_
{
UINT32 Word;
struct
{
UINT32 AccOff_BIT :1;
UINT32 AccBP_BIT :1;
UINT32 eFCAN_BIT :1;
UINT32 RSV_BIT29 :29;
}Bits;
}uCANAFMR,*P_uCANAFMR;
//验收滤波器表格单个标志符表格起始地址数据结构定义
typedef union _canF_sa_
{
UINT32 Word;
struct
{
UINT32 RSV_BIT2 :2;
UINT32 SADR_BIT :9;
UINT32 RSV_BIT21 :21;
}Bits;
}uCANF_sa,*P_uCANF_sa;
//验收滤波器表格标志符组表格起始地址数据结构定义
typedef union _canGRP_sa_
{
UINT32 Word;
struct
{
UINT32 RSV_BIT2 :2;
UINT32 SADR_BIT :10;
UINT32 RSV_BIT20 :20;
}Bits;
}uCANGRP_sa,*P_uCANGRP_sa;
//LUT错误寄存器数据结构定义
typedef union _canLUTerr
{
UINT32 Word;
struct
{
UINT32 LERR_BIT :1;
UINT32 RSV_BIT31 :31;
}Bits;
}uCANLUTerr,*P_uCANLUTerr;
//=============================================================================
//定义所有CAN模块模式寄存器的数据类型
#define regCANMOD(CanNum) (*((volatile P_uCANMod)(CANMOD_BADR+CanNum* CAN_OFFSET_ADR)))
//定义所有CAN模块命令寄存器的数据类型
#define regCANCMR(CanNum) (*((volatile P_uCANCMR)(CANCMR_BADR+CanNum* CAN_OFFSET_ADR )))
//定义所有CAN模块全局状态寄存器的数据类型
#define regCANGSR(CanNum) (*((volatile P_uCANGSR)( CANGSR_BADR+CanNum* CAN_OFFSET_ADR )))
//定义所有CAN模块中断和捕获寄存器的数据类型
#define regCANICR(CanNum) (*((volatile P_uCANICR)( CANICR_BADR+CanNum* CAN_OFFSET_ADR )))
//定义所有CAN模块中断使能寄存器的数据类型
#define regCANIER(CanNum) (*((volatile P_uCANIER)( CANIER_BADR+CanNum* CAN_OFFSET_ADR )))
//定义所有CAN模块总线时序寄存器的数据类型
#define regCANBTR(CanNum) (*((volatile P_uCANBTR)( CANBTR_BADR+CanNum* CAN_OFFSET_ADR )))
//定义所有CAN模块出错警告界限寄存器的数据类型
#define regCANEWL(CanNum) (*((volatile P_uCANEWL)( CANEWL_BADR+CanNum* CAN_OFFSET_ADR )))
//定义所有CAN模块CANSR寄存器的数据类型
#define regCANSR(CanNum) (*((volatile P_uCANSR)( CANSR_BADR+CanNum* CAN_OFFSET_ADR )))
//所有CAN模块的CANRFS数据类型定义
#define regCANRFS(CanNum) (*((volatile P_uCANRFS)( CANRFS_BADR+CanNum* CAN_OFFSET_ADR )))
//所有CAN模块的CANRID数据类型定义
#define regCANRID(CanNum) (*((volatile P_uCANID)( CANRID_BADR+CanNum* CAN_OFFSET_ADR )))
//所有CAN模块的CANRDA数据类型定义
#define regCANRDA(CanNum) (*((volatile P_uCANDF)( CANRDA_BADR+CanNum* CAN_OFFSET_ADR )))
//所有CAN模块的CANRDB数据类型定义
#define regCANRDB(CanNum) (*((volatile P_uCANDF)( CANRDB_BADR+CanNum* CAN_OFFSET_ADR )))
//定义所有CAN模块的发送缓冲区分量
#define regCANTFI1(CanNum) (*((volatile P_uCANTFI)(CANTFI1_BADR+CanNum* CAN_OFFSET_ADR)))
#define regCANTID1(CanNum) (*((volatile P_uCANID)(CANTID1_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTDA1(CanNum) (*((volatile P_uCANDF)(CANTDA1_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTDB1(CanNum) (*((volatile P_uCANDF)(CANTDB1_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTFI2(CanNum) (*((volatile P_uCANTFI)(CANTFI2_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTID2(CanNum) (*((volatile P_uCANID)(CANTID2_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTDA2(CanNum) (*((volatile P_uCANDF)(CANTDA2_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTDB2(CanNum) (*((volatile P_uCANDF)(CANTDB2_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTFI3(CanNum) (*((volatile P_uCANTFI)(CANTFI3_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTID3(CanNum) (*((volatile P_uCANID)(CANTID3_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTDA3(CanNum) (*((volatile P_uCANDF)(CANTDA3_BADR+CanNum*CAN_OFFSET_ADR)))
#define regCANTDB3(CanNum) (*((volatile P_uCANDF)(CANTDB3_BADR+CanNum*CAN_OFFSET_ADR)))
//定义所有CAN模块的TxBUF
#define regTxBUF1(CanNum) (*((volatile P_stcTxBUF)( TxBUF1_BADR+CanNum*CAN_OFFSET_ADR)))
#define regTxBUF2(CanNum) (*((volatile P_stcTxBUF)( TxBUF2_BADR+CanNum*CAN_OFFSET_ADR)))
#define regTxBUF3(CanNum) (*((volatile P_stcTxBUF)( TxBUF3_BADR+CanNum*CAN_OFFSET_ADR)))
//集中状态寄存器
#define regACANTxSR (*((volatile P_uCANTxSR)( CANTxSR_GADR)))
#define regACANRxSR (*((volatile P_uCANRxSR)( CANRxSR_GADR)))
#define regACANMSR (*((volatile P_uCANMSR) ( CANMSR_GADR)))
//验收滤波器部分
#define regCANAFMR (*((volatile P_uCANAFMR) CANAFMR_GADR))
#define regCANSFF_sa (*((volatile P_uCANF_sa)(CANSFF_sa_GADR)))
#define regCANSFF_GRP_sa (*((volatile P_uCANGRP_sa)(CANSFF_GRP_sa_GADR)))
#define regCANEFF_sa (*((volatile P_uCANF_sa)(CANEFF_sa_GADR)))
#define regCANEFF_GRP_sa (*((volatile P_uCANGRP_sa)(CANEFF_GRP_sa_GADR)))
#define regCANENDofTable (*((volatile P_uCANGRP_sa)(CANENDofTable_GADR)))
#define regCANLUTerrAd (*((volatile P_uCANF_sa)(CANLUTerrAd_GADR)))
//LUT错误寄存器访问方式定义
#define regCANLUTerr (*((volatile P_uCANLUTerr)( CANLUTerr_GADR)))
//验收滤波器表格
#define regCANSFF_TAB(i) (*((volatile P_uFullCANSFFLine)( CANAFRAM_GADR + USE_SFF_sa_VAL +i*4)))
#define regCANSFF_GRP_TAB(i) (*((volatile P_uFullCANSFFLine)( CANAFRAM_GADR + USE_SFF_GRP_sa_VAL +i*4)))
#define regCANEFF_TAB(i) (*((volatile P_uFullCANEFFLine)( CANAFRAM_GADR + USE_EFF_sa_VAL +i*4)))
#define regCANEFF_GRP_TAB(i) (*((volatile P_uFullCANEFFLine)( CANAFRAM_GADR + USE_EFF_GRP_sa_VAL +i*4)))
//定义所有CAN模块的RxBUF
#define RxBUF(CanNum) (*((volatile P_stcRxBUF)( RxBUF_BADR+CanNum*CAN_OFFSET_ADR)))
//=============================================================================
#ifndef _CANFUNC_GLOBAL_
#define CANFUNC_GLOBAL extern
#else
#define CANFUNC_GLOBAL
#endif
#define NOM_SEND_CMD 0
#define SIG_SEND_CMD 1
#define SLF_SEND_CMD 2
#define SSR_SEND_CMD 3
#define SEND_TX_BUF1 1
#define SEND_TX_BUF2 2
#define SEND_TX_BUF3 4
#define RelCanRecBuf(CanNum) regCANCMR(CanNum).Bits.RRB_BIT=1
#define ClrCanDataOver(CanNum) regCANCMR(CanNum).Bits.CDO_BIT=1
#define CanBufOffLinePrg(CanNum) if(regCANMOD(CanNum).Bits.RM_BIT != 0) \
{ \
regCANGSR(CanNum).Word=0; \
regCANMOD(CanNum).Bits.RM_BIT=0x00; \
regCANCMR(CanNum).Word=0x02; \
}
CANFUNC_GLOBAL void HwRstCAN(eCANNUM CanNum);
CANFUNC_GLOBAL void HwEnCAN(eCANNUM CanNum);
CANFUNC_GLOBAL unsigned int SoftRstCAN(eCANNUM CanNum);
CANFUNC_GLOBAL unsigned int SoftEnCAN(eCANNUM CanNum);
CANFUNC_GLOBAL unsigned int CanEntrySM(eCANNUM CanNum);
CANFUNC_GLOBAL unsigned int CanQuitSM(eCANNUM CanNum);
CANFUNC_GLOBAL void CanSendCmd(eCANNUM CanNum,UINT32 Cmd,UINT32 TxBuf);
CANFUNC_GLOBAL unsigned int WriteCanTxBuf(eCANNUM CanNum,UINT32 TxBufNum,UINT32 TPM,P_stcTxBUF Buf) ;
CANFUNC_GLOBAL void ReadCanRxBuf(eCANNUM CanNum,P_stcRxBUF Buf);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -