1. 程式人生 > >飛思卡爾CAN模組關於ID和mask的使用

飛思卡爾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,