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

请教大家一个CAN驱动方面的问题,谢谢!!

请教大家一个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;
}
hello,大家好
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初始化编程中这几块不懂,希望你能帮忙解释一下。谢谢!
我是这样配置的,具体含义,我也不太清除,下面是我对应的通信速率和寄存器对应的表格

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
希望对你有帮助!!!
hello,大家好
返回列表