最近用TMS470MF06607进行开发,可以用轮询模式进行CAN收发,但是用中断模式的话,就始终进不了中断,请问应该如何设置?
Renton:
Hi Wei,
您好。
TMS470MF06607中,CAN总线控制器中断总体上有3层控制:
1. 第一层: ARM-Cortex M3 CPU中断控制(NVIC)
这是CPU对所有中断是否进行响应的总开关,NVIC基地址0xE000E000。控制寄存器NVIC Interrupt Set-Enable registers 的偏移量是0x100。
您可以自行设置。
如果使用HALCoGen驱动代码生成工具的话,可以直接调用 NVIC_enable() 这个函数来打开全局控制。
2. DCAN1或2模块的中断控制开关
对于整个DCAN1或2模块来说,也有一个中断总开关,这个开关在寄存器DCAN CTL 的IE0和IE1 bit。
需要设置至少其中之一来打开DCAN模块总体的发送/接收中断。 (另有EIE,SIE位来控制错误和状态中断)
3. Message Object中断控制
以上两层之后,就是最后一层的中断控制,针对每个msg obj,都有相应的中断控制bit,这个bit在每个msg obj的MCTL中,TxIE和RxIE。
分别控制发送中断和接收中断。需要通过DCAN模块的IFxMCTL寄存器来对这些msg obj的MCTL进行设置。
以上三层都打开的前提下,CPU才对响应中断。
所以请查看您的设置,是否正确?
wei wei:
回复 Renton:
谢谢这位老师的解答。此问题已经解决。
另外能否讲解下,这个MESSAGE OBJECT的本质是什么。如何配置一个MESSAGE OBJECT?是不是一定要在初始化的时候配置?在发送的时候再重新配置行不行?之前一直用的是STM32,感觉TI的CAN收发器的用法很不一样。
wei wei:
回复 Renton:
谢谢老师的耐心解答,TI的CAN控制器功能确实要强大些,但是配置也要复杂些。
不知道老师能不能解答一下我在CCS调试中遇到的问题,非常感谢。
问题如下:我的开发环境是CCS4.2,在代码编译无误之后,点击DEBUG,也就是那个绿色虫子图标,出现以下错误提示:
exception occurred during launch
reason: an internal error occurred during "creating debug server"
然后我点开detail选项卡,显示的信息是:
contract ID "ti.com@/debug server1;1" is not registered with xpcom runtime.(0x80004005)
wei wei:
回复 wei wei:
另外,我还想问下关于CAN中断的问题。
我发现TMSMF06607的CAN无论是发送或者接收到进的是同一个ISR,CAN1HIGHINTERRUPT.能不能分开处理呢?如果在接收中断中进行发送,会不会出问题?
wei wei:
回复 Renton:
HI Renton :
这个问题已经搞清楚了。再次感谢。
另外,我的程序在调试过程中,进入了BUS_FAULT中断,请问这是怎么回事?哪些情况下会进入BUS_FAULT中断?