发表于:2003-03-11 09:00:00
1楼
以下供参考:
CAN总线初始化设计
要使SJA1000正常工作,必须先对其作初始化,这是一个重点。对SJA1000的操作是由读写其片内的控制寄存器实现的。待SJA1000硬件复位完成后,单片机就可以初始化SJA1000,初始化程序如下: INITISJA1000:
RESET:
CONFIG:
OPERATE_MODE:
CONFIG1:
CLR EX0 ;关中断
MOV DPTR , #0000H
MOV A , #01H
MOVX @DPTR , A ;设置复位请求标志
MOV A , #40H
MOV DPTR , #001FH
MOVX @DPTR , A ;CDR=40H
MOV A , #13H
MOV DPTR , #0004H
MOVX @DPTR , A ;设ACR接受代码=13H
MOV A , #00H
MOV DPTR , #0005H
MOVX @DPTR , A ;接受屏蔽寄存器(AMR)=00H
MOV A , #01H
MOV DPTR , #0006H
MOVX @DPTR , A ; BTR0=01H
MOV A , #1CH
MOV DPTR , #0007H
MOVX @DPTR , A ; BTR1=1CH
MOV A , #1AH
MOV DPTR , #0008H
MOVX @DPTR , A ; OCR=1AH
MOV A , #00001100B
MOV DPTR , #0001H
MOVX @DPTR , A ; GTS=0, CDO=1, RRB=1
MOV DPTR , #0000H
MOV A , #00011010B
MOVX @DPTR , A ;进入工作模式
SETB EX0 ;开中断
RET
这里SJA1000的首地址是0000H。只有SJA1000进入复位工作模式,才可以初始化相应的寄存器。时钟分频寄存器(CDR)设定值为40H,表示选BasicCAN工作模式,忽略CAN输入比较器和不用TX1输出做专用接收中断输出。接收代码寄存器(ACR)和接收屏蔽寄存器(AMR)组成接收过滤器,接收代码位(AC.7-AC.0),接收屏蔽位(AM.7-AM.0)和信息识别码的八位(ID.10-ID.3)满足下述方程,该信息才会被接收:
[(ID.10-ID.3)≡(AC.7-AC.0)] ∨(AM.7-AM.0)≡11111111
总线时序寄存器0(BTR0)可决定波特率预置值和同步跳转宽度的值,BTR0=01H表示波特率设为250Kbps(用16M晶振)。总线时序寄存器1(BTR1)决定位周期宽度,采样点位置和在每个采样点的采样次数。系统中各节点的BTR0、BTR1应设为相同,否则不能互相通信。输出控制寄存器OCR决定了不同输出驱动配置的建立。设置完这些寄存器后,要将SJA1000设为正常工作模式,并按需要使能其相应的中断位。SJA1000中各控制寄存器的详细说明和用法可参考文献1。