CAN 总线系列讲座第六讲——SJA1000 的滤波器设置 CAN 总线的滤波器设置就像给总线上的节点设置了一层过滤网,只有符合要求的 CAN 信息帧才可以通过,其余的一概滤除。 在验收滤波器的帮助下,只有当接收信息中的识别位和验收滤波器预定义的值相等时,CAN 控制器才允许将已接收信息存入 RXFIFO。 验收滤波器由验收代码寄存器(ACRn)和验收屏蔽寄存器 AMRn 定义,要接收的信息的位模式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义某些位为“不影响”,即可为任意值。 1、BasicCAN 模式下 SJA1000 滤波器 在验收滤波器的帮助下 CAN 控制器能够允许 RXFIFO 只接收同识别码和验收滤波器中预设值相一致的信息,验收滤波器通过验收代码寄存器 ACR 和验收屏蔽寄存器 AMR 来定义。 表2-1 验收代码寄存器 ACR BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 AC.7 AC.6 AC.5 AC.4 AC.3 AC.2 AC.1 AC.0 复位请求位被置高,验收代码寄存器 ACR 可以访问(读/写)。 表2-2 验收屏蔽寄存器 AMR BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 AM.7 AM.6 AM.5 AM.4 AM.3 AM.2 AM.1 AM.0 复位请求位被置高,验收屏蔽寄存器AMR可以访问(读/写)。验收屏蔽寄存器定义验收代码寄存器的相应位对验收滤波器是“相关的”或“无影响的”。 滤波的规则是:每一位验收屏蔽分别对应每一位验收代码,当该位验收屏蔽位为“1”的时候(即设为无关),接收的相应帧 ID 位无论是否和相应的验收代码位相同均会表示为接收;当验收屏蔽位为“0”的时候(即设为相关),只有相应的帧 ID 位和相应的验收代码位值相同的情况才会表示为接收。只有在所有的位都表示为接收的时候,CAN 控制器才会接收该报文。 举例:如何设置滤波器,接收标识符为 0000 1010 的 CAN 帧? 在 SJA1000 复位模式下,设置寄存器 CDR.7 为“0”,即设置 CAN 控制器 SJA1000 工作于BasicCAN 模式。 设置验收代码寄存器 ACR0=0x0A; 根据滤波器信息帧与滤波器的位对应关系,将需要参与滤波的信息位对应的验收屏蔽寄存器位设置为 0,设置 AMR=0x00; 如此设置,SJA1000 接收标识符 ID.10~ID.3 为 0000 1010 的 CAN 帧。 2、PeliCAN 模式下 SJA1000 滤波器 有两种不同的过滤模式可在模式寄存器中选择MOD.3, AFM。 单滤波器模式:AFM 位是1; 双滤波器模式:AFM 位是0。 SJA1000 验收滤波器由4...