根据AM335x技术参考手册的INTC_IRQ_PRIORITY寄存器包含当前活动的IRQ优先级。
这似乎是正确的,因为我通过在ISR中存储它的值并在主循环(在ISR之外)中将其打印出来进行了验证。
我还注意到,在ISR之外,INTC_IRQ_PRIORITY的值显然会保留与发生的最后一个IRQ 相对应的值。
我戴上帽子正确吗?
现在,当服务于低优先级中断(嵌套)时发生高优先级中断时,INTC_IRQ_PRIORITY的值将成为高优先级IRQ之一,正如人们所期望的那样。 />
但是,当较高优先级的ISR完成并且执行返回到较低优先级的ISR时, INTC_IRQ_PRIORITY的值仍然是较高优先级之一。
如果低优先级ISR现在对其进行检查,它将获得与优先级不匹配的值。
此行为是否会在检查未从高优先级中断中调用某些API的系统中引起问题?(通过检查INTC_IRQ_PRIORITY。)
(实际上发生在我的FreeRTOS端口中,该端口在上述情况下是通过低优先级中断从“ XxxxFromISR()” API调用中断言的。我花了几天的时间才弄清楚发生了什么。) < / p>
我在这里想念什么吗?
有没有办法让INTC_IRQ_PRIORITY保持跟踪,并在嵌套情况下为IRQ优先级提供服务?
仅供参考-INTC_IRQ_PRIORITY寄存器是只读的。