飞思卡尔MC9S12X128 CAN滤波器设置讲解——同时过滤标准帧和拓展帧

        由于拓展帧ID为29位,所以滤波器模式IDAC需设置为32位滤波器,这时我们只有两个滤波器可供使用了,如何同时过滤标准帧和拓展帧呢?

        其实可以使用一组32位滤波器滤除拓展帧,另一组32位滤波器滤除标准帧;这里只需要明白滤波器过滤的并不是ID而是IDR寄存器中的内容即可,对于拓展帧ID存放在IDR0-3寄存器中,对于标准帧ID存放于IDR0-1寄存器中,具体可见芯片寄存器手册,里面还有其他如IDE RTR等标识位 我们常常不需要关注 设置MR寄存器对应位为1不比较即可

        下面代码实现了只允许拓展帧0x0C07XXD0通过 和 标准帧0x3XX通过,大家可以对照分析

// 设置滤波器工作模式
    CAN0IDAC_IDAM = 0;  //0-2个32位滤波器 1-4个16位滤波器 2-8个8位滤波器
    
    // 启用所有滤波器 - 否则数据还是会通过关闭滤波的滤波器
    CAN0IDMR0 = 0x00;
    CAN0IDMR1 = 0x00;
    CAN0IDMR2 = 0x00;
    CAN0IDMR3 = 0x00;
    CAN0IDMR4 = 0x00;
    CAN0IDMR5 = 0x00;
    CAN0IDMR6 = 0x00;
    CAN0IDMR7 = 0x00;
     
    // 设置接收寄存器与掩码寄存器(0为需要匹配) 
    CAN0IDAR0 = 0x60;
    CAN0IDAR1 = 0x3F;
    CAN0IDAR2 = 0xFF;
    CAN0IDAR3 = 0xA0;
    CAN0IDMR0 = 0x00;
    CAN0IDMR1 = 0x19;
    CAN0IDMR2 = 0xFE;
    CAN0IDMR3 = 0x00;
    //以上设置接收0x0C07XXD0的帧
    
    CAN0IDAR4 = 0x60;
    CAN0IDAR5 = 0x00;    
    CAN0IDAR6 = 0x00;
    CAN0IDAR7 = 0x00;
    
    CAN0IDMR4 = 0x1F;
    CAN0IDMR5 = 0xFF;
    CAN0IDMR6 = 0xFF;
    CAN0IDMR7 = 0xFF;
    //以上设置接收0x300-0X400的帧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值