远程帧有两种功能:一种是模块要求从其他节点获得数据,另一种是其他节点请求获得数据,模块需要应答。
1.请求其他节点的数据
为了从其他节点得到数据,配置对象为接收邮箱。以对象3为例,CPU需要进行如下操作:
1)设置信息控制寄存器(MSGCTRL)的RTR位为1。
写MSGCTRL(3)=0x12
2)将正确的标识符写入信息标识符寄存器(MSGID)。
写MSGID(3)=0x4F780000
3)设置邮箱的CANTRS标志位。由于配置邮箱为接收邮箱,它将仅仅发送一个远程请求信息到其他节点。
CANTRS.3=1
4)模块将接收到的应答信息存储在该邮箱中并且将CANRMP位置位。该操作可能启动一个中断。同时,要确保没有其他邮箱使用相同的ID。
等待或判断CANRMP.3=1。
5)读接收到的邮箱信息。
2.响应远程请求
1)把对象配置为一个发送邮箱。
2)在邮箱使能之前设置MSGID寄存器的自动应答模式位AAM(MSGID.29)。MSGID(1)=0x35AC0000
3)更新数据区。(www.daowen.com)
CANMIL,MDH(1)=xxxxxxxxh
4)设置CANME标志位为1来使能邮箱。
CANME.1=1
当从其他节点获得一个远程请求时,自动置位CANTRS标志位,并且发送数据至该节点。接收信息和发送信息的标识符应该是相同的。
数据发送之后,置位CANTA标志位,然后CPU才更新数据。
等待或判断CANTA.1=1
3.更新数据
要更新自动应答模式对象的数据,需要执行以下步骤。该顺序也可用于更新CANTRS标志位被置位的正常发送模式的数据。
1)设置改变数据请求位(CDR)(CANMC.8)及主控寄存器(CANMC)中对象的邮箱序号。这将告诉CAN模块CPU想要更改数据。例如,对于对象1:
写CANMC=0x0000101
2)写信息数据到邮箱数据寄存器。例如:
写CANMDL(1)=xxxx0000h
3)清除CDR位(CANMC.8)从而使能对象。
写CANMC=0x00000000
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。