Board logo

标题: 大家有没有遇到这样的问题!(CAN) [打印本页]

作者: brucesj    时间: 2005-9-12 19:47     标题: 大家有没有遇到这样的问题!(CAN)

我用dp256 can口发送数据,运行完CAN2TFLG=CAN2TBSEL以后,发送标志清零,可是发送标志不会自动回到1,但是另一个can口能接受到发送的数据。所以第一次CANTFLG=0X07,第二次CANTFLG=0X06,第三次CANTFLG=0X04,最后CANTFLG=0X00以后我就不能再发送了。这是什么原因呢,让我的CANTFLG不能自动置位呢??
奇怪的事情又发生了,晚上一点也没有更改的程序又可以正常运行了,问题出在哪里呢?请指教!
作者: brucesj    时间: 2005-9-13 22:52

没有人知道么?
作者: S12Xdp512    时间: 2005-9-14 09:59

#include /* common defines and macros */ #include /* derivative information */ #pragma LINK_INFO DERIVATIVE "mc9s12dp256b" void MSCAN3Trans(unsigned char *ID, unsigned char * msgout) { CAN3TXIDR0 = *ID; /* 设置ID寄存器,数组ID是用户设置*/ CAN3TXIDR1 = *(ID+1); CAN3TXIDR2 = *(ID+2); CAN3TXIDR3 = *(ID+3); CAN3TXDSR0 = *msgout; /* 设置数据寄存器,数组msgout是用户设置*/ CAN3TXDSR1 = *(msgout+1); CAN3TXDSR2 = *(msgout+2); CAN3TXDSR3 = *(msgout+3); CAN3TXDSR4 = *(msgout+4); CAN3TXDSR5 = *(msgout+5); CAN3TXDSR6 = *(msgout+6); CAN3TXDSR7 = *(msgout+7); CAN3TXDLR = 8; /*设置数据长度*/ CAN3TXTBPR = 0; /*设置发送缓存优先级*/ CAN3TFLG_TXE0=1; /*清除TxE位,发送CAN消息*/ } void main(void) { /* put your own code here */ /*变量定义*/ unsigned char ID[3]; unsigned char msgout[7]; unsigned int i; /*CAN初始化*/ CAN3CTL0_INITRQ=1; /* 请求进入初始化工作模式 */ while(!CAN3CTL1_INITAK){} /* 等待进入初始化模式 */ CAN3CTL1 = 0x80; /*CAN使能且CAN0CTL1_LISTEN=0*/ CAN3BTR0 = 0xc0; /* 设置SJW=2, 预分频为16*/ CAN3BTR1 = 0xbb; /* 设置波特率为500kbps */ CAN3IDMR0 = 0xFF; /*设置滤波器,全部设为1表示没有滤波*/ CAN3IDMR1 = 0xFF; CAN3IDMR2 = 0xFF; CAN3IDMR3 = 0xFF; CAN3IDMR4 = 0xFF; CAN3IDMR5 = 0xFF; CAN3IDMR6 = 0xFF; CAN3IDMR7 = 0xFF; CAN3CTL0_INITRQ=0; /* 请求进入正常工作模式 */ while(CAN3CTL1_INITAK) /* 等待退出初始化模式 */ CAN3RIER = 0x01; /* 接受中断使能 */ MSCAN3Trans(ID,msgout); EnableInterrupts; for(;;) { for(i=0;i<65535;i++){ } MSCAN3Trans(ID,msgout); } /* wait forever */ }
作者: yunfeng    时间: 2005-9-14 10:04

发送时,应该先判断缓冲区是否为空,然后选择空的缓冲区,装载数据,启动发送请求
作者: wang_r00    时间: 2005-9-14 15:58

请问:
BTR0 BTR1如何设置,有对应的表吗 比如: 外部多大频率晶振,can波特率多少,对应BTR0 BTR1 寄存器值为多少. 谢谢
作者: brucesj    时间: 2005-9-16 15:21

再执行完CAN3TFLG_TXE0=1;CAN3TFLG一直保持为0,郁闷,怎么回事?
另外,这个有点问题吧:
CAN3BTR0 = 0xc0; /* 设置SJW=2, 预分频为16*/
CAN3BTR1 = 0xbb; /* 设置波特率为500kbps */

[em13]

[此贴子已经被作者于2005-9-16 15:21:03编辑过]






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