Board logo

标题: 请教大家一个CAN驱动方面的问题,谢谢!! [打印本页]

作者: tiaodekeyi    时间: 2006-12-31 15:35     标题: 请教大家一个CAN驱动方面的问题,谢谢!!

我的芯片MC9S12DG128,首先把我的CAN发送驱动提供给大家,是调通了的
但存在这样一个问题,当连续发多条消息时,中间必须加延时,否则只能发出一条消息
想请问大家这是什么原因?谢谢!!
unsigned char CAN0SendFrame(unsigned long id, unsigned char priority, unsigned char length, unsigned char *txdata ){

unsigned char index;
unsigned char txbuffer = {0};

if (!CAN0TFLG) /* Is Transmit Buffer full?? */
return ERR_BUFFER_FULL;

CAN0TBSEL = CAN0TFLG; /* Select lowest empty buffer */
txbuffer = CAN0TBSEL; /* Backup selected buffer */
/* Load Id to IDR Registers */
*((unsigned long *) ((unsigned long)(&CAN0TXIDR0)))= id;


for (index=0;index *(&CAN0TXDSR0 + index) = txdata[index]; /* Load data to Tx buffer
* Data Segment Registers
*/
}

CAN0TXDLR = length; /* Set Data Length Code */
CAN0TXTBPR = priority; /* Set Priority */

CAN0TFLG = txbuffer; /* Start transmission */

while ( (CAN0TFLG & txbuffer) != txbuffer); /* Wait for Transmission
* completion
*/
return NO_ERR;
}
作者: zk2002forever    时间: 2007-1-5 20:31

tiaodekeyi你好:
我不知道你问题的原因,但我在手册上看到这样一句,不知道是不是这个原因.
Problems can arise if the sending of a message is finished while the CPU re-loads the second buffer. No buffer would then be ready for transmission, and the CAN bus would be released.
我还有问题想请教一下你,CAN初始化中位定时制寄存器CANBTR0中同步跳转宽度位SJW[1:0]是什么意思,应该设为多少?还有CANBTR1中TSEG2[2:0]与TSEG1[3:0]位又有什么用,由什么确定它们的值,一般设为多少?在CAN初始化编程中这几块不懂,希望你能帮忙解释一下。谢谢!
作者: tiaodekeyi    时间: 2007-1-10 11:04

我是这样配置的,具体含义,我也不太清除,下面是我对应的通信速率和寄存器对应的表格

10K BTRO:BF BTR1:FF
20K BTRO:31 BTR1:1C
50K BTRO:18 BTR1:1C
125K BTRO:09 BTR1:1C
500K BTRO:01 BTR1:1C
800K BTRO:00 BTR1:1C
希望对你有帮助!!!




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