This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570lS20206中断嵌套问题

Other Parts Discussed in Thread: TMS570LS20206, HALCOGEN

我使用了GIOA0的外部中断和CAN总线中断,使用默认优先级,GlOA0为9通道,CAN为16通道,在实际使用GIOA0的中断无法打断CAN的中断,不知何原因?还有实规中断嵌套需要设置哪个寄存器吗?请指导,谢谢!

  • Hi Zhangjie,

    关于TMS570的中断嵌套问题,您可以参考这个帖子:

    http://e2e.ti.com/support/microcontrollers/hercules/f/312/t/59793.aspx#213613

     

    基本上,Cortex R 内核只提供了IRQ和FIQ两种默认中断,而且进入IRQ的ISR后,CPU会自动屏蔽其他所有IRQ。

    也就是说,只要是IRQ, 无论优先顺位,一律不能嵌套,直到当前的IRQ的ISR执行完成。

     

    如果用户想实现IRQ的中断嵌套,那么可以在进入ISR之后,手动将CPSR (current program status register)寄存器的"I" 位清零。

    这样后面的更高优先级的IRQ就可以得到响应,并嵌套进来了。

     

    好像这个嵌套是没有层级限制的。

    但是用户需要自行对被打断的ISR现场进行保护,这个工作也会随着嵌套层级增多而变得复杂,稍有不慎,就可能引起内存溢出。

    所以建议您谨慎使用中断嵌套。

  • 你好,可是我的系统设计中必须GIOA0的这个中断优先级最高,如果我使用FIQ可以吗,其余中断使用IRQ?还有我在其它资料上看到CORTEX-M3核的ARM架构都支持中断嵌套,CORTEX-R的ARM架构是目前还不支持还是本来这个硬件设计就没有考虑中断嵌套?

  • Hi Zhangjie,

    GIOA0作为FIQ应该没有问题的。

    但是我不确认FIQ是否能够打断IRQ的操作。(应该可以,但是最好还是测试一下。)

    M3支持8级嵌套,R默认不支持,是CPU架构的区别。

    您可以查看ARM官方的说明:

    infocenter.arm.com/.../index.jsp

    个人觉得,Cortex-R实际上是给用户留出了无限嵌套的可能的(只要RAM够大),只不过这个操作需要用户花一些时间和精力自行完成,没有硬件辅助。

    从某种意义上来说,这种架构更灵活。

  • 我将GIOA0的中断改为了FIQ中断响应是正确的,CAN中断还是IRQ,可是发现只运行IRQ时是可以的,只运行FIQ可以,如果2个中断都存在,程序运行就出错了,不知道是什么原因

  • 可否提供一个中断嵌套的例子,我在当前中断中打开'I'位,程序运行不正常,请给个嵌套的例子,谢谢!

  • Hi Zhangjie,

    不知道您说的"出错/程序运行不正常"指的是什么样的错误呢?

    附件中是一个嵌套的例子。

    使用了RTI的比较1和比较2中断,比较1设置为每5ms的FIQ,比较2设置为每8ms的IRQ。

    比较2中断ISR中,打开比较1。

    ISR中有一个50000次累加的全局变量,这样可以看到什么时候FIQ打断了IRQ,并且您可以看到FIQ的ISR返回后,累加继续进行。

    仅供参考。

  • 我说的异常就是当fiq和irq同时有时,程序会跑飞至取址中止的入口,就是两个中断不能同时有.还有一个关于tms570ls20206的can总线中,为什么设置了屏蔽寄存器,可是还是所有的CAN的ID都产生中断,且中断清不掉.关于验收滤波器这方面请赐教!谢谢!

  • Hi Zhangjie,

       您指的是Prefetch Abort吗?

       使用前面的例子还有这个问题吗?

       如果您使用HALCoGen生成的驱动代码的话,最好不要关闭FPU的支持,貌似关闭后,CPU工作会有点不正常,可能生成的驱动代码有点问题。

       关于CAN总线的问题,麻烦您再开个帖子,方便以后的查询,多谢多谢~

  • 我想使用IRQ完成中断嵌套,使用了CAN总线中断和GIOA0的中断,想实现在CAN总线和GIOA0都有中断时,GIoA0的可以打断CAN的中断,GI0A0的优先级高,请给个例子,谢谢