📄 canreg.h
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
** http://www.zlgmcu.com
**-----------------------------------------------------------文件信息--------------------------------------------------------------------------------
** 文 件 名: CANREG.H
** 版 本: v1.0
** 日 期: 2004年2月23日
** 描 述: CAN模块寄存器类型定义、地址定义头文件
********************************************************************************************************/
#include "config.h"
#ifndef _CANREG_H_
#define _CANREG_H_
//验收滤波器RAM首地址
#define CANAFRAM_GADR 0xE0038000
//CAN寄存器基地址定义
#define CANMOD_BADR 0xE0044000 //模式寄存器
#define CANCMR_BADR 0xE0044004 //命令寄存器
#define CANGSR_BADR 0xE0044008 //全局状态寄存器
#define CANICR_BADR 0xE004400C //中断及捕获寄存器
#define CANIER_BADR 0xE0044010 //中断使能寄存器
#define CANBTR_BADR 0xE0044014 //总线时序寄存器
#define CANEWL_BADR 0xE0044018 //报警限制寄存器
#define CANSR_BADR 0xE004401C //状态寄存器
#define CANRFS_BADR 0xE0044020 //接收帧信息寄存器
#define CANRID_BADR 0xE0044024 //接收报文ID寄存器
#define CANRDA_BADR 0xE0044028 //接收数据1~4
#define CANRDB_BADR 0xE004402C //接收数据5~8
#define CANTFI1_BADR 0xE0044030 //CAN发送缓冲区1帧信息寄存器
#define CANTID1_BADR 0xE0044034 // CAN发送缓冲区1报文ID寄存器
#define CANTDA1_BADR 0xE0044038 // CAN发送缓冲区1发送数据1~4寄存器
#define CANTDB1_BADR 0xE004403C // CAN发送缓冲区1发送数据5~8寄存器
#define CANTFI2_BADR 0xE0044040 // CAN发送缓冲区2帧信息寄存器
#define CANTID2_BADR 0xE0044044 // CAN发送缓冲区2报文ID寄存器
#define CANTDA2_BADR 0xE0044048 // CAN发送缓冲区2发送数据1~4寄存器
#define CANTDB2_BADR 0xE004404C // CAN发送缓冲区2发送数据5~8寄存器
#define CANTFI3_BADR 0xE0044050 // CAN发送缓冲区3帧信息寄存器
#define CANTID3_BADR 0xE0044054 // CAN发送缓冲区3报文ID寄存器
#define CANTDA3_BADR 0xE0044058 // CAN发送缓冲区3发送数据1~4寄存器
#define CANTDB3_BADR 0xE004405C // CAN发送缓冲区3发送数据5~8寄存器
//定义RxBUF的基地址
#define RxBUF_BADR 0xE0044020
//定义TxBUF的基地址
#define TxBUF1_BADR 0xE0044030 // CAN发送缓冲区1首地址
#define TxBUF2_BADR 0xE0044040 // CAN发送缓冲区2首地址
#define TxBUF3_BADR 0xE0044050 // CAN发送缓冲区3首地址
//定义全局应用的寄存器
#define CANTxSR_GADR 0xE0040000 //发送状态寄存器
#define CANRxSR_GADR 0xE0040004 //接收状态寄存器
#define CANMSR_GADR 0xE0040008 //错误状态寄存器
#define CANAFMR_GADR 0xE003C000 //验收滤波控制
#define CANSFF_sa_GADR 0xE003C004 //标准帧表格
#define CANSFF_GRP_sa_GADR 0xE003C008 //标准帧组表格
#define CANEFF_sa_GADR 0xE003C00C //扩展帧表格
#define CANEFF_GRP_sa_GADR 0xE003C010 //扩展帧组表格
#define CANENDofTable_GADR 0xE003C014 //表格结束地址
#define CANLUTerrAd_GADR 0xE003C018 //LUT错误地址地址寄存器
#define CANLUTerr_GADR 0xE003C01C //LUT错误寄存器
//数据类型定义
//CAN控制器通道定义
typedef enum _cannum_
{
#if CAN_MAX_NUM == 4 //微处理器中含有4路CAN
CAN1 = 0, //CAN1模块
CAN2, //CAN2模块
CAN3, //CAN3模块
CAN4 //CAN4模块
#elif CAN_MAX_NUM == 2 //微处理器中含有2路CAN
CAN1 = 0, //CAN1模块
CAN2 //CAN2模块
#endif
} eCANNUM;
//CAN滤波器标准帧表格数据类型定义
typedef union _fullcansffline_
{
UINT32 Word;
struct
{
UINT32 CANSFFID1 :11;
UINT32 RSV_BIT1 :1;
UINT32 EN_BIT1 :1;
UINT32 Num_BIT1 :3;
UINT32 CANSFFID2 :11;
UINT32 RSV_BIT2 :1;
UINT32 EN_BIT2 :1;
UINT32 Num_BIT2 :3;
}Bits;
}uFullCANSFFLine,*P_uFullCANSFFLine;
//CAN滤波器扩展帧表格数据类型定义
typedef union _fullcaneffline_
{
UINT32 Word;
struct
{
UINT32 CANEFFID1 :29;
UINT32 Num_BIT :3;
}Bits;
}uFullCANEFFLine,*P_uFullCANEFFLine;
//CAN模式寄存器数据类型定义
typedef union _canmod_
{
UINT32 Word;
struct {
UINT32 RM_BIT :1; //定义RM位
UINT32 LOM_BIT :1; //定义LOM位
UINT32 STM_BIT :1; //定义STM位
UINT32 TPM_BIT :1; //定义TPM位
UINT32 SM_BIT :1; //定义SM位
UINT32 RPM_BIT :1; //定义RPM位
UINT32 RSV_BIT1 :1; //保留位
UINT32 TM_BIT :1; //定义TM位
UINT32 RSV_BIT24 :24; //保留位
}Bits;
}uCANMod,*P_uCANMod;
//命令寄存器的数据类型定义
typedef union _cancmr_
{
UINT32 Word;
struct
{
UINT32 TR_BIT :1; //定义TR位
UINT32 AT_BIT :1; //定义AT位
UINT32 RRB_BIT :1; //定义RRB位
UINT32 CDO_BIT :1;
UINT32 SRR_BIT :1; //定义SRR位
UINT32 STB1_BIT :1; //定义SEND TxBUF1位
UINT32 STB2_BIT :1; //定义SEND TxBUF2位
UINT32 STB3_BIT :1; //定义SEND TxBUF3位
UINT32 RSV_BIT24 :24; //保留位
}Bits;
}uCANCMR,*P_uCANCMR;
//全局状态寄存器的数据类型定义
typedef union _cangsr_
{
UINT32 Word; //字操作定义
struct
{
UINT32 RBS_BIT :1; //接收缓冲区状态位
UINT32 DOS_BIT :1; //数据溢出状态位
UINT32 TBS_BIT :1; //发送缓冲区状态锁定位
UINT32 TCS_BIT :1; //发送完成状态位
UINT32 RS_BIT :1; //正在接收状态
UINT32 TS_BIT :1; //正在发送状态
UINT32 ES_BIT :1; //错误状态
UINT32 BS_BIT :1; //总线关闭
UINT32 RSV_BIT8 :8; //保留位
UINT32 RXERR_BIT :8; //接收错误计数
UINT32 TXERR_BIT :8; //发送错误计数
}Bits;
}uCANGSR,*P_uCANGSR;
//中断捕获寄存器的数据类型定义
typedef union _canicr_
{
UINT32 Word; //字操作定义
struct
{
UINT32 RI_BIT :1; //接收中断位
UINT32 TI1_BIT :1; //TxBUF1发送成功中断位
UINT32 EI_BIT :1; //错误报警中断位
UINT32 DOI_BIT :1; //数据溢出中断位
UINT32 WUI_BIT :1; //睡眠唤醒中断位
UINT32 EPI_BIT :1; //错误认可中断位
UINT32 ALI_BIT :1; //仲裁错误中断位
UINT32 BEI_BIT :1; //总线错误中断
UINT32 IDI_BIT :1; //接收到CAN标识符中断位
UINT32 TI2_BIT :1; // TxBUF2发送成功中断位
UINT32 TI3_BIT :1; // TxBUF3发送成功中断位
UINT32 RSV_BIT5 :5; //保留位
UINT32 ERRBIT_BIT :5; //错误代码捕获
UINT32 ERRDIR_BIT :1; //错误方向
UINT32 ERRC_BIT :2; //错误类型
UINT32 ALCBIT_BIT :5; //仲裁错误代码捕获
UINT32 RSV_BIT3 :3; //保留
}Bits;
}uCANICR,*P_uCANICR;
//中断使能寄存器的数据类型定义
typedef union _canier_
{
UINT32 Word; //字操作定义
struct
{
UINT32 RIE_BIT :1; //接收中断使能位
UINT32 TIE1_BIT :1; //TxBUF1发送完成中断使能位
UINT32 EIE_BIT :1; //错误报警中断使能位
UINT32 DOIE_BIT :1; //数据溢出中断使能位
UINT32 WUIE_BIT :1; //睡眠模式唤醒中断使能位
UINT32 EPIE_BIT :1; //错误认可中断使能位
UINT32 ALIE_BIT :1; //仲裁丢失中断使能位
UINT32 BEIE_BIT :1; //总线错误中断使能位
UINT32 IDIE_BIT :1; //接收到CAN标识符中断使能位
UINT32 TIE2_BIT :1; //TxBUF2发送完成中断使能位
UINT32 TIE3_BIT :1; //TxBUF3发送完成中断使能位
UINT32 RSV_BIT21 :21; //保留位
}Bits;
}uCANIER,*P_uCANIER;
//总线时序寄存器的数据类型定义
typedef union _canbtr_
{
UINT32 Word; //字操作定义
struct
{
UINT32 BRP_BIT :10; //预分频位组合定义
UINT32 RSV_BIT4 :4; //保留位
UINT32 SJW_BIT :2; //同步跳转宽度
UINT32 TSEG1_BIT :4; //时间段1
UINT32 TSEG2_BIT :3; //时间段2
UINT32 SAM_BIT :1; //采样模式位
UINT32 RSV_BIT8 :8; //保留
}Bits;
}uCANBTR,*P_uCANBTR;
//出错警告界限寄存器的数据类型定义
typedef union _canewl_
{
UINT32 Word; //字操作定义
struct
{
UINT32 EWL_BIT :8; ///出错警告界限值
UINT32 RSV_BIT24 :24; //保留位
}Bits;
}uCANEWL,*P_uCANEWL;
//状态寄存器的数据类型定义
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -