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

[求助] 版主 strongchen 请进!!!

我这几天实在太忙,没有及时来看这里的帖子,回答迟了,请见谅!

我大致看了一下你附的程序,由于无法调试,只能先和你讨论一下。

你这是CAN0发送的中断服务程序吗?如果是发送中断产生后进入你这个中断服务程序,会不会有这个问题:当3个缓冲区都空时,你将BUFFER0置数,然后发送;等发送中断产生后,你再去读CAN0TFLG,这时因为BUFFER0中的数据已发送,自然还是3个缓冲区都空,这是又还是用BUFFER0发送。如此循环,永远都只能用BUFFER0一个缓冲区。

你认为呢?
海纳百川  有容乃大
我认为你在中断服务程序中将总中断打开是有问题的。
海纳百川  有容乃大
我仔细看了一下你现在的程序。你现在应该是在3个缓冲区都空时才重新装载3个缓冲区的数据,然后将其级别分别设置为0、1、2,然后开中断,是吧?
现在的现象,3个缓冲区应该可以按顺序发送吧。如果在这个程序的基础上,按你自己的思路编程,程序是怎样的,现象又怎样?
我的建议,至少在开CAN发送中断之前,先将总中断关掉,然后再开CAN发送中断。当退出中断服务程序时,CPU会自动将总中断打开。
海纳百川  有容乃大
我想这可能是因为你对3个缓冲区的操作顺序导致的。你可以试试将3个缓冲区的操作顺序倒过来,再看看结果如何?
海纳百川  有容乃大
问题是在你的程序中,将某个缓冲区置数后马上就将其发送请求标志置1了,这时CAN模块自然会将这个缓冲区立即发送出去,因为这时只有这个缓冲区在等待发送!这样,优先级的设置也就没什么作用了。
海纳百川  有容乃大
能把你现在的程序(最好是整个project)发给我看看吗?
海纳百川  有容乃大
返回列表