关闭

aurix中mutlican的使用

标签: 32位单片机can
252人阅读 评论(0) 收藏 举报
分类:

mutlican的整体架构
这里写图片描述
TC23x中有三个node,连出来就是三对收发,在通过连接内部的Message object,最多128个。每个node可以共享这128个Message object
Message object 的作用:
1、收发帧的存储容器
2、合并nodes之间的网关
从下图可以看到,can中message controller用来交换nodes和objects之间的can帧,存储在message RAM中。
这里写图片描述
首先设置can,最主要的就是时钟控制。
这里写图片描述
其中CAN_CLC寄存器用来产生模块时钟fCLC
CAN_FDR寄存器用来产生fCAN
关于生成fCAN 的分频公式有两种模式:normal divider 和 fractional divider,如下:
这里写图片描述
通过CAN_FDR.DM位来设置。
Can模块的时钟频率默认设置为SPB的频率。
然后通过MCR.CLKSEL值来选择时钟源。
时钟设置完,就是节点设置。
跟节点相关的参数:
通信速率
收发的引脚关联,和port模式
关于CAN的发送,亦可以由事件触发发送。
这里写图片描述
关于节点产生中断,亦可以产生如下几种中断:
这里写图片描述
最后设置MO对象
MO在CAN中是一个list双向链表结构,如下:
这里写图片描述
TC23x中模块提供16个lists,每个MO需要分配到list中。上图就是把3,5,16的MO分配到LIST2中,而且中LIST中的BEGIN和END号,也列出了LIST中MO的顺序。
整体看来是这样的连接效果
这里写图片描述
因为nodes数比list数少,所以没有接到node的list中的MO将无法收发can报文,而这些分配操作时通过LIST指令来完成。
这里写图片描述
通过MOSTATx(0~127)寄存器来查看MO的状态
而且每个MO有每个MO的专门功能,比如专门做接收或专门做发送,
对于MO的性能可以分成
标准MO FIFO MO
其中FIFO用来短时间的大量can报文收发时使用。即使在CAN通信的过程中FIFO也可以resize install 或uninstall。FIFO需要自己组合,一个MO只能放8bytes的数据,需要长frame,也是自己组合。
FIFO有base object和slave object组成,如下结构:
这里写图片描述
所以使用FIFO的时候,把指定的当前MO作为base object,然后再配置其他的MO作为slave object。
接收FIFO中接收的slave object和标准的MO类似
发送FIFO中发送slave object则需要特别指定设置 MOFCRn.MMC
GateWay mode 则是实现两个can 总线之间进行自动的信息转发,无需cpu干涉。报文转发。该模式是在MO上操作。
所以在网关配置时需要提前设置源ID和目标ID,然后在之间进行传输。
其实从下图看出GateWay的使用和FIFO结构类似,也是通过FGPR寄存器中的pointer指向。
这里写图片描述
MO的帧处理:
这里写图片描述
MO发送
这里写图片描述
如果要使用MO中AR 的MSGID匹配,需要在AMR中AM值设置mask(acceptance mask),这样只有指定ID的报文才能被该MO接收。
这里写图片描述

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3519次
    • 积分:92
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档