EM9170工控主板采用FlexCAN,有关filter的设置,说明如下。
CAN Filter的设置:通过DeviceIoControl的CAN_IOCTL_SET_FILTER命令来设置,输入参数为数据结构:
typedef struct
{
DWORD dwGroup; // 组号,= 0,1,2
DWORD dwType; // = 0:标准帧;= 1:扩展帧
DWORD dwID; // 标准帧:11-bit;扩展帧:29-bit,右对齐
DWORD dwRTR; // = 0:数据帧;= 1:远程帧
DWORD dwMask; // 各位与dwID对应,= 0:该位不检查;= 1:该位须检查
} CAN_FILTER, *PCAN_FILTER;
对以上数据结构中各个参数的定义解释如下:
• DWORD dwGroup:组号,EM9170的CAN接收Buffer共分成3组,可同时接收不同ID组的数据帧。EM9170的多个分组,类似于SJA1000中的双滤波概念,即总线上的数据
帧只要满足任意一组设定的条件,该数据帧将被接收。
• DWORD dwType:设置本组接收数据帧的类型。
• DWORD dwRTR:设置本组接收的是否为远程帧。
• DWORD dwID:用于定义本组接收的数据帧ID的公共部分,即相同部分。
• DWORD dwMask:用于定义需要匹配的bit位,即置1的bit位。dwMask与dwID需要配合使用,举例说明如下:
例:本组为标准帧包括连续的64个ID号,dwID = 2’b01010000000 = 0x280,相应的dwMask = 2’b11111000000 = 0x7C0。这时的dwMask表示可被接收的数据帧的低6位ID可以是任意编码(设置为0的那些位),但其高5位(设置为1的那些位)必须与dwID的高5位的定义匹配,即为2’b01010xxxxxx。在实际应用中,为了便于理解,CAN地址的划分,通常采用低位分配给各个设备,而高位地址作为应用组标志。而每一个应用组的地址数采取2的幂次方,可方便设置dwMask。
全部0条评论
快来发表一下你的评论吧 !