最近在搞stm8,发现stm8开关全局中断和其他片子不太一样,他是靠CC寄存器的I1:0这两位来控制的,上电时这两位都为高,实际是stm8初始化的时候关闭了全局中断,等外设都设置好了以后,用RIM()开全局中断,片子开始响应中断了。
问题来了,现在有3段软中断优先级不同的中断历程:IT0、IT1、IT2,软中断级别分别为1、2、3,IT2最高,如果系统已经响应了IT1中断,且在执行中IT0挂起,这时因为要处理临界区数据所以SIM(),处理完后RIM(),请问这时是执行完IT1后去响应IT0,还是发生IT0嵌套IT1的优先级翻转事件?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
写代码实际测试下,呵呵。
回复【2楼】whjambo:
---------------------------------
执行完T1,响应T0,硬件还没有处理 中断嵌中断的能力,一般指的中断嵌中断是OS中的概念。
---------------------------------
个人觉得应该是马上会响应IT0,因为STM8的中断只要满足2个条件就能得到响应:
1.需要响应的中断被使能且中断标志位没有清除,可以理解成中断等待响应的状态;
2.需要响应的中断优先级大于程序当前优先级,也就是中断的软优先级比当前CC寄存器I1:0的级别高。
当然,3个不可屏蔽的中断源除外。
系统响应某个级别中断的同时,会将他的中断等级赋值给CC寄存器的I1:0,比如主程序级别为0,I1:0为1:0;当一个2级中断响应后,I1:0为0:0;当在这个2级中断里使用RIM()后,I1:0又被赋值成1:0,程序级别降至0级,如果这时有等待响应的1级中断,应该马上去响应1级中断。
纯属个人意见,供大家讨论。
硬件的中断优先级按如下顺序排列,从低到高的优先级是: MAIN, IT4, IT3, IT2, IT1, IT0,
TRAP/TLI(同等优先级)以及RESET。
一周热门 更多>