?? 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 + -