繁体中文
高级搜索
 
首页 | 电子技术应用 | 行业最新动态 | 行业最新产品 | 软件资料下载 | 电路图纸欣赏 | 博客文章精选 | 电子精品论坛 | 电子技术贴吧

当前位置:首页 >> 博客文章精选 >> 嵌入式系统-博客 >> ARMS3C44BOX中断开发方法[原创]
ARMS3C44BOX中断开发方法[原创]
作者:   来源: 发表时间:2007-02-07  字号:  

[原创]

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


!注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决!
  • 上一篇: S3C44B0XCache小结
  • 下一篇: IBM采用自成形材料绝缘 芯片提速三分之一

  • >> 联系我们请给我们留言·留言本
    本站所有提供的信息软件资料均来自网络,版权及著作权归原作者所有,如果无意中侵犯了您的相关权利或触及法律法规,请给我们留言, 我们将在24小时内删除。
      浙ICP备05071687号  电子技术精品网