32位硬件过滤器与16位硬件过滤器一样具有两种模式32位标识符模式与32位屏蔽位模式。
32位和16位在使用规则上没有太大的区别,唯一存在区别的是寄存器的ID映射区域不同,下文根据不同模式分别进行32位硬件过滤器实例分析。
32位标识符列表32位标识符模式较16位更好理解,一个CAN_FxRx寄存器不再拆分,这样就可以更完整的过滤ID,比如16位寄存器无法的扩展ID的第14位到第0位进行规则匹配,而32位就可以完整限制ID过滤规则,比如下图列举的过滤规则:
将CAN_FxR1[31:0]为0x200002,IDE为低,RTR为高,限制仅接收标准远程帧,由于为标准帧,ID通过CAN_FxR1[31:21]限制为1,综合来看此规则订阅CAN仅接收ID为1的标准远程帧。
将CAN_FxR2[31:0]为0x400004,IDE为高,RTR为低,限制仅接收扩展数据帧,由于为扩展,ID通过CAN_FxR2[31:3]限制为0x80000,综合来看此规则订阅CAN仅接收ID为0x80000的扩展数据帧。
32位屏蔽位模式与16位屏蔽位模式规则一致,标识符寄存器用来存储规则,屏蔽位寄存器用于是否开启判断,就不再赘述。
举例说明:
将标识符寄存器CAN_FxR1[31:0]为0x200000,屏蔽位寄存器CAN_FxR2[31:0]为0x200000,屏蔽位寄存器CAN_FxR2的IDE与RTR均为低,代表可以通过标准帧、扩展帧、数据帧、远程帧,由于标准与扩展的ID判断的映射区域不同,分开进行分析。
• 标准帧解析过程:标识符寄存器的CAN_FxR1[31:21]为1,并且屏蔽位寄存器的对应位也为1,代表可以接收该bit位为1的标准帧ID(即仅接收标准ID为奇数的CAN帧),综合前置调整,该配置可通过标准ID为奇数的远程帧与数据帧。
• 扩展帧解析过程:标识符寄存器的CAN_FxR1[31:3]为0x40000,并且屏蔽位寄存器的对应位也为1,代表可以接收第20位bit为高的扩展帧,比如ID为0x40000、0x4FFFF、0x7000等ID的扩展远程帧和数据帧。
通过限制IDE位可实现标准ID与扩展ID的限制,比如下面这个配置案例,限制IDE为低(标识符寄存器的IDE映射位为低,屏蔽位寄存器的IDE映射位为高)达到限制可接受的ID类型为标准数据帧和标准远程帧两种的效果,再加上标准帧ID的映射区数值为0x1,屏蔽位寄存器的ID映射区也为0x1,代表该限制仅接收标准ID为奇数的数据帧与远程帧。
接下来的举例限制可接收的数据帧为标准ID为奇数的数据帧。
下图的举例将接收数据帧限定为扩展ID(标识符寄存器的IDE映射位为高,屏蔽位寄存器的IDE映射位为高),再加上扩展帧ID的映射区数值为0x1,限定条件也为0x01,代表下图配置仅接收扩展ID为奇数的远程帧与数据帧。
下图配置同时限制ID类型与帧类型,仅接收扩展ID为奇数的数据帧。
过滤器优先级不少芯片支持多组CAN过滤器配置,比如CH32V307最多支持28组过滤器配置,若出现某个报文数据可以通过多个过滤器的过滤,则接收邮箱中存放的过滤器编号会根据过滤器的优先级规则来决定存放哪个过滤器编号,过滤器的优先级规则如下:
①所有32位的过滤器优先级均高于16位的过滤器;
②对于同宽度的过滤器,标识符列表的过滤器优先级高于屏蔽位模式的过滤器;
③宽度和模式都一致的过滤器,编号小的过滤器优先级更高。
【福利】蓝牙+Wi-Fi模块王炸福利!免费送样