Freescle MSCAN滤波器配置方法VBA基础入门实现

最近在研究S12XEP100  MSCAN部分,这里结合codewarrior的PE配置工具,针对MSCAN滤波器进行理解和记录。


        PE中滤波器配置项如下图:

        Freescle MSCAN滤波器配置方法VBA基础入门实现

 

Freescle MSCAN滤波器配置方法VBA基础入门实现

①acceptance mode部分:

可选择为两个32-bit 或 四个16-bit 或 八个8-bit接收滤波器 或 滤波器关闭 四种模式,

1)两个标识符滤波器,每个应用于:

扩展标识符的全部29位和CAN2.0B帧的以下位:远程发送请求(RTR),标识符扩展(IDE),替代远程请求(SRR).

                或标准标识符的11位,加上CAN2.0A/B报文的RTR和IDE位。

2)4个标识符接收滤波器,每个应用于:

         扩展标识符的14个最重要位,加上CAN2.0报文的SRR和IDE位。

或标准标识符额11位,加上CAN2.0A/B报文的RTR和IDE位。

3)8个标识符接收滤波器,每个应用于标识符的前8位。

4)关闭滤波器

对应寄存器为MSCAN Identifier Acceptance Control Register (CANIDAC),寄存器结构如下图:

   Freescle MSCAN滤波器配置方法VBA基础入门实现

IDAM1:0  即为ID接收滤波模式配置项,两位能配置上述四种模式,定义了标准(11:0)或扩展ID(28:0)的通过模式,其任何一位都能使用CANIDMR标记为"don’t care"。

IDHIT2:0 标识符接收有效标志。

②acceptance code部分:

        分为code1和code2,对应了两组AC寄存器(first bank,second bank),每组包含了MSCAN Identifier Acceptance Registers (CANIDAR0-7),对于扩展帧四个寄存器全有效,对于标准帧仅前两个寄存器有效 (CANIDAR0/1, CANIDMR0/1)。ID的每一位需要匹配AC中的值才允许通过。

Freescle MSCAN滤波器配置方法VBA基础入门实现


③acceptance mask部分:

分为mask1和mask2,对应了两组AM寄存器(first bank,second bank),每组包含了MSCAN Identifier Mask Registers (CANIDMR0–CANIDMR7)。

        例:接收标准帧ID,在32位滤波器模式下,需要将CANIDMR1 和 CANIDMR5 中的AM[2:0]设置为“don’t care”.

                                        在16位滤波器模式下,需要将CANIDMR1、CANIDMR3、CANIDMR5 和 CANIDMR7 中的AM[2:0]设置为“don’t care”.

        AM为0,ID中的该位必须与AC中的一致。AM为1,ID中的该位可任意值通过,不需要匹配AC中的值。

Freescle MSCAN滤波器配置方法VBA基础入门实现



AC和AM填写方式要按照以下格式:

扩展帧:

Freescle MSCAN滤波器配置方法VBA基础入门实现

标准帧:

Freescle MSCAN滤波器配置方法VBA基础入门实现



举个例子:

若需要滤波接收三帧扩展帧报文:

首先分解三个ID至每一位,然后分别计算每列3位的按位AND值,以及XOR值(XOR出1就返回1并break)。

AC1四个字节从左到右的计算公式分别为:

AND结果中的:[ data28&data27&...&date21 ],[ data20&data19&data18&SRR(1)&IDE(1)&data17&data16&data15 ] ],[ data14&data13&...&date7 ],[ data6&data5&...&date1&RTR(0) ]

AC2填写默认值0;

AM1四个字节从左到右的计算公式分别为:

XOR结果中的:[ data28&data27&...&date21 ],[ data20&data19&data18&SRR(1)&IDE(1)&data17&data16&data15 ] ],[ data14&data13&...&date7 ],[ data6&data5&...&date1&RTR(0) ]

AM2填写默认值FF;


Freescle MSCAN滤波器配置方法VBA基础入门实现


同理,若要滤波标准帧报文,需要使用标准帧格式ID10~ID0 RTR IDE.

本文所述的配置值计算使用VBA实现,源代码见:https://github.com/SolaZhao/vba.git

该VBA也可用于VBA自学基础入门。