飞思卡尔MC9S12X128 CAN滤波器设置讲解

本文详细介绍了如何配置一个具有多种滤波选项的芯片,包括8/16/32位滤波器。重点强调了并行设计的特性,滤波器设置方法以及如何通过源代码实现只接收特定ID帧的实例。
摘要由CSDN通过智能技术生成

1.该芯片具有最多8个8位滤波器,可配置为2个32位滤波器 4个16位滤波器 8个8位滤波器。具体通过寄存器CANIDAC配置为不同模式

2.需要注意:

<1>滤波器为并行设计,也就是说任何通过某一滤波器的ID帧都会进入接收缓冲区,如果你想滤波就必须设置所以的滤波器,设置某一滤波器而不设置其他滤波器(全部通过)那么这样的滤波将是失败的

<2>设计滤波的ID需要还原为IDRn寄存器中的内容,因为IDRn寄存器中还包括RTR IDE等多种标志

3.实际演示:仅仅接收ID为0x11的帧

<1>将ID还原为IDR0 IDR1寄存器内容:IDR0 = 0x02 IDR1 = 0x02

<2>设置滤波模式IDAC 设置滤波IDAR IDMR的内容,其中IDMR中的位0代表需要匹配 1代表无需匹配 故IDAR0 = IDR0 IDAR1 = IDR1 IDMR0  = 0x00 IDMR1 = 0x3F

<3>使用CAN分析仪验证 仅有0x11的帧能够使CAN模块产生接收中断

4.源代码

    /*滤波器是并行的 是或的关系 通过滤波的数据都将放入缓冲器中*/
    // 设置滤波器工作模式
    CAN0IDAC_IDAM = 1;  //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 = 0x02;  //高位ID
    CAN0IDAR1 = 0x02;  //低位ID
    CAN0IDMR0 = 0x00;  //高位ID滤波
    CAN0IDMR1 = 0x3F;  //低位ID滤波 注意低5位不匹配 这些位是RTR IDE 和三位保留位
    //以上设置仅仅接收0x11 ID的帧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值