打印
[STM8]

STM8中断优先级问题请教

[复制链接]
15388|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chaofan10|  楼主 | 2012-7-17 16:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在程序中 需要TIM2 捕获中断  tim1定时器中断   UART1的寄存器满中断。
需要设置 如下  捕获中断谁都不能打断。
tim1定时器中断 不能打断UART
ITC_SPR3 = 0X7F;//TIM1定时器中断 01级别1
   ITC_SPR4 = 0XFF;//TIM2优先级11 级别3
   ITC_SPR5 = 0XCF;//UART优先级00 级别2

但是问题是串口中断依然能被定时器打断?想问下 这是怎么回事?
沙发
chaofan10|  楼主 | 2012-7-17 16:39 | 只看该作者
谁知道 IT1 IT2 IT3 IT4分别代表什么意思?

使用特权

评论回复
板凳
figo20042005| | 2012-7-17 17:05 | 只看该作者
他们指硬件的优先级,IT0为4个里最高的,IT4为最小的,至于被打断应该不是优先级设置的问题

使用特权

评论回复
地板
chaofan10|  楼主 | 2012-7-17 17:16 | 只看该作者
IT0 相当于什么中断? 3# figo20042005

使用特权

评论回复
5
chaofan10|  楼主 | 2012-7-17 17:21 | 只看该作者
想请教
1,如果配置ITC_SPR寄存器 只要不修改就是按照硬件优先级吗?
2,如果配置ITC_SPR寄存器,是否11为不可被打断的中断。而其他才为中断嵌套?
3,如果配置成00 01 的话是否为 可嵌套的中断?
谢谢 3# figo20042005

使用特权

评论回复
6
figo20042005| | 2012-7-17 20:05 | 只看该作者
8.如果在你的系统中使用了TIME2(中断通道28)和EXTI0(中断通道6)两个中断,而TIME2中断必须优先响应,而且当系统在执行EXIT0中断服务时也必须打断(抢先、嵌套),就必须设置TIME2的抢先优先级比EXTI0的抢先优先级要高(数目小)。假定EXTI0为2号抢先优先级,那么TIME2就必须设置成0或1号抢先优先级。这些工作需要在AIRC中的PRIGROUP设置完成,确定了整个系统所具有的优先级个数后,再分别对每个中断通道(设备)进行设置。
9.具体优先级的确定和嵌套规则。ARM cortex_m3(STM32)规定
a/ 只能高抢先优先级的中断可以打断低抢先优先级的中断服务,构成中断嵌套。
b/ 当2(n)个相同抢先优先级的中断出现,它们之间不能构成中断嵌套,但STM32首先响应子优先级高的中断。
c/ 当2(n)个相同抢先优先级和相同子优先级的中断出现,STM32首先响应中断通道所对应的中断向量地址低的那个中断(见ROM0008,表52)。
具体一点:
0号抢先优先级的中断,可以打断任何中断抢先优先级为非0号的中断;1号抢先优先级的中断,可以打断任何中断抢先优先级为2、3、4号的中断;……;构成中断嵌套。
如果两个中断的抢先优先级相同,谁先出现,就先响应谁,不构成嵌套。如果一起出现(或挂在那里等待),就看它们2个谁的子优先级高了,如果子优先级也相同,就看它们的中断向量位置了。
10.上电Reset后,寄存器AIRC中PRIGROUP[10:8]的值为0(编号0),因此此时系统使用16个抢先优先级,无子优先级。另外由于所有外部中断通道的优先级控制字PRI_n也都是0,所以根据上面的定义可以得出,此时68个外部中断通道的抢先优先级都是0号,没有子优先级的区分。故此时不会发生任何的中断嵌套行为,谁也不能打断当前正在执行的中断服务。当多个中断出现后,则看它们的中断向量地址:地址越低,中断级别越高,STM32优先响应。
注意:此时内部中断的抢先优先级也都是0号,由于它们的中断向量地址比外部中断向量地址都低,所以它们的优先级比外部中断通道高,但如果此时正在执行一个外部中断服务,它们也必须排队等待,只是可以插队,当正在执行的中断完成后,它们可以优先得到执行。
了解以上基本概念还是不够的,还要了解具体中断的控制有那些途径,中断服务程序如何正确的编写。下面的描述主要以TIME2通道为例。
二、中断控制
1.对于STM32讲,外部中断通道位置28(35号优先级)是给外部设备TIME2的,但TIME2本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢/下溢)、输入捕获、输出匹配、DMA申请等。所有TIME2的中断事件都是通过一个TIME2的中断通道向STM32内核提出中断申请,那么STM32中如何处理和控制TIME2和它众多的、不同的、中断申请呢?
(题外话:STM32中的一个通用定时计数器,就比8位控制器(如AVR,MCS-51就更不必说了)中TIME要复杂多了。学过AVR的,可能对输入捕获、输出匹配等还有概念,但如果你学的标准架构的MCS-51,那么上手32位可能困难就更多了。所以我一直推荐学习8位机应该认真的从AVR开始。尽管51有很大的市场,价格也相对便宜,但从长远的眼光看问题,从后续掌握32位的使用,考虑到学生的可持续发展,AVR应该是比较好的选择。)

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
chaofan10 + 1 很给力!
7
234918154| | 2012-7-31 18:57 | 只看该作者
讲解的太高深了,新人伤不起

使用特权

评论回复
8
吾要单片机| | 2012-11-11 23:34 | 只看该作者
关于STM8的中断嵌套管理在编程手册有介绍,但是我也是不明白,不知道它能套多少层,请高人指点!!

使用特权

评论回复
9
ldh119| | 2013-12-27 11:03 | 只看该作者
本帖最后由 ldh119 于 2013-12-27 11:08 编辑

手册好像说数越大优先级越高,默认是3级 即11,有可能你的优先级设反了。不行你用函数库试试。ITC_SetSoftwarePriority(。。。。。)

使用特权

评论回复
10
会飞的狼_2058| | 2016-8-1 17:06 | 只看该作者
必然的啊。TIMER2的软件优先级为3 高于串口的优先级2,此时数越大优先级越高。而中断向量代表了硬件优先级,向量号越小,代表硬件优先级越高。同时STM8的软件优先级优于硬件优先级。

使用特权

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

本版积分规则

0

主题

12

帖子

1

粉丝