EDN首页   博客首页

日志档案

发表于 2006-10-19 16:37:21

4

标签: 无标签

ARMS3C44BOX中断开发方法[原创]

[原创]

1 S3C44BOX微处理器简介

S3C44BOX微处理器是由Samsung Electronics Co.,Ltd为手持设备设计的低功耗、高度集成的基于ARM7TDMI核的微处理器。ARM7TDMI是目前应用最广泛的ARM家族成员之一,是一款经典的通用32位微处理器核,采用精简指令系统(RISC)和流水线结构。S3C44BOX具有丰富的内置部件,包括:8KBcache,内部SRAMLCD控制器,带自动握手的2通道UART4通道DMA,系统管理器(片选逻辑,FP/EDO/SDRAM控制器),代用PWM功能的5通道定制器,I/O端口,RTC8通道10ADC,Ⅱ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个中断源的中断请求 。这些中断源来自DMAUARTSIO等芯片内部外围或接口芯片的外部引脚。

中断控制器的任务是在片内外围和外部中断源组成的多重中断发生时,经过优先级判断选择其中的一个中断,通过FIQ(快速中断请求)或IRQ(通用中断请求)向ARM7TDMI内核发出FIQIRQ中断请求。

 

实际上最初ARM7TDMI内核只有FIQIRQ两种中断,其他的中断都是各芯片厂家在设计芯片时定义的,这些中断根据中断的优先级高低来进行处理。特别的是,为了解决一般的中断模式在进入所需的服务程序前需要很长的中断反应时间的问题,S3C44BOX提供了一种新的中断模式——矢量中断模式。它具有CISC结构微控制器的特征,能够缩短中断反应时间[4]

3 S3C44BOX中断处理流程

S3C44BOX处理器的中断处理与其他处理器的处理模式基本上是一致的,只是由于引入了几种不同的处理器模式,使中断处理变得更容易。中断处理流程图如图1所示。其典型步骤如下:

1步:保存现场。当系统出现中断时,处理器首先要做的就是保存现场,这一过程包括:保存当前的PC值到lr(链接寄存器)中,保存当前程序运行状态CPSR到程序状态保存寄存器SPSR中。由于ARM7TDMI采用了三级流水线结构,此时的PC值实际上等于当前指令地址加上8ARM指令时),则返回时还需要将保存的PC值减4,得到当前指令的下一条指令。

2步:模式切换。设置当前程序状态CPSR中相应的位,使处理器进入相应的执行模式。如当进入FIQ模式时,禁止FIQ中断。

3步:获取中断源。如IRQ中断,都从向量地址0x18处开始执行,通常在此地址处放一条跳转指令,跳转到中断程序。

4步:处理中断。获取中断源后,通过中断向量表获取相应中断的处理程序入口,调用对应的中断处理函数。

5步:恢复现场,中断返回。返回时需要恢复处理器模式,包括恢复中断处理用到的所有寄存器、恢复被中断的程序状态到当前程序状态CPSR,并跳转到被中断的主程序。

保存现场

模式切换,进入特定模式

获取中断源

处理中断

恢复现场,中断返回

 

1 中断处理流程图

4中断处理程序实例

    下面以可重入外部中断处理程序[5](运行时仍可响应外部中断)为例,说明S3C44BOX的中断处理开发方法。程序中用到了S3C44BOXIRQ中断服务挂起寄存器I_ISPR,用来表示当前正在被响应的中断。

整个中断程序是在武汉创维特信息技术有限公司开发的ADTARM  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

系统分类: ARM   |   用户分类: ARM   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1421)    回复(4)  

投一票您将和博主都有获奖机会!

最新评论

  • cocappjj

    2006-10-20 17:41:50

    支持!

  • chenkun

    2006-10-30 16:02:10

    我也在学!

    都是ARM7

  • justin

    2006-10-19 16:58:34

    强烈支持原创

  • jim

    2006-10-20 9:41:00

    不错,正好赶上