STM8S中断

由于今天一直STM8S 的程序,关于STM8s的中断一直是处于只知道用,却不理解中断流程,以及关于中断的基本概念。本篇文档主要说明中断的基本概念、机制、流程、处理方法等。

一些问题:

1.什么叫软件中断、什么是硬件中断?对于中断向量表后的GPIO口,定时器,I2C是什么软件还是硬件中断?

2.什么是软件优先级?什么是硬件优先级?

3.STM8S能改变中断的优先级?怎么改变?比如:说PB比PA口的优先级高,但是我怎么设置寄存器改变其使PA口的中断优先级比PB高。

4.在软件优先级相同的情况下,硬件优先级最高的中断响应?在硬件优先级相同的情况下,软件优先级最高的中断响应?这两句话是什么意思?

牛人的解答:

1、软件中断是由程序产生的中断,比如定时器,硬件中断是由硬件接口产生的,比如串口中断。

2、中断优先级是一样的,通过寄存器配置的。没有你说的软件和硬件优先级

3、中断优先级通过中断优先级寄存器配置,不同的芯片级别不一样,有的是0为最高级,有的是7为最高级。

4、中断优先级相同的情况下,先执行向量列表靠前的中断。

STM8 常用中断指令:

1、开中断:  

  • _asm(“rim”);

2、禁止中断:

  • _asm(“sim”);

3、进入停机模式:

  • _asm(“halt”);

4、中断返回:

  • _asm(“iret”);

5、等待中断:

  • _asm(“wfi”);

6、软件中断:

  • _asm(“trap”);

STM8 中断控制系统处理2种类型的中断源:

1、不可屏蔽的中断:RESET , TLI 和 TRAP

2、可屏蔽中断: 外部中断 和 内嵌的外设中断。

STM8 的中断处理流程图:

                                                                            中断处理流程图

注:流程图中说明的点

        PENDING interrupt :中断挂起         fetch next instruction : 获取下一条指令        execute instruction : 执行指令

        TRAP(不可屏蔽的软件中断)

路线1:中断被响应后,正常操作被悬起,(PC,X,Y,A和CC)被压桟,根据ITC_SPRx寄存器,置CC寄存器的 l1 和 l0 。

            中断服务子程序必须以IRET 指令结束,该指令把堆栈中的保存的寄存器内容出桟,同时由于运行IRET指令,位l1和l0被重新恢复,程序也恢复运行。

路线2:中断程序执行完成后,恢复堆栈内容。

路线3:当前中断服务程序正在执行,另外一个中断等级低的中断等待处理,继续被挂起,等当前中断执行完,再响应低等级中断响应。

路线4:当前中断服务程序正在执行,另外一个中断等级高的中断等待处理,当前中断程序被挂起,(PC,X,Y,A和CC)被压桟,执行等级高的中断程序。等等级高中断执行完,再响应当前中断服务程序。

路线5:当前中断服务程序正在执行,不可屏蔽的软件中断产生,直接REST。

猜你喜欢

转载自blog.csdn.net/zhanghui1456/article/details/81352562