⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sja_pelican.h

📁 参考周立功的basic模式的CAN通讯
💻 H
字号:
//----------------------------------------------------------------------
// FileName   : SJA_PeliCan.h
// Description: PeliCan 头文件
// DateTime   : 2006-05-11 Create
// Author     : jztx-liuweiming
// Version    : TxCmsPrj Ver1.0
//----------------------------------------------------------------------
// SJA1000, 16M晶振 PeliCan模式, 2006年5月11日开始调试, 参考周立功源代码
// 锦州拓新电力电子公司 刘伟明
//----------------------------------------------------------------------

/************************************************************************
 *   锦州拓新电力电子公司            http://www.jztxdl.com              *
 ************************************************************************
 ************************************************************************
 *                                                                      *
 *   CAN 控制器SJA1000基本的硬件定义(PeliCAN 工作方式)                 *
 *                                                                      *
 ************************************************************************
 ************************************************************************
 *                                                                      *
 *  目的:       SJA1000基本寄存器\功能位定义,便于用户使用SJA1000时     * 
 *              只需作与其硬件系统相适合的简单的修改,便能实现SJA1000   *
 *              的PeliCAN工作方式的功能                                 *
 *                                                                      *
 *  文件名:     SJA_PeliCan.H                                           *
 *                                                                      *
 *  模块名:     --                                                      *
 *                                                                      *
 *  目标系统:   任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN    *
 *              系统                                                    *
 *                                                                      *
 *  应用语言:   Keil C51                                                *
 *                                                                      *
 ************************************************************************
 *                                                                      *
 *  版本 : V1.1                                                         *
 *                                                                      *
 ************************************************************************
 *  锦州拓新电力电子公司 保留所有的版权                                 *
 ************************************************************************/

#ifndef         PeliCAN
#define         PeliCAN

/************************************************************************
 *SJA1000与微处理器的接口是以外部存储器的方式,所以以下的基址定义,     *
 *用户应根据自己的实际电路来进行调整                                    *
 ************************************************************************/
#define        XBYTE       ((unsigned char volatile xdata *) 0xA000)

/************************************************************************
 *定义指针                                                              *
 ************************************************************************/
 extern unsigned char             xdata  *Sja_PeliCan;    


//计算SJA1000在电路中的实际地址: 基址 + 内部寄存器地址

/************************************************************************
 * 以下的定义为SJA1000的内部寄存器的地址(Peli模式),不可修改            *
 *     各寄存器的具体功能清参阅sja1000的数据手册                        *
 ************************************************************************/
#define         REG_ModeControl    XBYTE[0]        //模式和控制寄存器
// 0x01  复位模式(请求)位
// 0x02  仅听模式位
// 0x04  自我测试模式位
// 0x08  验收滤波器模式位
// 0x10  进入休眠模式位
#define         REG_Command       XBYTE[1]        //命令寄存器
// 0x01  发送请求位
// 0x02  终止发送位
// 0x04  释放接收缓冲器位
// 0x08  清除数据超载位
// 0x10  自身接收请求位
#define         REG_Status        XBYTE[2]        //状态寄存器
// 0x01  接收缓冲器状态位
// 0x02  数据超载状态位
// 0x04  发送缓冲器状态位
// 0x08  发送完成状态位
// 0x10  接收状态位
// 0x20  发送状态位
// 0x40  错误状态位
// 0x80  总线状态位
#define         REG_Interrupt    XBYTE[3]        //中断寄存器
// 0x01  接收中断位
// 0x02  发送中断位
// 0x04  警告错误中断位
// 0x08  数据超载中断位
// 0x10  唤醒中断位
// 0x20  错误隐性中断位
// 0x40  仲裁丢失中断位
// 0x80  总线错误中断位
#define         REG_InterruptEn  XBYTE[4]        //中断使能和控制寄存器
// 0x01  接收中断使能位
// 0x02  发送中断使能位
// 0x04  警告错误中断使能位
// 0x08  数据超载中断使能位
// 0x10  唤醒中断使能位
// 0x20  错误隐性中断使能位
// 0x40  仲裁丢失中断使能位
// 0x80  总线错误中断使能位
#define         REG_BusTiming0    XBYTE[6]        //总线定时寄存器0 
#define         REG_BusTiming1    XBYTE[7]        //总线定时寄存器1 
// 0x80  采样模式位 1=总线被采样三次  0=总线被采样一次
#define         REG_OutControl    XBYTE[8]        //输出控制寄存器
//OCMODE0  OCMODE1
// 0x00  双相输出模式
// 0x02  正常输出模式
// 0x03  时钟输出模式

