微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 有关MC9S12SX128 (112硬件)芯片CAN总线滤波器设置的疑问

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

时间:10-02 整理:3721RD 点击:
我想要使用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;          //使能接收中断
}

希望大神们可以指导一下~~~

用codewarrior调试了吗,单步调试,看各个寄存器的状态

你是用板子调吗,下个手册上的例子程序,看是不是硬件原因

小伙子多看看数据手册吧,一个个对寄存器

寄存器设置不对吧

上一篇:关于数据移位问题
下一篇:初次体验

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top