历史上的今天
今天是:2025年07月09日(星期三)
2020年07月09日 | STM8 同时的和嵌套的中断管理
2020-07-09 来源:eefocus
STM8S提供2种中断管理模式:
同时发生模式
嵌套模式
STM8同时发生中断管理模式
在该模式下,所有的中断的中断优先级都是3级,因此它们都是不可以被中断的(除了被TLI,RESET或TRAP中断之外)。
硬件的中断优先级按如下顺序排列,从低到高的优先级是:MAIN,IT4,IT3,IT2,IT1,IT0,TRAP/TLI(同等优先级)以及RESET。
图19所示是一个同时发生中断管理模式的例子。

(图18:同时发生中断管理模式)
STM8嵌套中断管理模式
在该模式下,允许在中断子程序中响应中断。一旦一个中断的优先级被设置低于3级时该模式就立即有效。
硬件优先级从低到高按如下顺序给定,即MAIN,IT4,IT3,IT2,IT1,IT0和TRAP。
通过设定ITC_SPRx寄存器的相应的I1_x和I0_x位来配置每一个中断向量的软件优先级。I1_x和I0_x位具有和CC寄存器的I1和I0位相同的意思(见表14)。
不可以将中断优先级设为级别0(I1_x=1,I0_x=0),在这种情况下,该中断的优先级将保持为先前的值。例如:如果先前的值是CFh,然后编程的值是64h,那么结果是44h。
RESET和TRAP向量是没有软件优先级的。当两者的任何一个被响应时,CC寄存器的位I1和I0两位都被置位。
注意:在STM8中断被响应时如果位I1和I0被修改,那么设备将作如下处理:如果一个中断X仍然处在悬起状态(新的中断或者中断标志没有被清除)同时该新的优先级又比先前的优先级高的话,那么该中断X会被重新响应。否则该中断的软件优先级在下一个中断请求(X中断的IRET之后)来之前保持不变。
在中断子程序的执行过程中,执行HALT,POP CC,RIM,SIM和WFI指令会改变当前的软件优先级直到下一条IRET指令被执行或者先前提到的指令之一被执行。图20所示嵌套中断管理的例子。
---------------------------------------------------------------------------
警告:没有标志位及中断来指示堆栈发生溢出
----------------------------------------------------------------------------
| 向量地址 | ITC_SPRx寄存器位 |
| 8008h | I1_0 and I0_0 bits(1) |
| 800Ch | I1_1 and I0_1 bits |
| … | … |
| 80C7h | I1_29 and I0_29 bits |
(表14向量地址映象对应软件的优先级位)
1.ITC_SPRx寄存器对应于TLI的位可以被读写,但是它们对中断处理的管理是没有作用的。

(图20:嵌套中断管理)
史海拾趣
|
招聘兼职翻译、同传译员和外籍英文校对人员等。 我公司是国内知名的翻译公司,可进行十多种语言的相互翻译:汉语、英语、日语、德语、法语、俄语、韩语、意大利语、西班牙语、葡萄牙语、希腊语和荷兰语等。业务范围包括笔译、口译、网站翻译、在线 ...… 查看全部问答> |
|
传统的综合技术越来越不能满足当今采用 90 纳米及以下工艺节点实现的非常大且复杂的 FPGA 设计的需求了。问题是传统的 FPGA 综合引擎是基于源自 ASIC 的方法,如底层规划、区域内优化 (IPO,In-place Optimization) 以及具有物理意识的综合 (physica ...… 查看全部问答> |
|
刚学AVR,下载的好多程序总是编译错误不能用。这个AD转换程序是我自己修改正确的。共享给像我一样刚学 AVR的朋友。绝对正确。任何问题请联系:132 6515 5485。联系请在晚上19:00以后。邮箱:h32446975@126.com 也同时希望交些使用AVR的朋友。  ...… 查看全部问答> |
|
时间:2010-07-05 10:15:35 来源:EEPW 作者: 可靠性是一个在产品的设计、制造和使用的每个环节中都存在的问题。简单地说,所谓可靠性就是产品不易发生故障的程度。众所周知,产品在出厂检验时通常都是合格的,但是随着时间的推移,产 ...… 查看全部问答> |
|
现在在用K9F2G08X0闪存开发一个U盘。该闪存大小为256M,一共2048个块,每块有64个页。也就是说每块有128K。 但是fat32白皮书中要求每块大小不超过32K。 还有就是该闪存能用fat32文件系统吗?… 查看全部问答> |
|
最近在调试 串口部分,始终没调通,请高手看看怎么回事 #include \"systemInit.h\"#include <uart.h> // UART初始化void uartInit(void){ SysCtlPeriEnable(SYSCTL_PERIPH_UART0); &nb ...… 查看全部问答> |