//TX1的输出管脚配置
// 0x20  输出极性控制位
// 0x00  配置为悬空
// 0x40  配置为下拉
// 0x80  配置为上拉
// 0xc0  配置为推挽

 //TX0的输出管脚配置
// 0x04  输出极性控制位
// 0x00  配置为悬空
// 0x08  配置为下拉
// 0x10  配置为上拉
// 0x18  配置为推挽

#define         REG_Test           XBYTE[9]        //测试寄存器

//验收代码和屏蔽寄存器
#define         REG_AcceptCode0    XBYTE[16]
#define         REG_AcceptCode1    XBYTE[17]
#define         REG_AcceptCode2    XBYTE[18]
#define         REG_AcceptCode3    XBYTE[19]
#define         REG_AcceptMask0    XBYTE[20]
#define         REG_AcceptMask1    XBYTE[21]
#define         REG_AcceptMask2    XBYTE[22]
#define         REG_AcceptMask3    XBYTE[23]

//其他寄存器
#define         REG_ArbLostCap    XBYTE[11]        //仲裁丢失捕捉
#define         REG_ErrCodeCap    XBYTE[12]        //错误代码捕捉
#define         REG_ErrWarnLimit  XBYTE[13]        //出错警告界限
#define         REG_RxErrCount    XBYTE[14]        //RX错误记数
#define         REG_TxErrCount    XBYTE[15]        //TX错误记数
#define         REG_RxMsgCount    XBYTE[29]        //RX报文记数器
#define         REG_RxBufStartAdr XBYTE[30]        //RX缓冲器其始位置

#define         REG_ClockDivide   XBYTE[31]        //时钟分频寄存器 0x1F=31
// 0x07  CLKOUT=震荡器频率
// 0x00  CLKOUT=1/2震荡器频率

// 0x08  时钟关闭位,时钟输出管脚控制位
// 0x20  用于接收中断的管脚TX1
// 0x40  CAN比较器旁路控制位
// 0x80  CAN模式控制位

//以下为发送缓冲区寄存器定义 仅写地址
#define         REG_TxFramInfo    XBYTE[16]         //发送缓冲区1
#define         REG_TxBuffer1     XBYTE[17]         //发送缓冲区1
#define         REG_TxBuffer2     XBYTE[18]         //发送缓冲区2
#define         REG_TxBuffer3     XBYTE[19]         //发送缓冲区3
#define         REG_TxBuffer4     XBYTE[20]         //发送缓冲区4
#define         REG_TxBuffer5     XBYTE[21]         //发送缓冲区5
#define         REG_TxBuffer6     XBYTE[22]         //发送缓冲区6
#define         REG_TxBuffer7     XBYTE[23]         //发送缓冲区7
#define         REG_TxBuffer8     XBYTE[24]         //发送缓冲区8
#define         REG_TxBuffer9     XBYTE[25]         //发送缓冲区9
#define         REG_TxBuffer10    XBYTE[26]         //发送缓冲区10
#define         REG_TxBuffer11    XBYTE[27]         //发送缓冲区11
#define         REG_TxBuffer12    XBYTE[28]         //发送缓冲区12

