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

📄 sja_bcanconf.asm

📁 SJA1000驱动程序(分别用C&ASM书写)
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                                  ;=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 + -