首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]关于MOTO芯片的CAN通讯问题

现在把我编写的一段程序贴出来。CAN12共有三个发送缓冲区,我们通常这样做:先测试哪个为空,为空就用它发,所有的TBPR寄存器都设成一样的。这样就不会有问题,该程序经过测试,能正常使用。如果TBPR设得不一样,会发生一些奇怪的问题,比如会产生一些ERROR FRAME等,这些我们都测试过。



/************************CAN Transmission************************/



void CANTrans(void)
{
unsigned char BufferEmpty=0;

BufferEmpty=CTFLG;
if(BufferEmpty&1)
{
  TB0IDR0=0x61;
  TB0IDR1=0x60;  //ECU1_CC ID.



  TB0DLR=8;   //data length=8.

  TB0DSR0=ADResult[0];
  TB0DSR1=ADResult[1];
  TB0DSR2=ADResult[2];
  TB0DSR3=ADResult[3];
  TB0DSR4=ADResult[4];
  TB0DSR5=ADResult[5];
  TB0DSR6=0;
  TB0DSR7=0;   //confirm data segment.

  TB0TBPR=1;   //confirm data buffer priority.

  CTFLG=0x01;   //buffer0 starts transmission.
}
else if(BufferEmpty&2)
{
  TB1IDR0=0x61;
  TB1IDR1=0x60;  //ECU1_CC ID.



  TB1DLR=8;   //data length=8.

  TB1DSR0=ADResult[0];
  TB1DSR1=ADResult[1];
  TB1DSR2=ADResult[2];
  TB1DSR3=ADResult[3];
  TB1DSR4=ADResult[4];
  TB1DSR5=ADResult[5];
  TB1DSR6=0;
  TB1DSR7=0;   //confirm data segment.

  TB1TBPR=1;   //confirm data buffer priority.

  CTFLG=0x02;   //buffer0 starts transmission.
}
else if(BufferEmpty&4)
{
  TB2IDR0=0x61;
  TB2IDR1=0x60;  //ECU1_CC ID.



  TB2DLR=8;   //data length=8.

  TB2DSR0=ADResult[0];
  TB2DSR1=ADResult[1];
  TB2DSR2=ADResult[2];
  TB2DSR3=ADResult[3];
  TB2DSR4=ADResult[4];
  TB2DSR5=ADResult[5];
  TB2DSR6=0;
  TB2DSR7=0;   //confirm data segment.

  TB2TBPR=1;   //confirm data buffer priority.

  CTFLG=0x04;   //buffer0 starts transmission.
}
}
海纳百川  有容乃大
返回列表