//以下为发送缓冲区寄存器定义 仅读地址
#define         REG_TxFramInfoRd    XBYTE[96]       //发送缓冲区1
#define         REG_TxBufferRd1     XBYTE[97]       //发送缓冲区1
#define         REG_TxBufferRd2     XBYTE[98]       //发送缓冲区2
#define         REG_TxBufferRd3     XBYTE[99]       //发送缓冲区3
#define         REG_TxBufferRd4     XBYTE[100]      //发送缓冲区4
#define         REG_TxBufferRd5     XBYTE[101]      //发送缓冲区5
#define         REG_TxBufferRd6     XBYTE[102]      //发送缓冲区6
#define         REG_TxBufferRd7     XBYTE[103]      //发送缓冲区7
#define         REG_TxBufferRd8     XBYTE[104]      //发送缓冲区8
#define         REG_TxBufferRd9     XBYTE[105]      //发送缓冲区9
#define         REG_TxBufferRd10    XBYTE[106]      //发送缓冲区10
#define         REG_TxBufferRd11    XBYTE[107]      //发送缓冲区11
#define         REG_TxBufferRd12    XBYTE[108]      //发送缓冲区12

//以下为接收缓冲区寄存器定义
#define         REG_RxFramInfo    XBYTE[16]         //发送缓冲区1
#define         REG_RxBuffer1     XBYTE[17]         //接收缓冲区1
#define         REG_RxBuffer2     XBYTE[18]         //接收缓冲区2
#define         REG_RxBuffer3     XBYTE[19]         //接收缓冲区3
#define         REG_RxBuffer4     XBYTE[20]         //接收缓冲区4
#define         REG_RxBuffer5     XBYTE[21]         //接收缓冲区5
#define         REG_RxBuffer6     XBYTE[22]         //接收缓冲区6
#define         REG_RxBuffer7     XBYTE[23]         //接收缓冲区7
#define         REG_RxBuffer8     XBYTE[24]         //接收缓冲区8
#define         REG_RxBuffer9     XBYTE[25]         //接收缓冲区9
#define         REG_RxBuffer10    XBYTE[26]         //接收缓冲区10
#define         REG_RxBuffer11    XBYTE[27]         //接收缓冲区11
#define         REG_RxBuffer12    XBYTE[28]         //接收缓冲区12

/************************************************************************
 *定义命令字                                                            *
 ************************************************************************/ 
#define         CMD_SEND             0x01       //发送请求命令
#define         CMD_ABORT_SEND       0x02       //夭折发送命令
#define         CMD_RELEASE_RXBUFF   0x04       //释放接收缓冲区
#define         CMD_CLEAR_OVER_STAT  0x08       //清除超载状态
#define         CMD_GOTO_SLEEP       0x10       //自身接收请求位  
/************************************************************************
 *定义16M的晶体下,CAN总线波特率                                        *
 ************************************************************************/
/************************************************************************
;*参数说明:  CAN_ByteRate  波特率(Kbit/s) BTR0     BTR1               *
;*           0	            20              053H,    02FH               *
;*           1	            40              087H,    0FFH               *  
;*           2	            50              047H,    02FH               *
;*           3	            80              083H,    0FFH               *
;*           4	            100             043H,    02fH               *
;*           5	            125             03H,     01cH               *
;*           6              200             081H,    0faH               *
;*           7	            250             01H,     01cH               *
;*           8	            400             080H,    0faH               *
;*           9	            500             00H,     01cH               *
;*           10	            666             080H,    0b6H               *
;*           11	            800             00H,     016H               *
;*           12	            1000            00H,     014H               *
;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为16MHZ,       *
///////////////////////////////////////////////////////////////////////// 
;*参数说明:  CAN_ByteRate    波特率(Kbit/s) BTR0     BTR1             *
;*           0              5                 0EFH     0FFH             *
;*           1              10                0D7H     0FFH             *
;*           2              20                0CBH     0FFH             *
;*           3              40                0C5H     0FFH             *
;*           4              50                0C9H     0A7H             *
;*           5              80                0C2H     0FFH             *
;*           6              100               04H      0A7H             *
;*           7              200               02H      025H             *
;*           8              250               01H      045H             *
;*           9              300               01H      025H             *
;*           10             500               01H      012H             *
;*           11             600               00H      025H             *
;*           12             1000              00H      012H             *
;*                                                                      *
;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为12MHZ,       *
///////////////////////////////////////////////////////////////////////// 
;*说明:其它晶体的频率的值的波特率,需自己计算 。该只能用于复位模式      *
;************************************************************************/
#endif /* PeliCAN */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -