一种基于ARM处理器的异常处理设计与实现
实时系统必不可少。 每次时钟中断发生,时钟中断服务程序都会被执行。因此时钟中断服务程序执行的频率很高,每个系统周期都会被执行,这要求程序的处理高效、简洁。 由于ARM处理器中FIQ的响应速度和优先级均高于IRQ,因此采用FIQ方式实现对处理器时钟中断的处理,其他外部中断由IRQ异常统一管理,异常处理结构图如图3所示。 嵌入式时钟常用于向操作系统通过调度单位,因此中断状态会持续直至完成调度处理,处理完成后由时钟源进行中断清除,以开始下一周期计时。根据应用需求,时钟中断应设置为电平触发方式,通过APR和ATR寄存器,设置该时钟为高电平触发模式。通过ITR寄存器,设置该时钟为FIQ中断方式。 LPC3250处理器可配置多路时钟源,以μs级时钟(Millisecond Timer)为例,根据应用需求,在中断控制器中对该中断源进行以下主要设置: Write(VIC_APR,0x3FF0EFF8);//通过APR寄存器MSTIMER_INT位置1,设置Millisecond Timer中断为高电位有效 write(VIC_ATR,0xFEFFFFFF);//通过ATR寄存器MSTIMER_INT位置0,设置Millisecond Timer为电平触发 write(VIC_ITR,0x08000000);//通过ITR寄存器MSTIMER_INT位置1,设置Millisecond Timer为FIQ中断方式 中断控制器中设置完成后,当发生时钟中断时,PC指向FIQ的异常向量入口0x1C处,由于FIQ的向量入口为ARM处理器7种异常向量的尾地址,因此无需通过跳转指令进行处理例程的跳转。在该入口处对中断进行以下主要处理: sub lr,lr,#4计算返回地址 stmfd sp!,{ri-rm,lr}保存使用到的寄存器 … mov lr,pc ldr pc,=IntHandler … Ldmfd sp!,{ri-rm,pc}中断返回,表示将SPSR的值赋给CPSR 其中IntHandler为中断处理接口,主要完成为嵌入式操作系统提供基本的调度周期以及时钟中断源中断状态的清除。 完成时钟中断源的清除,需设置定时器中ISR(Millisecond Timer Interrupt Status register)寄存器,具体设置如下: write(MSTIMER_ISR,0x1);//通过时钟中ISR寄存器MATCH0_INT位置1,清除时钟中断源 5 功能及性能测试 在完成设计、编码及交叉编译后,对该异常机制在LPC3250目标机上的运行的情况进行功能和性能测试。 5.1 功能测试 采用FIQ模式进行定时器中断处理,操作系统可正确获取调度周期,表明该中断处理功能正确。 5.2 性能测试 由于采用FIQ中断模式进行时钟中断处理,在异常入口处无需额外的跳转操作,直接进行时钟中断处理。且设计中FIQ只用于时钟中断,因此无需从中断控制器获取中断号的获取,减少了中断处理指令,进而降低了处理时间。LPC3250平台处理器主频为266MHz,处理器时钟周期为1/266μs,以1/1 000 s为单位向操作系统提供调度周期为例,总线周期误差累计实验数据如图4所示。 实验中,随着采样调度周期数的不断增加,IRQ模式下时钟计时与理论值的处理器时钟周期偏差数较FIQ模式明显偏多,FIQ模式计时比IRQ模式更接近实际计时。结果表明,通过FIQ模式进行的时钟中断较IRQ方式更精确。 6 结束语 本文提出一种高效的异常处理方案,并以时钟为例进行了验证。通过实现验证,采用上述FIQ中断模式所设计的时钟中断控制程序,较IRQ模式的时钟中断方式更为高效,能为嵌入式系统提供更为精确的调度周期,实验效果与预期相符。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)