关于stm8开关全局中断的问题

2019-07-19 21:30发布

最近在搞stm8,发现stm8开关全局中断和其他片子不太一样,他是靠CC寄存器的I1:0这两位来控制的,上电时这两位都为高,实际是stm8初始化的时候关闭了全局中断,等外设都设置好了以后,用RIM()开全局中断,片子开始响应中断了。
问题来了,现在有3段软中断优先级不同的中断历程:IT0、IT1、IT2,软中断级别分别为1、2、3,IT2最高,如果系统已经响应了IT1中断,且在执行中IT0挂起,这时因为要处理临界区数据所以SIM(),处理完后RIM(),请问这时是执行完IT1后去响应IT0,还是发生IT0嵌套IT1的优先级翻转事件?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-20 02:44
回复【楼主位】whjambo:
---------------------------------
写代码实际测试下,呵呵。
mygod
2楼-- · 2019-07-20 06:34
 精彩回答 2  元偷偷看……
whjambo
3楼-- · 2019-07-20 11:57
回复【4楼】mygod:

回复【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级中断。
纯属个人意见,供大家讨论。
whjambo
4楼-- · 2019-07-20 17:21
 精彩回答 2  元偷偷看……
廖向涵
5楼-- · 2019-07-20 17:54
 精彩回答 2  元偷偷看……
廖向涵
6楼-- · 2019-07-20 18:56
你的问题在手册已经给你解决,现在是有别的问题要理清下,运行sim();是设为3级,那么每个中断初始化复位也是3级,根据以下硬件中断优先级,那么运行为什么能sim();为什么能够屏蔽软件优先级呢?没道理啊!
硬件的中断优先级按如下顺序排列,从低到高的优先级是: MAIN, IT4, IT3, IT2, IT1, IT0,
TRAP/TLI(同等优先级)以及RESET。

一周热门 更多>