中断处理模块设计

当ARM系统运行时,外部异常情况可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中要进行中断处理,采用的方式是在中断向量表中的特定位置放置一条跳转指令,跳转到中断处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到中断处理程序,当中断处理完成以后,返回到主程序继续执行。

1实例说明

要让编写的应用程序能够正确运行,需要对ARM的中断控制器和堆栈设置有一定了解。中断与堆栈设置和ARM体系结构紧密相关,ARM是一种支持多任务操作的系统内核,内部的结构完全适应多任务应用。ARM内核的堆栈设置与处理模式一一对应,每一种处理模式都有自己独立的堆栈指针SP寄存器。在系统初始化阶段必须对将要使用到的各种处理模式的堆栈寄存器进行设置,才能保证以后系统程序与用户应用程序的正常运行。

如图9-1所示为中断控制器管理ARM多个外部中断源,实现多重中断系统的一个框架图。

 


本实例主要从软件角度分析了ARM系统中异常中断类型、功能及特点,并给出了中断处理的方法、流程、软件实现及优化。

2中断处理与寄存器设置

2.1 ARM中断处理类型

当正常的程序执行流程发生暂时的停止时,称为中断,例如,处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。

中断与堆栈设置和ARM体系结构紧密相关,ARM是一种支持多任务操作的系统内核,内部结构完全适应多任务应用。ARM内核支持7种中断,不同的中断处于不同的处理模式(如表9-l所示),具有不同的优先级,而且每个中断都有固定的中断入口地址。当一个中断发生时,相应的R14(LR)存储中断返回地址,SPSR存储状态寄存器CPSR的值。

由于ARM内核支持流水线工作,LR寄存器存储的地址可能是发生中断处后面指令的地址,所以不同的中断处理完成后,必须将LR寄存器值经过处理后再写入R15(PC)寄存器。

ARM体系结构所支持的异常及具体含义如表9-2所示。



2.2 ARM中断及相关寄存器

要正确应用ARM处理器必须首先对它的系统寄存器进行正确配置,下面简要介绍一下ARM寄存器,包括一些中断寄存器设置如中断状态 (0x8000.0240,0x8000.1240,0x8000.2240)和中断屏蔽寄存器 (0xS000.0280,0x8000.1280,0x8000.2280)。

ARM中断寄存器主要包括:

·ARM中断寄存器中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。

·中断挂起寄存器,当有中断请求产生时,相应的位会被硬件置1,处于挂起状态。当进入中断处理程序时,必须通过软件清除这个标志位,以标志响应中断请求。

·中断屏蔽寄存器,当需要屏蔽某些中断源时,可以设置相对应的位。

·中断优先级寄存器可以设置21个中断源优先级的高低。

·中断偏移寄存器,中断响应时通过读这个寄存器可以查到当前的中断源。

如表9-3所示是ARM的一些系统寄存器列表。


系统寄存器中的每一位或几位都对应系统功能的控制、状态等信息。例如:

·SYSCON1中的UARTlEN、LCDEN位分别控制异步串口l与LCD显示的使能。

·SYSCON2中的SDRAMZ用来设置SDRAM存储器的位宽。

·SYSCON3中的CLKCTL用来在18MHz、37MHz、49MHz和74MHz中选择一种作    为系统工作频率。

     与系统运行紧密相关的其他寄存器如表9-4所示,对它们进行正确设置,就可以启用SDRAM、LCD或者串行通信口。

 


3中断硬件模块图

关于ARM中断部分的硬件设计,对应的硬件原理图如图9-2所示,它是ARM CPU中的一部分。由于这部分比较简单,在此不再详述。

 


4软件程序设计

4.1中断处理流程

ARM系统的中断处理流程如图9-3所示。系统中主要有定时器中断、串口输入中断、串口输出中断、接口中断、链路中断5种中断。

 


其中:

·定时器中断模块主要是为操作系统提供时钟基准。

·串口输入和输出中断模块主要给用户提供接口,方便程序的下载与调试。

·接口中断模块负责每2ms与总线上其他板卡通信一次。

·链路中断模块也是每隔一段时间处理一次链路的数据,它的任务最重。

因此,应该将链路中断模块设置成。FIQ快速中断方式,其他模块都设成IRQ普通中断方式。

4.2中断程序设计

正确、恰当地使用中断程序可以使嵌入式系统应用运行得更有效率,下面给出ARM中断测试的部分汇编源程序。测试程序开启T1定时器中断进行测试,通过中断服务程序使与PD0连接的LED指示灯闪亮。

(1) 中断服务程序



4.3中断处理程序优化

将中断处理尽可能搬到内部RAM或SDRAM中,以前的中断处理函数代码放在Flash中,数据放在SDRAM中,Flash速度远慢于 SDRAM,这是限制中断处理速度的一大瓶颈。现在可以通过改变编译配置,将所有的中断处理函数都拷贝到ARM内部RAM或者SDRAM中。一般情况下,内部RAM速度要快于外部的SDRAM,因此,可以修改以下编译配置文件。



如表9-5所示是改变编泽环境前,后的中断处理速度的对比,可以看出在SDRAM 中代码的执行速度比在Flash中大约快4倍。

5实例总结

本实例主要讲述了中断寄存器的设置和不同中断处理的方法及优化。在ARM嵌入式系统中,可以通过中断控制器接受可能多达几十个外部中断源的中断请求,而ARM内核只有FIQ和IRQ两路外部中断,所以,需要用中断控制器管理多个外部中断源,选择其中一个中断,通过FIQ或IRQ向ARM内核发出中断请求。因此,以下事项值得注意。

    ·ARM中断分为2大类,即普通中断IRQ和快速中断FIQ,FIQ的优先级要高于IRQ。在ARM的中断源中,每个中断源都可以任意定义为JRQ或FIQ方式。

    ·ARM中断寄存器中断模式寄存器可以设置2个中断源为IRQ或FIQ方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值