📄 sja_bcanconf.asm
字号:
;=0,;微控制器的任何读访问将清除此位 *
BIT_EI EQU 04H ;错误中断位, 中断寄存器的第2位 *
;=1,;错误中断使能时,错误状态位或 *
;总线状态位的变化会置位此位 *
;=0,;微控制器的任何读访问将清除此位 *
BIT_DOI EQU 08H ;数据溢出中断位,中断寄存器的第3位 *
;=1,;当数据溢出中断使能位被置为1时向数*
;据溢出状态位'0-1'跳变,此位被置位*
;=0,;微控制器的任何读访问将清除此位 *
BIT_WUI EQU 10H ;唤醒中断; 中断寄存器的第4位 *
;=1,;退出睡眠模式时此位被置位 *
;=0,; 微控制器的任何读访问将清除此位 *
;BIT_5 ;系统保留位 *
;BIT_6 ;系统保留位 *
;BIT_7 ;系统保留位 *
;验收代码寄存器;;;复位模式; 可读写 *
REG_ACR EQU CONTROLLER_BASE+04H ;内部验收代码寄存器地址; *
;BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 *
;AC.7 AC.6 AC.5 AC.4 AC.3 AC.2 AC.1 AC.0 *
;验收代码位(AC.7-AC.0)和信息识别码的 *
;高8位(ID.10-ID.3)相等,且与验收屏蔽 *
;位(AM.7-AM.0)的相应位相或为1。即如果*
;满足以下方程的描述,则被接收: *
;(ID.10-ID.3)≡(AC.7-AC.0)]∨(AM.7-AM.0)≡11111111
;验收屏蔽寄存器;;;复位模式; 可读写 *
REG_AMR EQU CONTROLLER_BASE+05H ;内部验收屏蔽寄存器地址; *
;BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 *
;AM.7 AM.6 AM.5 AM.4 AM.3 AM.2 AM.1 AM.0 *
;验收屏蔽寄存器定义验收代码寄存器的 *
;相应位对验收滤波器是"相关的"或"无影 *
;响的"(即可为任意值)。 *
;总线定时寄存器0;;复位模式; 可读写 *
REG_BTR0 EQU CONTROLLER_BASE+06H ;总线定时寄存器0 ; *
;BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 *
;SJW.1 SJW.0 BRP.5 BRP.4 BRP.3 BRP.2 BRP.1 BRP.0 *
;总线定时寄存器0定义了波特率
;预设值(BRP)和同步跳转宽度(SJW)的值。
;CAN系统时钟由如下公式计算:
;tSCL=2×tCLK×(32×BRP.5+16×BRP.4+8×BRP.3+4×BRP.2+2×BRP.1+BRP.0+1)
;这里tCLK =XTAL的频率周期=1/fXTAL
;同步跳转宽度
;tSJW=tSCL×(2×SJW.1+SJW.0+1)
;总线定时寄存器1;;复位模式; 可读写 *
REG_BTR1 EQU CONTROLLER_BASE+07H ;总线定时寄存器1 ; *
;BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 *
;SAM TSEG2.2 TSEG2.1 TSEG2.0 TSEG1.3 TSEG1.2 TSEG1.1 TSEG1.0 *
;时间段1(TSEG1)和时间段(TSEG2)
;(TSEG1)和(TSEG2)决定了每一位的时钟数目和采样点的位置,这里:
;tSYNCSEG=1×tSCL
;tTSEG1=tSCL×(8×TSEG1.3+4×TSEG1.2+2×TSEG1.1+TSEG1.0+1)
;tTSEG2=tSCL×(4×TSEG2.2+2×TSEG2.1+TSEG2.1+1)
BIT_SAM EQU 80H ;采样模式位
;1==总线被采样三次
;0==总线被采样一次
;输出控制寄存器(OCR);;复位模式; 可读写
REG_OCR EQU CONTROLLER_BASE+08H ;输出控制寄存器 *
;BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 *
;OCTP1 OCTN1 OCPOL1 OCTP0 OCTN0 OCPOL0 OCMODE1 OCMODE0 *
;具体的输出模式控制请参阅sja1000的数据手册
BIT_PhaseMode EQU 00H ;双相输出模式 *
BIT_TestMode EQU 01H ;测试输出模式 *
BIT_NormalMode EQU 02H ;正常输出模式 *
BIT_ClkOutMode EQU 03H ;时钟输出模式 *
;//
BIT_OCPOL1 EQU 20H ;TX1输出极性控制位 *
BIT_Tx1Float EQU 00H ;配置为悬空
BIT_Tx1PullDn EQU 40H ;配置为下拉
BIT_Tx1PullUp EQU 80H ;配置为上拉
BIT_Tx1PshPull EQU 0C0H ;配置为推挽
;//
BIT_OCPOL0_Bit EQU 04H ;TX0输出极性控制位
BIT_Tx0Float EQU 00H ;配置为悬空
BIT_Tx0PullDn EQU 40H ;配置为下拉
BIT_Tx0PullUp EQU 80H ;配置为上拉
BIT_Tx0PshPull EQU 0C0H ;配置为推挽
;测试寄存器(仅由于内部测试)
REG_TEST EQU CONTROLLER_BASE+09H
;************************************************************************
;*发送缓冲区(内部地址0AH--13H) *
;************************************************************************
REG_TxBuffer1 EQU CONTROLLER_BASE+0AH ;发送缓冲区1
REG_TxBuffer2 EQU CONTROLLER_BASE+0BH ;发送缓冲区2
REG_TxBuffer3 EQU CONTROLLER_BASE+0CH ;发送缓冲区3
REG_TxBuffer4 EQU CONTROLLER_BASE+0DH ;发送缓冲区4
REG_TxBuffer5 EQU CONTROLLER_BASE+0EH ;发送缓冲区5
REG_TxBuffer6 EQU CONTROLLER_BASE+0FH ;发送缓冲区6
REG_TxBuffer7 EQU CONTROLLER_BASE+010H ;发送缓冲区7
REG_TxBuffer8 EQU CONTROLLER_BASE+011H ;发送缓冲区8
REG_TxBuffer9 EQU CONTROLLER_BASE+012H ;发送缓冲区9
REG_TxBuffer10 EQU CONTROLLER_BASE+013H ;发送缓冲区10
;************************************************************************
;*接收缓冲区(内部地址014H--01DH) *
;************************************************************************
REG_RxBuffer1 EQU CONTROLLER_BASE+014H ;接收缓冲区1
REG_RxBuffer2 EQU CONTROLLER_BASE+015H ;接收缓冲区2
REG_RxBuffer3 EQU CONTROLLER_BASE+016H ;接收缓冲区3
REG_RxBuffer4 EQU CONTROLLER_BASE+017H ;接收缓冲区4
REG_RxBuffer5 EQU CONTROLLER_BASE+018H ;接收缓冲区5
REG_RxBuffer6 EQU CONTROLLER_BASE+019H ;接收缓冲区6
REG_RxBuffer7 EQU CONTROLLER_BASE+01AH ;接收缓冲区7
REG_RxBuffer8 EQU CONTROLLER_BASE+01BH ;接收缓冲区8
REG_RxBuffer9 EQU CONTROLLER_BASE+01CH ;接收缓冲区9
REG_RxBuffer10 EQU CONTROLLER_BASE+01DH ;接收缓冲区10
;************************************************************************
;*内部地址 01EH 备用 *
;************************************************************************
;************************************************************************
;*时钟分频寄存器(内部地址01FH) *
;************************************************************************
REG_CDR EQU CONTROLLER_BASE+01FH ;时钟分频寄存器
;BIT 7 BIT6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 *
;CAN模式 CBP RXINTEN (0)(1) 关闭时钟 CD.2 CD.1 CD.0 *
BIT_DivBy1 EQU 07H ;时钟频率=fclk
BIT_DivBy2 EQU 00H ;时钟频率=fclk/2
;//
BIT_CLKOff EQU 08H ;关闭时钟输出
BIT_RXINTEN EQU 020H ;管脚仅用于接收中断
BIT_CBP EQU 040H ;CAN比较器旁路控制位
BIT_CANMode EQU 080H ;CAN模式控制位
;************************************************************************
;*SJA1000的命令字 *
;************************************************************************
TR_CMD EQU 01h ;//发送请求命令
AT_CMD EQU 02h ;//夭折发送命令
RRB_CMD EQU 04h ;//释放接收缓冲区
COS_CMD EQU 08h ;//清除超载状态
GTS_CMD EQU 010h ;//进入睡眠状态命令
;************************************************************************
;*SJA1000操作的错误 *
;************************************************************************
SJA_INTFACE_ERR EQU 0FFH
SJA_INIT_ERR EQU 0FEH
SJA_RCV_ERR EQU 0FDH
SJA_SEND_ERR EQU 0FCH
SJA_INITOBJ_ERR EQU 0FBH
SJA_INITBTR_ERR EQU 0FAH
SJA_INITOCLK_ERR EQU 0F9H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -