历史上的今天
今天是:2025年07月09日(星期三)
2020年07月09日 | STM8 中断屏蔽和处理流程
2020-07-09 来源:eefocus
STM8 中断屏蔽和处理流程
中断屏蔽是通过CC寄存器的位I1和位I0以及设置每个中断向量(表13)的软件优先级的ITC_SPRx来管理的。处理流程如图17所示:

(表13:软件优先级)

(图17:中断处理流程图)
当一个中断请求必须被响应时:
1.在当前正在执行指令结束之后,正常的操作被悬起;
2.PC,X,Y,A和CC寄存器被自动压栈;
3.根据ITC_SPRx寄存器中的值对应的中断服务向量,CC寄存器中的位I1和I0被相应设置;
4.通过中断向量载入中断服务子程序的入口地址,接着对中断服务子程序的第一条指令取址(参考表16中断映射表来了解向量地址的更详细情况)。
中断服务子程序必须以IRET指令结束,该指令会把堆栈中的保存的寄存器内容出栈,同时由于运行IRET指令,位I1和位I0被重新恢复,程序也恢复运行。
处理等待(排队)的中断
同一时间可以有几个中断排队等待处理。中断响应是根据如下两步来决定的:
1. 最高软件优先级的中断被响应;
2. 如果几个排队的中断具有相同的软件优先级,那么最高硬件优先级的中断先响应。
当中断请求没有立即得到响应时,该中断请求被锁存;当其软件优先级及硬件优先级均为的时候,该中断被处理。
注意:
与软件优先级不同,每个中断的硬件优先级是唯一且互不相同的,这样就可保证一个时刻只有一个中断被唯一确定地处理。
RESET,TLI和TRAP这个几个中断被认为是拥有最高的软件优先级来处理。
一个TLI中断可中断除TRAP及RESET之外的3级中断。见图18了解更加详细的排队等待处理的中断服务过程。

(图18:优先级处理过程 )
中断源
STM8中断控制器处理2种类型的中断源:
不可屏蔽的中断:RESET,TLI和TRAP
可屏蔽中断:外部中断或者内嵌的外设中断
STM8不可屏蔽中断源
不可屏蔽中断不会考虑CC寄存器的I1和I0的状态(参见图17)。仅仅当TRAP中断发生时候将PC,X,Y,A和CC寄存器的内容压栈。相应的向量载入到PC寄存器中同时置位I1和I0位禁止中断(3级优先级)。TRAP(不可屏蔽的软件中断)
当执行TRAP指令时就响应软件中断。它响应过程如图17所示的流程图。
TRAP中断不能使处理器从停机(Halt)模式下退出。RESET复位
复位中断是STM8的软件和硬件中断的最高优先级,这也就是说在复位程序的开始所有的中断被禁止。必须通过RIM指令来使能它们(见表15)。
复位中断可以使处理器从停机(Halt)模式退出。
更详细的复位中断管理见复位章节。TLI最高等级的硬件中断
当在特定的I/O边沿检测到在相应的TLI输入时将产生硬件中断。
注意:在TLI中断服务子程序中禁止使用TRAP指令。
STM8可屏蔽的中断源
对于可屏蔽中断,如果相应的中断被使能,而且如果在ITC_SPRx寄存器的中断优先级比当前正在执行的中断(根据CC寄存器的I1和I0位)的优先级高的话那么就可以被响应。如果上面2个条件中的任何一个不满足那么该中断会被锁存并保持在等待状态。
外部中断
外部中断可以用来把MCU从停机(Halt)模式唤醒。外部中断触发方式的选择可以通过软件写控制外部中断控制寄存器(EXTI_CRx)来实现。
当多个连接到同一个中断向量的外部引脚中断被同时选定时候,那么他们是'逻辑或'的关系。
当外部的电平触发中断被锁存后,如果该给定的电平一直保持到中断子程序结束,那么该电平信号将再次触发中断,除非在中断子程序中禁用该中断。外设中断
大部分的外设中断会导致MCU从停机(Halt)模式下唤醒。
当对应外设状态寄存器的中断标志位被置位,同时相应的外设控制寄存器的使能位被置位时将产生一个外设中断。
清除一个STM8外设中断的标准顺序是在对状态寄存器的访问后再对相关寄存器进行读或者写操作。
当一个清除过程被执行之后相应的悬起中断(一个将被执行的中断)会丢失。
上一篇:STM8 中断源
下一篇:STM8 中断控制器(ITC)
史海拾趣
|
Keil C51开发系统基本知识 1. 第一节 系统概述Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会 ...… 查看全部问答> |
|
replyreload += \',\' + 370082; 一、透明衬底技术 InGaAlP LED通常是在GaAs衬底上外延生长InGaAlP发光区GaP窗口区制备而成。与InGaAlP相比,GaAs材料具有小得多的禁带宽度,因此,当短波长的光从发光区与窗口表面射入GaAs衬底时,将被悉数吸 ...… 查看全部问答> |
|
出错:i2cwrite error:1460 麻烦高手指点一二 12c init iic irq mapping :[irq:27->sysIRQ:21]. OEMIoControl:Unspported Code 0x10100b4-device 0x0101 func 52 OEMIoControl:Unspported Code 0x10100b4-device 0x0101 func 62 CamCLOCKOn=1 syncist:IO_Abandoned I2CWrite error :1460 ...… 查看全部问答> |
|
实习要做一个固定电话来电防火墙(识别来电号码,屏蔽骚扰电话),目前我的思路有两条: 1,采用专用的来电信号处理芯片; 2,使用单片机实现 现在这两中方法都碰到了一个问题 1,不知道该用什么芯片 2,需要解析电话线传输协议,但是不知道用 ...… 查看全部问答> |
|
密集调用 etherOutput 发送以太网帧时,返回ERROR,说是 out of mbufs,怎么解决? 密集调用 etherOutput 发送以太网帧时,返回ERROR,说是 out of mbufs,怎么解决?… 查看全部问答> |
|
我有一个PNG图像文件 myfile.png ,需要显示到窗口上 在win xp下有 CImage类可以处理PNG图像,以及CDC的TransparentBlt函数处理透明绘制 但是,在WIN CE下,相关函数都不存在,怎么办?… 查看全部问答> |
|
看来了几个例子,还是不明白输出PWM时TIM_period的值怎么设置 参考书上说:由于TIM1计数器的时钟频率为72MHz,希望通道输出频率为17.57KHz,可得到TIM1预分频器的值TIM1_period为0xFFFF,这个值是怎么计算出来的? 请知道的朋友详细指点一下 ...… 查看全部问答> |




