Renton 老师:
你好!请问TMS470MF06607如何进行各种中断的优先级配置呢?比如现在我有三个中断,CAN中断,RTI中断,HET定时器中断,我这样分配它们的优先级(从高到低):HET定时器中断;CAN中断;RTI中断,请问如何配置?
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.
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等位也都有相应的变化。
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中断了。也就是说,两个中断的优先级顺序发生了改变。