Board logo

标题: CAN接受怎么接4茨才收到【请教strongchen大哥】 [打印本页]

作者: lanncyxjj    时间: 2007-7-9 10:52     标题: CAN接受怎么接4茨才收到【请教strongchen大哥】

用的是dp256的MCU,和上位机通信时候出现一直没在意一个问题:上位机发送一个帧都要发送5次,下位机才能收到。观察了前四次都收的是乱帧,会不会是和CAN的接受里面的前后台结构有关系呢?它有三个后台缓存,只有一个前台缓存是用来发送的,帧到前台的判断条件是不是接受满的标志位RXF清零??我用的CAN底层就是P&E生成的,RXF清零是在接收中断最后清的,
恳请strongchen大哥指点一下,项目要提交前发现这个问题的,急啊!
作者: strongchen    时间: 2007-7-9 11:03

RXF标志置1表示接收到新的message。此时用户可以去读新的message,并应将RXF清零。否则无法再接收新的message。
作者: lanncyxjj    时间: 2007-7-9 13:08

RXF标志置1是硬件自动完成的吧??给RXF写入1是对它清零,是这个意思吗?

作者: strongchen    时间: 2007-7-9 17:16

对。
作者: lanncyxjj    时间: 2007-7-10 08:50

用单帧调试工具看,发送四次才能正确接收到数据,又是怎么回事呢?
作者: strongchen    时间: 2007-7-10 10:45

你有没有看过信号波形,是否正确?
作者: lanncyxjj    时间: 2007-7-11 10:24

前4帧的波形就是不正确 是乱的
作者: strongchen    时间: 2007-7-11 10:42

发出的波形就是乱的?那当然无法接收。
作者: lanncyxjj    时间: 2007-7-11 11:08

我想会不会是CAN的3级后台缓存里本身的数据被我接受到了,而且中断接受之前要清除缓存里面的所有内容??
作者: lanncyxjj    时间: 2007-7-11 17:04

CAN的标志符验收过滤器怎么用啊??

还是要接受4次才能正确收到 怎么回事呢??
作者: lanncyxjj    时间: 2007-7-13 13:21

问题还没有解决 我的中断接受程序是这样的 还请strongchen大哥帮忙看看
interrupt void CAN1_InterruptRx(void)
{
if (SerFlag & FULL_RX_BUF) { /* Is any char already present in the receive buffer? */
SerFlag |= CAN1RFLG_OVRIF_MASK; /* If yes then set internal flag OVERRUN */
}

SerFlag |= FULL_RX_BUF; /* Set flag "full RX buffer" */
ErrFlag |= SerFlag; /* Add new error flags into the ErrorFlag status variable */

CAN1RFLG = CAN1RFLG_RXF_MASK; /* Reset the reception complete and release the RX buffer */
}
作者: strongchen    时间: 2007-7-13 14:32

你应该在收、发两部分同时进行调试。发的部分一个message一个message地发,每发一个message,看看接收部分能否进中断。
作者: lanncyxjj    时间: 2007-7-16 12:55

AN2283里面详细介绍了中断接受的过程 第二步提到硬件标志符接受过滤,当接受的消息帧ID和硬件过滤器(包括接受和屏蔽寄存器)相匹配,且RXF=0时,就会从RxBG变成RxFG^^^^^

这里的硬件过滤是什么意思 我程序中好像没有完成过滤嘛 要不怎么会是乱数据都去读呢 不该变成前台的数据的
作者: lanncyxjj    时间: 2007-7-16 17:36

我理解的中断接收过程是:
先进入中断接受,通过了所谓的硬件过滤了,从后台复制到前台,然后CPU会去读寄存器(就是执行读函数),并且将数据存放在RAM上,这个都能解释,也很好懂。但是,中断里面有个清楚RXF标志的操作,表明已经读取完毕了,要清空缓存,让新的数据进来。那这样不就是和先进入中断接受函数,再在执行读的操作矛盾了么,中断的最后是清楚标志,而我的理解是中断以后才去读数据,说明书上写得很清楚是RXF清零以后不能再读,防止数据不完整……
还在困惑中…………




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