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。
成都英創信息技術有限公司 028-8618 0660