打印
[技术问答]

关于CAN FILTER配置的提问

[复制链接]
1298|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
lihuasoft| | 2019-11-2 14:10 | 只看该作者
1)  BIT和REG是什么关系:同一联合体内的不同寻址计算方式。

2)  是如何完成16个过滤器的配置的?这只能说是我的猜测了:MCU内部有影子寄存器(是一个数组,通过index和selmask偏移定位)。当CAN处于RESET状态时,索引值写入ACFCTRL并向ACF赋值后,将立即被影子寄存器接收。CAN_Init里面循环16次调用过滤器设置函数,就是在做这个工作。CAN运行后,真正起作用的是过滤器的影子寄存器(也取决于ACF_EN位)。再说一遍,目前没看到这方面资料,这只是我的猜测,说错了不要鄙视。

使用特权

评论回复
板凳
戊戌变法|  楼主 | 2019-11-4 08:53 | 只看该作者
lihuasoft 发表于 2019-11-2 14:10
1)  BIT和REG是什么关系:同一联合体内的不同寻址计算方式。

2)  是如何完成16个过滤器的配置的?这只能说 ...

感谢提供一个思考的方向  等待官方说出真相

使用特权

评论回复
地板
JasonLee27| | 2019-11-4 16:26 | 只看该作者
戊戌变法 发表于 2019-11-4 08:53
感谢提供一个思考的方向  等待官方说出真相

和2楼说的差不多,具体芯片内部的工作不是很清除,虽然16个过滤器设置的是同一个地址,但寄存器是不同的,至于指向哪个寄存器就是通过ACFADR和SELMASK来确定,这种方式在一些其他芯片中应该也是可以找到类似的用法,配置流程的话可以参考驱动包,只是应用的话可以参考应用例程里的can例程,我们有提供一个过滤的数组。你可以按自己的需要填写。但有个前提,因为CAN接收必须要通过过滤通道,所以至少要打开一个通道。https://bbs.21ic.com/icview-2838058-1-2.html,可以参考里面的can_basic代码

使用特权

评论回复
5
戊戌变法|  楼主 | 2019-11-5 09:43 | 只看该作者
不要沉 有没有 官方大佬解释一下

使用特权

评论回复
6
TechHolder| | 2019-11-5 11:32 | 只看该作者
戊戌变法 发表于 2019-11-5 09:43
不要沉 有没有 官方大佬解释一下

第一个问题:BIT和REG都是联合体下面的成员变量,起始地址相同。REG定义了每个寄存器,BIT定义的每个寄存器中的功能位。所以,如果直接操作寄存器中的某个功能位就使用CANx>BIT.xx,如果是操作整个寄存器就使用CANx->REG.xx。
第二个问题:写寄存器ACFCTRL选择写CODE还是写MASK,如果ACFCTRL中的SELMASK为0就是写CODE,为1则写MASK,ACFADR则是指明写16个CODE或MASK寄存器的索引。写的CODE或MASK是同一个寄存器,硬件上自动根据前面的配置进行内部配置。对于我们来说,明白去如何配置Code或Mask即可。

使用特权

评论回复
7
21ic小喇叭| | 2019-11-5 11:32 | 只看该作者
支持一下,希望有大神给予解答

使用特权

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

本版积分规则

27

主题

94

帖子

1

粉丝