嵌入式开发相关概念知识系列(三)-中断及其实现

中断(interrupt)是计算机中常常提及的概念,中断好比一种”优先级别高的特权”请求,让正在运行的cpu程序暂停下来并保留现场,转去先服务中断的服务请求,当完成中断请求的服务后,再转回到当前程序现场继续执行。在PC等含有操作系统的设备上,常见的中断服务情景是调用外设如等待用户输入的情景,这时程序调用相关函数(如c语言中的scanf函数),而这些函数进入系统调用从用户态转入到内核态并根据中断表调用中断服务。

在KEA 128的cortex arm cm0+嵌入式芯片中,也有类似的中断概念,比如有FTM(FlexTimer,综合定时器),这个时候基于FTM的中断实现的程序就由两部分组成,一部分为主程序,主要实现应用的逻辑,其中就有使能FTM中断的功能,第二部分就是FTM的中断服务,这个中断服务的逻辑可以按自定义逻辑进行实现,不过中断程序的名称要使用系统提供的函数名(满足arm cm0+的相关开发框架)。这样采用了中断的嵌入式应用程序,一共就有两条独立的程序运行线路,一条主程序,一条中断程序运行线路。

中断的基本过程一般分为中断请求、中断检测、中断响应与中断处理等过程,其中(1)、中断请求是中断源主动将CPU中对应的中断标志位置1,以便向CPU发出中断请求信号;(2)、中断检测,CPU在每条指令结束时会检查中断请求或系统是否满足异常条件,若系统中有中断请求信号,则CPU将会暂停当前运行的任务,转而去对中断请求进行响应;(3)、中断响应与中断处理,首先保护现场,CPU内部寄存器的数据要依次压入RAM堆栈中,然后执行中断服务,中断服务结束后再从RAM堆栈中依次弹出CPU内部寄存器的数据、再返回到中断前的程序。不过这些保护现场与恢复现场的过程是系统自动完成的,用户编程时只需关注主程序和中断服务程序的设计。

一般在操作系统里,进程运行的进本信息在PCB(进程控制块)里,如存在系统调用,处于效率考虑,一般会进行进程切换,调度其他可以运行的进程继续运行,当前进程处于挂起状态,等待终端(外围设备)返回如用户输入结束后唤醒进程进入ready状态等待调度。具体的中断细节和进程调度是操作系统课程里边会有详细描述。

在cortex arm cm0+芯片上,中断的实现方式要简单些,具体可以参考引文中的描述,作为应用程序开发,一般不需要了解中断处理中的CPU上下文的切换的具体过程,程序员只需关注实现使能中断的方式和中断服务程序的编写即可。

关于中断的更多的背景知识和开发细节,后续再具体更新,或在相关课堂或材料中再补充说明。

References

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *