bxCAN 标识符筛选

标识符筛选

在 CAN 协议中,消息的标识符与节点地址无关,但与消息内容有关。因此,发送器将消息广播给所有接收器。在接收到消息时,接收器节点会根据标识符的值来确定软件是否需要该消息。如果需要,该消息将复制到 SRAM 中。如果不需要,则必须在无软件干预的情况下丢弃该消息。

为了满足这一要求,bxCAN 控制器为应用程序提供了 28 个可配置且可调整的筛选器组 (27-0)。在其他器件中,bxCAN 控制器为应用程序提供了 14 个可配置且可调整的筛选器组 (13-0),以便仅接收软件需要的消息。此硬件筛选功能可以节省软件筛选所需的 CPU 资源。每个筛选器组 x 均包含两个 32 位寄存器,分别是 CAN_FxR0 和 CAN_FxR1。

可调整的宽度

为了根据应用程序的需求来优化和调整筛选器,每个筛选器组可分别进行伸缩调整。根据筛选器尺度不同,一个筛选器组可以:
●    为 STDID[10:0]、EXTID[17:0]、IDE 和 RTR 位提供一个 32 位筛选器。
●    为 STDID[10:0]、RTR、IDE 和 EXTID[17:15] 位提供两个 16 位筛选器。
请参见图 231。
此外,筛选器还可配置为掩码模式或标识符列表模式。

掩码模式

在掩码模式下,标识符寄存器与掩码寄存器关联,用以指示标识符的哪些位“必须匹配”,哪些位“无关”。

标识符列表模式

在标识符列表模式下,掩码寄存器用作标识符寄存器。这时,不会定义一个标识符和一个掩码,而是指定两个标识符,从而使单个标识符的数量加倍。传入标识符的所有位都必须与筛选器寄存器中指定的位匹配。

筛选器组尺度和模式配置

筛选器组通过相应的筛选器主寄存器 进行配置。为了配置筛选器组,必须通过将筛选器激活寄存器中的筛选器激活位位清零而将其停用。筛选器尺度通过筛选器尺度寄存器中的相应筛选器尺度配置位进行配置,参见图 231。相应掩符/标识符寄存器的标识符列表或标识符掩码模式通过筛选器模式寄存器中的筛选器模式位进行配置。   
要筛选一组标识符,应将掩码/标识符寄存器配置为掩码模式。
要选择单个标识符,应将掩码/标识符寄存器配置为标识符列表模式。
未由应用程序使用的筛选器应保持停用。
筛选器组中的每个筛选器将按从 0 到最大值的顺序进行编号(称为筛选器编号),具体取决于每个筛选器组的模式和尺度。
有关筛选器配置,请参见图 231。

筛选器匹配索引

消息接收到 FIFO 中后,即可供应用程序使用。应用程序数据通常会复制到 SRAM 中的位置。为了将数据复制到正确的位置,应用程序必须通过标识符来识别数据。为了避免这种情况,方便访问 SRAM 位置,CAN 控制器提供了一个筛选器匹配索引。
该索引根据筛选器优先级规则与消息一同存储在邮箱中。因此,每条收到的消息都有相关联的筛选器匹配索引。
筛选器匹配索引的使用方法有两种:
●    将筛选器匹配索引与预期值列表进行比较。
●    将筛选器匹配索引用作阵列索引,以访问数据目标位置。
对于非屏蔽筛选器,软件不再需要比较标识符。
如果筛选器有屏蔽,软件则只需比较屏蔽位。
筛选器编号的索引值与筛选器组的激活状态无关。此外,还将使用两个独立的编号方案,每
个 FIFO 各一个。有关示例,请参见图 232。

筛选器优先级规则

根据筛选器组合,可能会出现一个标识符成功通过数个筛选器的情况。这种情况下,将根据
以下优先级规则选择接收邮箱中存储的筛选器匹配值:
●    32 位筛选器优先于 16 位筛选器。
●    对于尺度相等的筛选器,标识符列表模式优先于标识符掩码模式。
●    对于尺度和模式均相等的筛选器,则按筛选器编号确定优先级(编号越低,优先级越高)。

以上示例说明了 bxCAN 的筛选原则。接收到消息后,首先将标识符与标识符列表模式中配置的筛选器进行比较。如果匹配,消息将存储在相应 FIFO 中,匹配筛选器的索引则存储在筛选器匹配索引中。如本例所示,标识符与标识符 #2 匹配,因此消息内容和 FMI 2 存储到该 FIFO 中。

如果不匹配,则将传入标识符与掩码模式中配置的筛选器进行比较。

如果标识符与筛选器中配置的任何标识符均不匹配,硬件会在不干扰软件的情况下丢弃该消息。

你可能感兴趣的:(单片机,嵌入式硬件,stm32,网络)