一种基于ARM处理器的异常处理设计与实现
摘要 嵌入式系统要求对异常及中断处理器能快速响应。文中分析了ARM体系结构下异常处理特点,提出一种基于ARM处理器的高效异常处理解决方案,以LPC3250硬件平台为基础,对该方案进行了设计与实现。测试结果表明,该方案的异常处理更为高效。
在航空航天、工业控制及医疗等领域中,嵌入式系统的安全性、可靠性以及高效性作用显著,而异常是系统在运行过程中的突发事件,异常处理是否高效将直接影响整个系统的工作效率。为了确保嵌入式系统高效安全的运行,对处理器非正常模式下高效的异常处理机制的研究具有重要意义。
1 异常概述
嵌入式系统中异常/中断是指由处理器内部或外部源产生并引起系统处理的一个事件。根据事件源的不同将异常分为“异常”和“中断”两种,异常指由处理器内部源所引起的事件,如非法指令执行异常,地址访问异常等;中断指由处理器外部中断源引起的事件。嵌入式处理器对外部中断源一般由中断控制器进行统一管理并上报处理器。对于嵌入式系统,异常/中断均会导致处理器打断正常的程序执行流程,进入特定模式进行相应的异常处理。因此,对“异常”和“中断”一般不作严格区分。
作为嵌入式处理器,为了确保系统的实时性和程序执行的稳定性,ARM处理器支持完整的异常处理机制。ARM处理器共有7种异常类型,每种异常都有自己固定的异常向量地址,且在异常产生后,处理器会切换至相应的异常中断模式,具体描述如表1所示。
ARM支持多中断嵌套,因此各异常有固定的优先级,依次为:复位、数据中止、FIQ、IRQ、预取指中止、未定义指令和SWI。各异常向量之间只有4 bit的空间,因此向量表中只能放置跳转指令。通常异常处理结构如图1所示。
2 异常的响应和返回过程
2.1 异常的响应
当7种异常中的任何一个在允许响应的前提下发生时,处理器会进行必要的预处理,其动作如下:
(1)前程序状态字(Thc Current Program Status Register,CPSR)到各异常对应的备份程序状态字(The Saved Program Status Regis ter,SPSR)中。
(2)PSR中的控制位,使处理器进入相应的异常中断模式,同时切换程序状态为ARM状态,禁止IRQ中断,若异常响应为复位异常或FIQ异常,则还要禁止FIQ中断。
(3)回地址,并保存到相应的LR寄存器中。
(4)量地址入PC,跳转并执行中断服务程序。
2.2 异常的返回
异常返回在异常服务程序完成后执行,内核需要用户自行完成以下返回动作:(1)PSR寄存器的内容返还给CPSR寄存器。(2)R寄存器的值赋给PC。(3)入中断服务程序时保存了部分通用寄存器的值,此时需恢复这些被保存的通用寄存器的值,且在清除中断禁止位。
3 异常服务程序的设计
LPC3250硬件平台,板上集成两级中断控制,共支持74路中断源。其中一级中断控制器可接收32路外部中断请求,所有中断通过FIQ或IRQ中断信号通知ARM核,因此需中断控制器管理所有外部中断源。
中断控制器中,ATR(Activation Type Register)寄存器用于设置中断的触发方式,外部中断支持沿触发和电平触发;APR(Activation Polarity Register)寄存器用于确定中断类型,支持高电位有效和低电位有效;ITR(Interrupt Type Register)寄存器用于设置中断方式,包括FIQ和IRQ两种,其中FIQ的响应速度和优先级高于IRQ,支持数据传输或信道处理,通过独有的寄存器来减少占用其他寄存器,通常嵌入式系统将所有外部中断采用IRQ异常中断模式管理;IER(InterruptEnable Register)寄存器用于对外部中断进行屏蔽或使能;RSR(Raw Stat us Register)寄存器用于描述当前所有中断源状态。
中断源产生中断时,处理器从IRQ或FIQ异常入口开始执行处理例程。通常嵌入式系统根据中断源的差异存在不同的中断服务程序,为了正确判断出具体的中断源,设计在异常向量表之外,系统维护关联中断控制器的中断向量表,结构如表2所示。
中断向量表,用于存放具体中断源对应的中断服务程序的入口地址。当响应外设中断请求时,进入中断服务程序通过中断控制器识别中断源,并根据中断向量表执行处理例程。
LPC3250平台设计,不通过中断控制器进行中断源的优先级控制,通过RSR寄存器获取中断源状态后,由系统软件进行中断源优先级配置。中断处理中由系统选择当前最高优先级中断,并进入对应中断源的中断处理例程,中断处理过程如图2所示。
4 异常服务程序的实现
嵌入式实时操作系统中,无论是实时响应并处理来自各个被控对象的实时信息,还是对任务执行时间的管理、资源的限时等待等,均需要时钟的参与。因此,准确且具有足够精度的时钟对于
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)