打印
[STM8]

搞STM8遇到问题了

[复制链接]
1850|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2013-9-7 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在搞stm8,发现stm8开关全局中断和其他片子不太一样,他是靠CC寄存器的I1:0这两位来控制的,上电时这两位都为高,实际是stm8初始化的时候关闭了全局中断,等外设都设置好了以后,用RIM()开全局中断,片子开始响应中断了。
问题来了,现在有3段软中断优先级不同的中断历程:IT0、IT1、IT2,软中断级别分别为1、2、3,IT2最高,如果系统已经响应了IT1中断,且在执行中IT0挂起,这时因为要处理临界区数据所以SIM(),处理完后RIM(),请问这时是执行完IT1后去响应IT0,还是发生IT0嵌套IT1的优先级翻转事件?
沙发
huangfeng33| | 2013-9-7 22:33 | 只看该作者
个人觉得是应该马上会响应IT0,因为STM8的中断只要满足两个条件就能够得到响应。

使用特权

评论回复
板凳
拿起书本|  楼主 | 2013-9-8 15:12 | 只看该作者
是不是可以这样理解:系统响应某个级别中断的同时,会将他的中断等级赋值给CC寄存器的I1:0,比如主程序级别为0,I1:0为1:0;当一个二级中断响应后,I1:0为0:0,不当在这个二级中断里使用RIM()后,I1:0又被赋值成1:0,程序级别降至0级,如果这时有等待响应的一级中断,应该马上去响应1级中断?是这样的吗?

使用特权

评论回复
地板
yuanquanquan| | 2013-9-8 17:57 | 只看该作者
略深奥  顶一个

使用特权

评论回复
5
xxiao6130| | 2013-9-9 09:01 | 只看该作者
这个比较难,慢慢来

使用特权

评论回复
6
食肉狼| | 2013-9-9 10:47 | 只看该作者
这时因为要处理临界区数据所以SIM(),处理完后RIM(),
   蛋疼,你这是代表开关全局中断?
膜拜一下,太深奥了

使用特权

评论回复
7
feilusia| | 2013-9-9 15:03 | 只看该作者
不知道你的RIM()是什么意思。STM8的中断优先级,默认下MAIN函数时优先级0,还有几个不可屏蔽的优先级最高,其余的优先级都为3.优先级高的可以嵌套优先级低的,当嵌套中的优先级高的运行完了,再退回来运行优先级次高的,以此类推

使用特权

评论回复
8
jxmzzr| | 2013-9-9 15:33 | 只看该作者
1.需要响应的中断被使能且中断标志位没有清除,可以理解成中断等待响应的状态;
2.需要响应的中断优先级大于程序当前优先级,也就是中断的软优先级比当前CC寄存器I1:0的级别高。当然,3个不可屏蔽的中断源除

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4194

帖子

31

粉丝