Board logo

标题: CAN初始化到while(CAN0CTL1_INITAK!=0)过不去[求助] [打印本页]

作者: sina    时间: 2006-12-1 15:18     标题: CAN初始化到while(CAN0CTL1_INITAK!=0)过不去[求助]

我用的是9S08DZ60的片子,为什么CAN初始化到while(CAN0CTL1_INITAK!=0)过不去呢?


我观察CAN0CTL0为0时,CAN0CTL1_INITAK位还是1,不知道为什么?下面是我的程序:


 CAN0CTL0_INITRQ  = 1;    //初始化模式
 while(CAN0CTL1_INITAK!=1) ; //等待进入初始化模式
 
 CAN0CTL1_CANE = 1;
 CAN0CTL0_INITRQ  = 0;
 CAN0CTL1_CLKSRC = 0; /* 选择晶振频率 */
 //CAN0CTL1_LOOPB = 1;
 CAN0CTL1_LISTEN = 0; 
  CAN0BTR0  = 0XC7;
  CAN0BTR1  = 0X3A;
 
 CAN0IDAC  = 0; /* two 32bit acceptance filter*/
   CAN0IDMR0 = 0xFF;
 CAN0IDMR1 = 0xFF;
  CAN0IDMR2 = 0xFF;
  CAN0IDMR3 = 0xFF;
 
 CAN0IDMR4 = 0xFF;
  CAN0IDMR5 = 0xFF;
  CAN0IDMR6 = 0xFF;
  CAN0IDMR7 = 0xFF;


  CAN0CTL0_INITRQ  = 0;      //退出初始化模式
 while(CAN0CTL1_INITAK!=0);  //这里过不去
 CAN0RIER_RXFIE = 1; /* 接收中断使能,禁止发送中断 */
 CAN0TIER = 0;   


作者: yunfeng    时间: 2006-12-1 16:35

http://bbs.eccn.com/dispbbs.asp?boardID=3&RootID=113744&ID=113744

作者: sina    时间: 2006-12-1 16:56

用了你的程序 问题还未解决,就是CAN0CTL0_INITRQ 位变为0时,CAN0CTL1_INITAK为什么不跟着变0,我用的是9S08DZ60的样片,难道样片有问题
作者: strongchen    时间: 2006-12-1 17:14

When INITRQ is cleared by the CPU, the MSCAN restarts and then tries to synchronize to the CAN bus. If the MSCAN is not in bus-off state, it synchronizes after 11 consecutive recessive bits on the CAN bus; if the MSCAN
is in bus-off state, it continues to wait for 128 occurrences of 11 consecutive recessive bits.
作者: sina    时间: 2006-12-4 15:08

对strongchen的回答表示感谢,我明白你的意思
清INITRQ位表示告诉CPU退出初始化模式,当INITAK为0时表示已退出初始化模式;
我这里INITAK一直为1表示初始化未完成
按照你的说法怎么去解决?????
作者: yunfeng    时间: 2006-12-4 17:44

有一个帖子里已经有参考程序了
作者: sina    时间: 2006-12-11 10:50

我的问题已解决啦,o(∩_∩)o...哈哈!
设CAN0CTL1_CLKSRC=1,就行了,不过还不知道为什么不能用晶振频率/




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0