📄 sja_pelican.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 + -