英飞凌 TC3XX CAN Interface (MCMCAN) 模块 | 您所在的位置:网站首页 › 韩语翻译教程经贸文章翻译 › 英飞凌 TC3XX CAN Interface (MCMCAN) 模块 |
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 实验室设备网 版权所有 |