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.

关于TMS470MF06607中断优先级的配置问题

Other Parts Discussed in Thread: TMS470MF06607

 Renton 老师:

             你好!请问TMS470MF06607如何进行各种中断的优先级配置呢?比如现在我有三个中断,CAN中断,RTI中断,HET定时器中断,我这样分配它们的优先级(从高到低):HET定时器中断;CAN中断;RTI中断,请问如何配置?

       

  • 修改中断优先级可以通过M3VIM Interrupt Control Register x (CHANCTRL x)来实现。

    首先,请您查看TMS470MF06607数据手册中3.4 Interrupt Priority (M3VIM)的表格。

    这个表格列出了所有中断的默认映射和优先关系(排在前面的优先级高)。

    这个关系是可以随意设置的,设置方法就是修改CHANCTRLx寄存器。

    只要把您需要的几个中断按照优先级在这个映射表中排序就可以了。

    比如说,映射表中,默认的优先级是RTI-0(4) > HET-0(13) > DCAN1-0(22),简单的办法是吧RTI-0的映射位置向后移,移至DCAN1-0后边。

    从表里可以看到映射区32是reserved,没有使用,那么就把RTI-0放在这里即可。

    同时也要注意RTI-0所对应的IF, MASK等位也都有相应的变化。

  • Renton 老师:

       你好!我按照您的方式进行了尝试,我首先修改了VIM_TABLE中的中断服务程序,将RTI的中断服务程序移到了CHANNEL 32的位置,然后对REQMASKSET1寄存器进行了设置,首位置了1,使能CHANNEL32的中断。但是RTI中断并未发生。请问我的思路是否正确,还需要做哪些设置?谢谢!

  • Hi Wei,

        请查收附件,是一个用RTI Compare0 和 Compare2做的例子。

        有几处比较关键的改动:

        1. CHANCTRL01寄存器中的改动,现在把compare2 (中断6)放在了第4号中断源处;compare0 (中断4)放在了第6号中断源处。

        2. 在vim_table中,也要做相应的修改,让第4号和第6号中断,分别对应rtiCompare2Interrupt和rtiCompare0Interrupt。

        3. 打开中断嵌套(NVIC_enable();)

        4. 在rtiCompare0Interrupt();中,打开rtiCompare2Interrupt的响应,并且进入无限循环。

        5. 在rtiCompare2Interrupt();中设置断点,并可以观测到PC进入该断点, 这意味着本来优先级更低的rtiCompare2Interrupt中断,现在可以打断正在执行的rtiCompare0Interrupt中断了。也就是说,两个中断的优先级顺序发生了改变。