一、中断的基本概念
1、中断的基本概念和处理过程
当计算机正在执行正常的正常,如果出现异常情况,计算机停止工作,保存当前程序运行所必备的重要参数和状态信息,转而去处理异常,处理结束后再返回到当前程序继续执行,这种处理异常情况的方式叫中断。
通常处理异常情况是轮询(就是不停的检查),实现一段程序,不断的查询相应情况是否发生,如果发生再进行处理,这种处理异常的缺点就是无法执行其他任务,如果要解决的问题比较复杂,这种极端情况就会产生。
针对以上问题ARM设计出中断处理系统,中断独立于主程序之外,在主程序中并没有等待事件可响应函数。
中断处理过程:
1、事件发生后,相应的中断源会产生中断请求。
2、CPU接收到中断求后,将停止下在运行的主程序,产生一个断点。
3、CPU转而执行响应中断,转而执行中断服务程序。
4、中断处理程序执行完成后,加到主程序的断点,继续运行主程序。
注意:在产生断点时,要保护现场,即把当前正在执行的下一条指针以及运算过程中产生的临时数据保存下来(压入到栈内存),在中断处理结束后再进行恢复现场(从栈内存再读取出来),这能才能保证主程序不会被中断处理程序破坏。
具备中断处理能力的芯片有哪优点:
1、实现实时处理:利用中断技术,CPU可以实时响应来自内部和外部的中断请求。
2、实现分时操作:CPU可以让多个功能部件和外设同时工作,当外设向CPU发出请求时,CPU才为提供服务,这样利用中断技术,CPU可以服务多个外部设备。
3、紧急故障处理:当系统在运行过程中出现紧急情况,如果电量低、温差大,可以通过中断及时向CPU发出中断请求,做紧急故障处理。
4、待机状态唤醒:绝大多数嵌入式设备都需要具备低功耗和休眠的功能,从休眠状态唤醒到正常工作状态也需要中断技术。
2、中断源
是指能够向CPU发送中断信号的部件和设备,一个系统中往往有多个中断源,每个中断源都是为特定事件所设计的,在ARM的CPU中分为内部中断源和外部中断源。
CPU内部集成许多功能模块,如:定时器、串行通信接口、数模转换器,它们的工作往往不需要CPU的参与,而是达到某个状态或遇到特定值的时候,才需要通过中断让CPU介入处理,这些中断源位置CPU的内部,所以叫内部中断源,便于CPU高效的管理资源。
外部设备也可以作为中断源,它们可以通过高低电平或电平之间的跳变产生中断信号,这些中断源位于CPU的外部也叫外部中断源,方便CPU与外部设备进行通信。
3、中断信号
1、边缘触发型(脉冲信号上升或下降时触发)
2、电平触发型(高电平或低电平触发)
3、状态变化触发型(电平变化触发)
4、中断向量
当中断产生后被CPU检测(巧妙的电路设计)到,就会跳转到一个固定的地址去执行,这个固定的地址就是中断的入口,也叫中断向量。
对于CPU的若干个中断源而言,每个中断源都各自的中断向量,而这些中断向量一般存储在一段连续的地址空间段,称为中断向量区(0xD003_7400)。
由于一个中断源只能占用几个字节或一条指令的长度,因此不能在中断向量区直接处理中断,而是设置一个指令跳转到中断服务程序,而中断服务程序存储在其它位置。
二、S5PV210的中断系统
见用户手册
三、中断实例
1、中断系统设置
1、禁用所有中断 VICINTENCLEAR
2、选择响应的中断类型为外部中断 VICINTSELECT
3、清除中断处理函数的地址 VICADDRESS
4、绑定中断源与中断处理函数 VICADDRESS
5、使能中断 VICINTENABLE
2、中断设备设置
1、设置工作模式为中断模式
2、设置中断触发模式
3、清除中断掩码
4、清除中断挂起
3、当有中断产生时代码的运行流程
1、暂停主程序
2、根据异常向量表中设计的函数指针,跳转到异常响应函数位置(IRQ_handler)。
3、IRQ异常响应函数,保护现场,然后跳转到直接的中断处理函数irq_handler。
4、在irq_handler函数中调用intc_getvicirqstatus确定哪组VIC产生了中断,然后从对应组的VIC0ADDR,VIC1ADDR,VIC2ADDR,VIC3ADDR寄存器中拷贝出函数指针,这些函数指针是CPU自动帮我们从VICxVECTADDR+NUM寄存器中拷贝出的,然后调用中断处理函数。