[原创]
1 S<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3C44BOX微处理器简介<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
S3C44BOX微处理器是由Samsung Electronics Co.,Ltd为手持设备设计的低功耗、高度集成的基于ARM7TDMI核的微处理器。ARM7TDMI是目前应用最广泛的ARM家族成员之一,是一款经典的通用32位微处理器核,采用精简指令系统(RISC)和流水线结构。S3C44BOX具有丰富的内置部件,包括:8KBcache,内部SRAM,LCD控制器,带自动握手的2通道UART,4通道DMA,系统管理器(片选逻辑,FP/EDO/SDRAM控制器),代用PWM功能的5通道定制器,I/O端口,RTC,8通道10位ADC,ⅡC-BUS接口,ⅡS-BUS接口,同步SIO接口和PLL备频器。S3C44BOX采用了一种新的总线结构,即SAMBAⅡ(Samsung ARM CPU 嵌入式微处理器总线结构)和0.25um工艺的CMOS标准宏7单元和存储编译器[1]。它的低功耗精简和出色的全静态设计特别适用与对成本和功耗敏感的应用。
2 S3C44BOX中断概述
ARM7TDMI具有外部中断(IRQ)、快速中断(FIQ)和软件中断(Software Interrupt)三种中断方式,其中外部中断和快速中断均是硬件中断。对于ARM7TDMI内核的微处理器来说,中断是作为一种异常来处理的[2]。下表说明了ARM7TDMI的中断特性[3]。
表1 中断特性表
中断向量地址 | 异常类型 | 异常模式 | 优先级(6最低) |
0x8 | 软件中断 | 管理模式(svc) | 6 |
0x18 | 外部中断(IRQ) | 外部中断(IRQ)模式 | 4 |
0x1c | 快速中断(FIQ) | 快速中断(FIQ)模式 | 3 |
S3C44BOX的中断控制器可以接收来自30个中断源的中断请求 。这些中断源来自DMA、UART、SIO等芯片内部外围或接口芯片的外部引脚。
中断控制器的任务是在片内外围和外部中断源组成的多重中断发生时,经过优先级判断选择其中的一个中断,通过FIQ(快速中断请求)或IRQ(通用中断请求)向ARM7TDMI内核发出FIQ或IRQ中断请求。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
|
3 S3C44BOX中断处理流程
S3C44BOX处理器的中断处理与其他处理器的处理模式基本上是一致的,只是由于引入了几种不同的处理器模式,使中断处理变得更容易。中断处理流程图如图1所示。其典型步骤如下:
第1步:保存现场。当系统出现中断时,处理器首先要做的就是保存现场,这一过程包括:保存当前的PC值到lr(链接寄存器)中,保存当前程序运行状态CPSR到程序状态保存寄存器SPSR中。由于ARM7TDMI采用了三级流水线结构,此时的PC值实际上等于当前指令地址加上8(ARM指令时),则返回时还需要将保存的PC值减4,得到当前指令的下一条指令。
第2步:模式切换。设置当前程序状态CPSR中相应的位,使处理器进入相应的执行模式。如当进入FIQ模式时,禁止FIQ中断。
第3步:获取中断源。如IRQ中断,都从向量地址0x18处开始执行,通常在此地址处放一条跳转指令,跳转到中断程序。
第4步:处理中断。获取中断源后,通过中断向量表获取相应中断的处理程序入口,调用对应的中断处理函数。
第5步:恢复现场,中断返回。返回时需要恢复处理器模式,包括恢复中断处理用到的所有寄存器、恢复被中断的程序状态到当前程序状态CPSR,并跳转到被中断的主程序。
保存现场 |
模式切换,进入特定模式 |
获取中断源 |
处理中断 |
恢复现场,中断返回
|
图1 中断处理流程图
4中断处理程序实例
下面以可重入外部中断处理程序[5](运行时仍可响应外部中断)为例,说明S3C44BOX的中断处理开发方法。程序中用到了S3C44BOX的IRQ中断服务挂起寄存器I_ISPR,用来表示当前正在被响应的中断。
整个中断程序是在武汉创维特信息技术有限公司开发的ADT(ARM Development Tools)嵌入式系统开发环境中完成的。
为了提高执行效率,外部中断处理程序一般用汇编指令编写。在编写可重入常规中断处理程序时,为了防止因寄存器崩溃而无法返回的情况发生,必须先把链接积存器和程序中用的工作寄存器入栈后,才开放中断;等到各寄存器出栈前,必须先关闭中断。
# ENTRY
__entry:
b ResetHandler //复位
b HandlerUndef //未定义的指令
b HandlerSWI //软件中断
b HandlerPabort //指令预取中止
b HandlerDabort //数据访问中止
b HandlerAbort //保留异常处理
b HandlerIRQ //外部中断请求
b HandlerFIQ //快速中断请求
……(略)
IsrIRQ:
SUB lr,lr,#4
STMFD sp!,{lr} //保存中断返回的PC值
STMFD sp!,{r0-r4} //备份寄存器r0-r4
SUB sp,sp,#4 //为PC预留空间
STMFD sp!,{r8-r9}
LDR r9,=I_ISPR //读取中断状态
LDR r9,[r9]
CMP r9,#0x0 //检查中断状态
……
ADD r8,r8,#4 //修改当前的中断偏移
……
LDR r9,=HandleADC // HandleADC位于中断地址向量表
起始位置
ADD r9,r9,r8
LDR r9,[r9] //从地址向量表中获取入口地址
STR r9,[sp,#8]
MOV lr,pc //保存当前PC
LDMFD sp!,{r8-r9,pc} //调用中断例程
LDMFD sp!,{r0-r4,pc} //中断返回,并恢复中断前的处理器模式
5 结束语
中断技术是处理器和系统芯片开发的重要技术。快速、高效的中断处理程序是实时多任务系统设计成功的关键。由于ARM7TDMI内核的微处理器具有相同的中断系统,因此上述中断开发方法同样适合其他ARM7TDMI 内核的CPU。
sealove518_112732726 2007-1-8 15:34
用户371870 2006-12-28 17:48
用户60745 2006-10-30 16:02
我也在学!
都是ARM7
用户1053025 2006-10-20 17:41
用户30994 2006-10-20 09:41
用户19679 2006-10-19 16:58