测试方案
-
CAN0和CAN1相连,互相收发数据。连接方式如下图:
-
使用扩展模式CAN1发送数据CAN0接收数据。
-
使用标准模式CAN1发送数据CAN0接收数据。
-
使用EJTAG中bin文件夹内的can.c代码,使用callbin的方式测试CAN的收发。Can.c中CAN默认工作在扩展模式。当测试CAN的标准模式时需要对代码进行如下修改。
软件流程
-
设置控制器进入复位模式
-
检测到有复位请求后将中止当前接收/发送的信息而进入复位模式,一旦向复位位传送了 1-0 的下降沿 CAN 控制器将返回工作模式
-
-
设置总线定时。
-
总线定时0寄存器对应BTR0
-
总线定时1寄存器对应BTR1
-
-
设置标准模式还是扩展模式
-
向偏移地址为1的寄存器写0x81则为扩展模式
-
向偏移地址为1的寄存器写0x1则为标准模式
-
-
设置过滤,当消息的ID与上验收屏蔽值等于验收代码与上验收屏蔽值时,控制器接收消息。
-
扩展模式,设置寄存器偏移地址为16~23的寄存器,下图红色方框中。
-
-
标准模式,设置寄存器偏移地址为4、5的寄存器
-
向控制寄存器的RRbit写0,进入正常工作模式。
-
使能中断
-
扩展模式:向偏移地址为4的寄存器写入0xff。
-
标准模式:向控制寄存器写入0x1e打开中断。
-
-
发送数据
-
扩展模式:将发送的数据写入如下图所示寄存器。
-
-
标准模式:将发送的数据写入如下图所示寄存器。
-
需要保证发送的帧不被接受端所过滤掉。
-
发送数据:数据写入后,将命令寄存器的TR置1。
-
两种模式操作相同。
-
-
接收数据:查询中断寄存器的RI接收中断是否为1。为1则说明接收到数据。
-
两种模式操作相同。
-
-
读取接收的数据
-
扩展模式
-
-
标准模式
注意
CAN在每次发送/接收数据后需要复位。