发 帖  
原厂入驻New
[讨论]

有关MC9S12SX128 (112硬件)芯片CAN总线滤波器设置的疑问

2017-1-14 16:59:38  4752 CAN总线 滤波器
分享
我想要使用CAN总线滤波器来筛选自己需要的ID,但是我按照手册上设置的时候却不能正常运行。
下面是我的初始化代码
/*                        初始化CAN0                         */
void INIT_CAN0(void)
{
  IF(CAN0CTL0_INITRQ==0)      // 查询是否进入初始化状态   
    CAN0CTL0_INITRQ =1;        // 进入初始化状态
  while (CAN0CTL1_INITAK==0);  //等待进入初始化状态
  CAN0BTR0_SJW = 0;            //设置同步
  CAN0BTR0_BRP = 7;            //设置波特率
  #if(CAN_BOUND_RATE == 500)
    CAN0BTR1 = 0x14;       //设置时段1和时段2的Tq个数 ,总线频率为500kb/s
  #else if(CAN_BOUND_RATE == 250)
    CAN0BTR1 = 0x1c;       //设置时段1和时段2的Tq个数 ,总线频率为250kb/s
  #endif
  CAN0IDAC_IDAM1 = 0;   //bit4= 0和bit5= 1,Four 16-bit acceptance filters
  CAN0IDAC_IDAM0 = 1;     //在这里我已经设置为4个十六位的滤波器,正常情况下应该能过通过四个ID的报文
                                         //但是只能通过实际只能通过第一和第三个滤波器的两帧,我明明是按照手册设置的,很                                         //奇怪,然后我又将它设置为两个32位的滤波器,还是只能通过两个(通过的是标准帧),
                                       //当我写成扩展帧的时候却一个都通过不了,崩溃
  //开启全部滤波器
  CAN0IDMR0 = 0x00;
  CAN0IDMR1 = 0x00;

  CAN0IDMR2 = 0x00;
  CAN0IDMR3 = 0x00;

  CAN0IDMR4 = 0x00;
  CAN0IDMR5 = 0x00;

  CAN0IDMR6 = 0x00;
  CAN0IDMR7 = 0x00;

  //对相应ID进行滤波

  CAN0IDAR0 = 0x80;
  CAN0IDAR1 = 0x60;

  CAN0IDAR2 = 0x8D;
  CAN0IDAR3 = 0x20;

  CAN0IDAR4 = 0x82;
  CAN0IDAR5 = 0x20;

  CAN0IDAR6 = 0x82;
  CAN0IDAR7 = 0x00;


  CAN0CTL1 = 0xC0;             //使能MSCAN模块,设置为一般运行模式、使用总线时钟

  CAN0CTL0 = 0x00;             //返回一般模式运行

  while(CAN0CTL1_INITAK);      //等待回到一般运行模式

  while(CAN0CTL0_SYNCH==0);    //等待总线时钟同步

  CAN0RIER_RXFIE = 1;          //使能接收中断
}

1
2017-1-14 16:59:38   评论 分享淘帖

相关讨论

5 个讨论
希望大神们可以指导一下~~~
2017-1-14 17:00:12 评论

举报

用codewarrior调试了吗,单步调试,看各个寄存器的状态
2017-2-14 17:40:47 评论

举报

你是用板子调吗,下个手册上的例子程序,看是不是硬件原因
2017-2-14 17:42:11 评论

举报

小伙子多看看数据手册吧,一个个对寄存器
2017-2-23 17:09:48 评论

举报

寄存器设置不对吧
2017-6-10 15:24:26 评论

举报

只有小组成员才能发言,加入小组>>

848个成员聚集在这个小组

加入小组

创建小组步骤

快速回复 返回顶部 返回列表