CAN报文的验收滤波原理传统方案
传统CAN总线解决方案中通常采用PHILIPS公司的独立CAN控制器SJA 1000。SJA1000同时兼容CAN 2.0A和CAN 2.0B两种技术规范,它有两种滤波模式:单滤波模式和双滤波模式。无论哪一种模式,都只有当接收信息中的识别位和验收滤波器预定义的值相同时,CAN控制器才允许将该信息存入接收缓冲区。
SJA1000中,验收滤波器由验收代码寄存器(ACR)和验收屏蔽寄存器(AMR)来定义,这两个8位的寄存器相配合工作,AMR为0的位,ACR与之对应的位必须和CAN报文标识符的对应位完全相同才予以接收,而AMR为1的位,则屏蔽掉ACR与之对应的位,即CAN报文中对应的位可为0也可为1。实际上,这种验收滤波方案只能满足一些规律性较高的或个数较少的标识符的过滤,无法对更为复杂的任意标识符进行过滤,这无疑会增加系统软件设计及运行时的负担。
LPC2000的滤波原理及过程分析PHILIPS公司的LPC2000系列ARM微控制器内嵌2或4个CAN控制器,都有先进的验收滤波器。概括性地描述LPC2000对CA N报文的验收滤波流程:CAN控制器监听所有来自CAN总线上的报文,当一个报文到达时,CAN控制器执行快速的硬件搜索算法,将收到的CAN报文标识符与验收过滤RAM中存储的标识符进行匹配。如果没有匹配,则丢弃该报文,这个过程不会对CAN控制器产生中断,应用代码仍然正常执行;如果有匹配的标识符,CAN控制器将通过置位集中接收状态寄存器中的相应位产生中断,中断服务程序将该报文从CAN控制器的寄存器复制到RAM中,并通过置位CAN命令寄存器的相应位来释放CAN控制器的接收寄存器。1
验收滤波的设置验收滤波寄存器是一组用于控制验收滤波器工作模式及LUT格式的32位寄存器,起始地址为OxE003C000,在它们的相应位写入不同的数值就可以实现对验收滤波器的设置。
寄存器AFMR决定验收滤波器的工作模式,它只有前3位有效,通过4种组合,可以使验收滤波器工作于不同模式。在设置验收滤波相关的寄存器和LUT表格的内容时,首先须将AFMR寄存器中的AccBP位置1,实际上,只要向AFMR寄存器中写入0x03,将其设置为旁路模式就可以了。如果AccBP位没有置1,仅有LUT中标识符的禁能位可以修改,如果只需禁能或使能某个Cell所指定的标识符过滤,就可通过向LUT中相应的Cell写入一1或0来实现。1