英飞凌 TC3XX CAN Interface (MCMCAN) 模块 您所在的位置:网站首页 韩语翻译教程经贸文章翻译 英飞凌 TC3XX CAN Interface (MCMCAN) 模块

英飞凌 TC3XX CAN Interface (MCMCAN) 模块

2024-02-06 13:48| 来源: 网络整理| 查看: 265

CAN Interface (MCMCAN) 1.模块

有三个模块CAN0,CAN1,CAN2,一般只使用CAN0,CAN0的模块比较全面。

CAN0有4个CAN node,Message RAM 一共32Kbyte,FIFO,buffer,register在此处开辟。

每个node通过M_CAN来实现,并且都支持CAN FD;都有两个阴角,TXD和RXD

2.初始化

具体步骤

设置CCCRi.INIT开始初始化(软硬件复位或通过bus off)此时配置寄存器不会被改变

当该位被置起,即CCCRi.INIT (i=0-3) 置1,can总线之间的通信停止,CAN node停止收发,CAN总线输出TXD为隐性(高)。错误管理逻辑EML的计数器保持不变。

重置 CCCRi (i=0-3).INIT 完成软件初始化

只有当位CCCRi.INIT和CCCRy.CCE都设置为1时,才能启用对M_CAN配置寄存器的访问

CCCRi.CCE只有在CCCRi.INIT='1’时才能被set/reset。

当CCCRi.INIT被清除时,CCCRi.CCE自动复位。

3. 时钟控制单元

MCMCAN模块时钟输入连接到时钟控制单元(CCU)。并且MCMCAN有两种时钟源,fsyn用于寄存器和RAM接口,fasyn用在CAN FD上。CLC设置为全局模块寄存器提供其时钟。

为了向M_CAN节点提供相应的时钟,必须设置MCR.CLKSELi寄存器。异步时钟以及每个M_CAN节点的同步时钟可以通过MCR.CLKSELi寄存器位字段打开/关闭。

4. 中断

每个module都有16个中断线INT_O0~INT_O15

中断分组已经设置,存在16个中断节点。中断组可以通过GRINT1i(i=0-3),**GRINT2i (i=0-3)**自由分配给节点

中断脉冲的生成是基于 寄存器 (IRi (i=0-3) TTIR0) 和 (**IEi (i=0-3)**and TTIE0),中断标志和中断使能之间的关系是&。中断flag会通过向 CANn_IRi bit.写‘1’进行reset。

如果相应中断使能寄存器中的相关中断使能位使能(IEi(i=0-3)、NTRTRi(i=0-2)、TEIE和TTIE0),MCMCAN 模块里16条中断输出线INT_On的其中一条使用GRINT1i (i=0-3) 和 GRINT2i (i=0-3)可以产生中断脉冲。

也就是说通过配置interrupt line选择对应的SRC节点(line和SRC_INT一一对应)配置CAN中断

Ifx_SRC_SRCR INT[16]; } Ifx_SRC_CAN_CAN; volatile Ifx_SRC_SRCR *IfxCan_getSrcPointer(Ifx_CAN *can, IfxCan_InterruptLine interruptLine) { IfxCan_Index canIndex = IfxCan_getIndex(can); Ifx_SRC_CAN_CAN *const srcCanBaseAddress[IFXCAN_NUM_MODULES] = { &MODULE_SRC.CAN.CAN[0], &MODULE_SRC.CAN.CAN[1], }; return &(srcCanBaseAddress[canIndex]->INT[interruptLine]); } 5. CAN FD

区别:传输速率不同、数据长度不同、帧格式不同、ID长度不同

CCCRi.FDOE (i=0-3) 是收发CAN FD frame功能启用位

时间延迟补偿:为了实现比发射机延迟更短的数据相位比特时间,引入了延迟补偿。在没有变送器延迟补偿的情况下,CAN FD帧的数据阶段的比特率受到变送器延迟的限制

CAN收发器的信号从TX出发到总线到RX有时延。CAN FD速率可变,BRS位进行控制,波特率更高

6. CAN node的收发

接受到的Rx Frame以Rx buffer的形式存放在Message RAM,最多存放64个

首地址通过寄存器进行配置

\#define SMCMCAN0_RXBC0_INIT ( 0x00000000UL )

typedef volatile struct _Ifx_CAN_N_RX { Ifx_CAN_N_RX_F0C F0C; Ifx_CAN_N_RX_F0S F0S; Ifx_CAN_N_RX_F0A F0A; Ifx_CAN_N_RX_BC BC; Ifx_CAN_N_RX_F1C F1C; Ifx_CAN_N_RX_F1S F1S; Ifx_CAN_N_RX_F1A F1A; Ifx_CAN_N_RX_ESC ESC; } Ifx_CAN_N_RX;

单个Rx Buffer进行管理时,每个Rx Buffer称为Dedicated Rx Buffer,当写入数据后就会被锁住,不会再从CAN总线上写入新数据,直到CPU访问完后解锁

多个连续的Rx Buffer 可以组成Rx FIFO进行管理,一个CAN Node可以设置2个Rx FIFO,FIFO0和FIFO1.同样首地址通过寄存器进行配置。FIFO是一种先进先出的数据缓存区域。

在节点的初始化过程中

①对于Tx,

(1)首先设置buffer大小

(2)判断config->txConfig.txMode的类型是FIFO还是QUEUE设置为对应的模式并且设置其buffers的大小

(3)在所选中的buffer使能中断

​ ②对于Rx,主要是设置其Rx buffer 的数据长度和Message RAM的起始地址,然后设置Rx FIFO的数据长度,Message RAM的起始地址,大小,操作模式和watermark level

对于FIFO,可容纳的元素数量称为Deepth,每个元素大小为Size,进入full状态后写入会溢出,所以要设置水线(Watermark),Watermark


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有