TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28377D: CAN中断内接受到的数据被覆盖

Part Number:TMS320F28377D

我使用MATLAB/SIMULINK自动代码生成工具生成了C2000支持的代码,在代码自动生成中产生了多个中断程序,其中CAN中断设置的优先级很低,会被其他中断强行打断。我使用要使用CAN接受两个不同的数据帧,这两个数据帧之间的间隔很短大概只有60-100us,相同的数据帧之间的间隔很长大概400-600us。我目前发现的情况是第一个数据帧丢包率很大,能接受到的第一个数据帧的数量大概是第二个数据帧的1/10。

我翻看了自动代码生成的代码,其中它将messageobject的flag设置为了CAN_MSG_OBJ_RX_INT_ENABLE,我翻看了函数说明这会导致EOB位为1,不启用FIFO。

而CAN去读取messagebox为一个较低等级的中断,会被其他中断进程打断,该中断函数只用运行完成了才会清除CAN中断。

我查看了user guide,发现CAN的中断相应于是由IFx寄存器组和几个寄存器的标志位来产生和控制的,其过程十分复杂。

我的问题是:

1)是不是由于我使用了CAN_MSG_OBJ_RX_INT_ENABLE,第一个数据帧产生了CAN中断,但同时由于存在多个中断进程,导致CAN中断被打断,待其返回时读到确是第二个数据帧导入的数据,这才导致第一个数据帧严重的丢包率。

2)user guide 中对于CAN中断函数的进入过程的描述过于模糊,我并不是很清楚其是在CAN模块运行到哪种地步的时候才会进入CAN的中断函数,不知能否详细说明。

3)如果真的如第一个问题所言,该问题的出现由我在第一个问题中分析的原因中产生,我该如何规避这个问题。

Yale Li:

1)C2000的中断默认不嵌套;

2)请仔细阅读spruhm8i_TMS320F2837xD Dual-Core Delfino Microcontrollers Technical Reference Manual (Rev. I)第2472页22.6 Interrupt Functionality,里面的描述非常详细。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28377D: CAN中断内接受到的数据被覆盖
分享到: 更多 (0)