查看: 1768|回复: 3

[求助] CAN收发中断问题

[复制链接]

该用户从未签到

7

主题

53

帖子

0

中级会员

Rank: 3Rank: 3

积分
232
最后登录
2016-6-28
发表于 2016-4-5 16:07:44 | 显示全部楼层 |阅读模式
本帖最后由 reignheart 于 2016-4-8 13:37 编辑

大家好,我先简单的陈述下我在用K60写CAN收发的时候遇见的问题:
       1、邮箱和FIFO是什么关系呢?什么时候用FIFO,什么时候用邮箱,为什么设计两种呢?
       2、我用MB0作为发送,MB1作为接收。特地关闭了MB0相应的IMASK位,不让它发送完进中断。接受代码和发送代码分开测试都没有问题,但是在一起测试的时候,我发送一帧,K60自己也会接收到他发送的这帧。这个现象正常吗?(我的掩码寄存器都是0,但是K60会接受自己发送的帧是么?)
       3、我在中断函数里面写了一些判断,如果是自己想要的ID号的帧,就读出来,如果不是,直接给邮箱解锁,不读了。但是,解锁的时候,选择给CS字段写空代码,现象是正常的。但是直接读自由运行寄存器解锁并不正常,下一帧到来的时候,并不能接收。也就是说解锁没成功。这一点让我很困惑。(因为如果是我想要的ID帧,我做的就是读出响应寄存器的值,然后读自由运行寄存器的值进行解锁,这个全部可以正常运行,而非我想要的ID时,我只是没有读出寄存器的值而已,为什么解锁不能成功呢,不能接受下一帧的值呢???)
期待大神的解答,十分感谢!!!
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

57

主题

531

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1356
最后登录
2016-12-5
发表于 2016-4-5 16:47:19 | 显示全部楼层
帮顶
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2016-4-6 16:15:48 | 显示全部楼层
楼主你好!
1.其实你会发现,FIFO就是邮箱的一部分,使用FIFO速度会更快一些。
2.如果你MB0发送到CAN总线上,而MB1作为接受,肯定是会判断一下总线上接收到的数据的。而你又配置掩码为0,注意0是都接收,1才是有掩码
3.你说的自由运行寄存器是哪个寄存器,请给出寄存器名称。
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

53

帖子

0

中级会员

Rank: 3Rank: 3

积分
232
最后登录
2016-6-28
 楼主| 发表于 2016-4-8 13:36:57 | 显示全部楼层

RE: CAN收发中断问题

小恩GG 发表于 2016-4-6 16:15
楼主你好!
1.其实你会发现,FIFO就是邮箱的一部分,使用FIFO速度会更快一些。
2.如果你MB0发送到CAN总线上 ...

版主您好~~,感谢您的回答。
关于第三点,我后来调试通过了,读的是CAN_TIMER寄存器进行全局解锁。
关于第二点:我了解到的是部分单片机除非在回环模式下,否则CAN模块是不会接收自己发送的CAN帧;所以后来和同学讨论了很久。但是看您的意思就是:如果我不配置相应的掩码寄存器,只要CAN线上有数据,无论是谁发的,CAN模块打开了接收中断就会接收的是嘛?
关于第一点,估计还得自己好好琢磨琢磨,因为我用的是邮箱,没有用队列,目前觉得邮箱够用了~~
非常感谢您的回答~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 00:07 , Processed in 0.096333 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表