飞思卡尔CAN模块关于ID和mask的使用

该方式提供了一种类似于寻址的模式。

1、CAN的buf每个都是独立工作的

2、最好不要设定一个CAN模块发送和接受同样的一个ID3、CAN的buf的ID和mask的设置。ID表示该buf只接受这个ID的报文。但是,mask提供了一种方式,并不只是接受某个特定ID的报文。而是一段区域的报文。举个例子:

ID设置为0x85;
mask设置为0xFC。那么也就意味着0x84、0x85、0x86、0x87的报文均可以被该特定的buf接收。
注:以上为飞思卡尔系列单片机的叫法。

4、以上接收的意义意味着,每个buf都是独立工作的。可以在不用占用cpu的情况下,处理特定ID的报文。
据说j1939协议就是利用上述方式进行寻址。

5、以下是对buf进行配置的示例代码的片段:

CAN_A.BUF[4].CS.B.IDE = 0; /* MB 4 will look for a standard ID */
CAN_A.BUF[4].ID.B.STD_ID = 0x85; /* MB 4 will look for ID = */
CAN_A.BUF[4].CS.B.CODE = 4; /* MB 4 set to RX EMPTY */
CAN_A.RXIMR[4].B.MI = 0xfffffffcu<<18u; /*0xc = 0b1100*/

6、以下是调试时需要注意的事项:
CAN_A.MCR.B.MBFEN = 0b1; /*不使用过时的模式*/

The Individual Rx Mask Registers are implemented in RAM, so they are not affected by reset and must be
explicitly initialized prior to any reception. Furthermore, they can only be accessed by the CPU while the
module is in Freeze Mode. Out of Freeze Mode, write accesses are blocked and read accesses will return
“all zeros”. Furthermore,

猜你喜欢

转载自www.cnblogs.com/praiseslow/p/9957580.html