if CAN_InitStruct-Filter == CLOSE uint32_t &MSCAN-CANIDAR_BANK_10 = 0xFFFFFFFF; uint32_t &MSCAN-CANIDMR_BANK_10 = 0xFFFFFFFF; uint32_t &MSCAN-CANIDAR_BANK_20 = 0xFFFFFFFF; uint32_t &MSCAN-CANIDM
这段程序是用来配置CAN过滤器的。根据传入的CAN_InitStruct->Filter值,进行不同的配置。
如果CAN_InitStruct->Filter等于CLOSE,则关闭过滤器,将MSCAN寄存器的CANIDAR_BANK_1、CANIDMR_BANK_1、CANIDAR_BANK_2和CANIDMR_BANK_2都设置为0xFFFFFFFF。
否则,说明需要开启过滤器,首先将MSCAN寄存器的CANIDAC设置为0x00,表示双滤波模式。
然后,根据传入的CAN_InitStruct->RID来配置过滤器。
第一组过滤器的设置为:
- CANIDAR_BANK_1[0]和CANIDAR_BANK_1[1]分别为CAN_InitStruct->RID右移3位和左移5位的结果,用来设置过滤器的标识符。
- CANIDAR_BANK_1[2]和CANIDAR_BANK_1[3]设置为0xFF,表示不对标识符的扩展位进行过滤。
- CANIDMR_BANK_1[0]设置为0x00,表示不对标识符的位0进行过滤。
- CANIDMR_BANK_1[1]设置为0x1F,表示对标识符的位1-5进行过滤。
- CANIDMR_BANK_1[2]和CANIDMR_BANK_1[3]设置为0xFF,表示不对标识符的位6-31进行过滤。
第二组过滤器的设置与第一组类似。
总的来说,这段程序通过修改MSCAN寄存器的相应位来配置CAN过滤器,从而过滤出需要的CAN消息
原文地址: http://www.cveoy.top/t/topic/ii3f 著作权归作者所有。请勿转载和采集!