打印
[Kinetis]

KE06CAN 通讯

[复制链接]
1271|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sltian09|  楼主 | 2015-7-6 22:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
楼主以及大神,关于CAN通讯,我已经调试了很多了篇了,有地方还是没有完全明白,咨询一下:
#define CAN_IDAR0                        NODE_ID2<<1   // <<1 is for RTR IDAR0-3  0X802
#define CAN_IDAR1                        NODE_ID3<<1   //IDAR4-7   0X803  
#define CAN_IDMR0                        0x1|(uint32_t)0x18<<16 /* received all standard and extend frame from ID(NODE_ID2) */
#define CAN_IDMR1                        0x1|(uint32_t)0x18<<16 //0x1|((uint32_t)0x18<<16) = 0x180001,the last 1 is for RTR no filter

IDAR0-3 IDAR4-7 是表示接受寄存器吧,都是AC7-AC0,那么那么左移表示什么呢?
在标准帧里标识符映射的IDR0-3,左移移位RTR为1(隐形),IDE就为0。
那么为什么是IDAR0-3 IDAR4-7左移移位呢,
同理下面的两句也比较疑惑,请版主指点一下,谢谢了哦!!

相关帖子

沙发
FSL_TICS_ZJJ| | 2015-7-7 10:18 | 只看该作者
楼主你好!
关于你这个问题,我之前有写过经验分享,你可以去参考我的文档:
KE06 MSCAN标识符接收滤波器配置讲解

使用特权

评论回复
板凳
sltian09|  楼主 | 2015-7-7 11:58 | 只看该作者
版主您好!很高兴看到您的分享**,令我受益匪浅!!但我还是这里不明白:
文中说“每次接收到的 ID,放在 IDR 寄存器中, 该寄存器的值首先要先和 IDMR 比较,查看
哪些位是需要比较,哪些位不需要比较。 IDMR 位为 1, 不需要比较; 0 则需要和
对应的 IDAR 位比较,即必须和 IDAR 位相同的 IDR 寄存器值对应的 ID 才能被接
收,否则被抛弃”
那么 NODE_ID2<<1 变为0x0000 1004了 既然是这样那么怎么还能接受0x802这个标识符呢?
而您说的“而 IDAR 寄存器组合起来的扩展 ID, 就是规定的 0X802 值。” 是什么意思呢?

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2015-7-7 14:11 | 只看该作者
sltian09 发表于 2015-7-7 11:58
版主您好!很高兴看到您的分享**,令我受益匪浅!!但我还是这里不明白:
文中说“每次接收到的 ID,放在 ...

楼主没有仔细看**中第5页,表格都列出来了,就是802为什么会被接收的情况。

使用特权

评论回复
5
sltian09|  楼主 | 2015-7-7 14:32 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-7 14:11
楼主没有仔细看**中第5页,表格都列出来了,就是802为什么会被接收的情况。 ...

版主您好,小弟愚钝,第五页我看了。
CAN_IDAR0 : 0x802 <<1;
// 这句话,小弟愣是不明白。

使用特权

评论回复
6
quray1985| | 2015-7-7 14:40 | 只看该作者
sltian09 发表于 2015-7-7 14:32
版主您好,小弟愚钝,第五页我看了。
CAN_IDAR0 : 0x802

原代码就是这样吗,怎么感觉应该是“=”呢

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2015-7-7 14:42 | 只看该作者
sltian09 发表于 2015-7-7 14:32
版主您好,小弟愚钝,第五页我看了。
CAN_IDAR0 : 0x802

代码中是等于,我这边是写文档,只是一个栏目,意思是一样的。
写**不是写代码哦。
你对着我下面的表格一位一位的看,就很清楚,哪些是屏蔽的,为什么只能接0X802,803

使用特权

评论回复
8
sltian09|  楼主 | 2015-7-7 15:08 | 只看该作者
版主,我的理解,请看下面                                               
IDAR0-IDAR3:00000000 00000000 00010000  00000100
IDMR0-INMR3 :00000000 00011000 00000000  00000001
意思是把屏蔽码的为1的位忽略掉,然后变成如下接受0x802:
IDAR0-IDAR3:00000000 000  000 00010000  0000010
那么从新整理得到:0 0000 0000 0000 0000 1000 0000 0010
这就是左移一位和屏蔽后的真正匹通过的ID号?

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2015-7-7 15:12 | 只看该作者
sltian09 发表于 2015-7-7 15:08
版主,我的理解,请看下面                                               
IDAR0-IDAR3:00000000 0000000 ...

对的,左移一位,是接收到的数据放在REIDR0-3中,而REIDR3的bit0是RERTR,不是数据,所以你要把你的可接收值左移一位再做比较。

使用特权

评论回复
10
sltian09|  楼主 | 2015-7-7 15:20 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-7-7 15:12
对的,左移一位,是接收到的数据放在REIDR0-3中,而REIDR3的bit0是RERTR,不是数据,所以你要把你的可接 ...

多谢楼主,爱死你了:lol:lol
话说回来,咨询了几次FAE一点不给力,问了几个问题他说他自己也不知道!!!我也是醉了!!
相信自己相信楼主,才有出路!!
对了楼主,能否把IAR IDE 也分享一下~

使用特权

评论回复
11
FSL_TICS_ZJJ| | 2015-7-7 16:04 | 只看该作者
sltian09 发表于 2015-7-7 15:20
多谢楼主,爱死你了
话说回来,咨询了几次FAE一点不给力,问了几个问题他说他自己也不知道!!! ...

下次有问题,可以直接在论坛发帖哦。
你要IAR的软件吗?
这个要到IAR官网下载:
https://www.iar.com/iar-embedded-workbench/arm/

使用特权

评论回复
12
sltian09|  楼主 | 2015-7-7 16:05 | 只看该作者
我都是在论坛里面发帖的。
**版的呀,这个一个月就问题来了~~

使用特权

评论回复
13
FSL_TICS_ZJJ| | 2015-7-8 17:09 | 只看该作者
sltian09 发表于 2015-7-7 16:05
我都是在论坛里面发帖的。
**版的呀,这个一个月就问题来了~~

我们是官方支持,所以推荐只推荐官方正版哦。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

70

帖子

3

粉丝