CAN标识符、过滤器、屏蔽器之间的关系
CAN节点通过标识符来识别CAN帧是不是自己想要的,识别方法就是通过滤波屏蔽寄存器的设置来完
成,接收滤波寄存器设置了标识符每位的值,接收屏蔽寄存器一般有相同的数量匹配接收滤波寄存器,规定接
收滤波寄存器标识符每一位的值是否需要进行匹配,比如芯片设置有6个接收滤波寄存器和6个接收屏蔽寄
存器,从总线上接收 CAN 帧,然后依次将收到的 CAN 帧标识符与 6 对接收滤波和屏蔽寄存器进行匹配,符合
某对接收滤波和屏蔽寄存器要求了,就停止匹配,将数据接收到对应的缓冲区中.。
例如:设置某接收滤波寄存器 00000000001(11 位),接收屏蔽寄存器 11111111101(11 位),则该对
组合会拒绝接收 00000000011 和 00000000001 之外所有的标识符对应的 CAN 帧,因为屏蔽器规定第二位
(为 0)以外的所有标识符位要严格匹配(与滤波器值一致),第二位的滤波器值和收到的 CAN 标识符第
二位值是否一致都可以。
以PIC18F45K80单片机为例:
①、CAN发送
/扩展帧模式发送ID设置如下/
TXB0CON=0X03; //发送优先级为最高优先级,TXPRI=11
//ID设置如下【这里设置29位扩展标识符ID为 : 1fffffff】
TXB0SIDH=0XFF;
TXB0SIDL=0XEB; //配置扩展帧模式EXIDE=1, EID17=1,EID16=1
TXB0EIDH=0XFF; //EID8-EID15
TXB0EIDL=0XFF; //EID0-EID7
/-------------------------------------------------------------------------
can发送数据长度设置,发送缓冲器初始化
-------------------------------------------------------------------------/
//设置数据长度为8个字节
TXB0DLC=0X08;
//初始化发送缓冲器
TXB0D0=0x00;
TXB0D1=0x00;
TXB0D2=0x00;
TXB0D3=0x00;
TXB0D4=0x00;
TXB0D5=0x00;
TXB0D6=0x00;
TXB0D7=0x00;
②、CAN接收
RXB0CON=0X40; //仅仅接收标准标识符的有效信息,FILHIT0=0表示RXB0采用filter0
RXB0DLC=0X08; //设置接收缓冲器0的数据区长度
RXB0D0=0X00; //初始化接收缓冲器0的数据区数据
RXB0D1=0X00;
RXB0D2=0X00;
RXB0D3=0X00;
RXB0D4=0X00;
RXB0D5=0X00;
RXB0D6=0X00;
RXB0D7=0X00;
//初始化接收滤波器0和接收屏蔽,(扩展帧配置)
RXF0SIDH=0XFF;
RXF0SIDL=0XEB; /*(EXIDEN = 1,使能扩展帧)*/
RXF0EIDH=0XFF;
RXF0EIDL=0XFF;
//扩展表示符屏蔽寄存器设置
RXM0SIDH=0X00; /*无屏蔽*/ //标准标识符屏蔽位或扩展标识符屏蔽位 (EID<28:21>)
RXM0SIDL=0X00; //SID<2:0>:标准标识符屏蔽位或扩展标识符屏蔽位 (EID<20:18>)
RXM0EIDH=0xff;
RXM0EIDL=0X00;
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』