Vxworks基于S3C44B0X处理器的中断处理设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第7卷 第18期 2007年9月167121819(2007)1824750204 

科 学 技 术 与 工 程

Science Technol ogy and Engineering

 Vol .7 No .18 Sep.2007

Ζ 2007 Sci .Tech .Engng .

Vxworks 基于S3C44B0X 处理器的

中断处理设计

徐 伟 鞠晓东

(中国石油大学资源与信息学院,北京102249)

摘 要 嵌入式微处理器和嵌入式实时操作系统是嵌入式系统的两大核心技术。详细分析了wind R iver 公司的嵌入式实时操作系统Vx works 中断处理机制,并针对Vx works 中断处理机制对于S AM S UNG 公司AR M7微处理器芯片S3C44B0X 的特殊性,给出了Vx works 基于S3C44B0X 处理器的中断实现。关键词 Vx works S3C44B0X 中断处理 中断服务程序中图法分类号 TP316.89; 文献标识码 

A

2007年5月18日收到

国家自然科学基金项目(10534040和

40574049)资助

第一作者简介:徐 伟(1984—),男,湖南南县人,硕士研究生,研究方向:智能检测技术。

硬件中断对于实时系统是至关重要的,硬件中断处理机制是多任务环境运行的基础,是系统实时性的保证。Vx works 作为一款优秀的实时嵌入式操作系统,它采用中断的方式通知外部事件的发生。因此,熟悉其中断的处理过程对于Vx works 操作系统的开发至关重要。本文详细讨论了Vx works 的中断处理机制,给出了ARM7微处理器芯片S3C44B0X 中断的具体实现。

1 S3C44B0X 中断概述

AR M7处理器支持7种类型的异常:复位(Re 2set )、未定义指令(Undefined I nstructi on )、软件中断(S W I )、预取中止(Prefetch abort )、数据中止(Data abort )、普通中断请求(I nterrup t Request )和快速中

断请求(Fast I nterrup t Request )。异常出现后,处理器会按固定的优先级强制从异常类型对应的固定存储器地址开始执行程序。AR M7微处理器芯片S3C44B0X 异常向量地址如表1所示。

AR M7微处理器芯片S3C44B0X 的中断控制器

可以接收来自30个中断源的请求,其中4个外部中断(E I N T4/5/6/7)共享1个中断源。如果将26个中断源都定义为I RQ 中断,当同一时刻多个中断请求产生时,可以通过读取Pending 寄存器来确定哪些中断发生了,并对产生的中断依次进行处理,通过软件的方式决定中断服务的优先级[1]

。注意:在

某个中断的I SR 结束时,必须将I_I SPC 寄存器中相

应位置1来清除中断位。

表1 S3C44B0X 异常向量表优先级

中断向量入口地址

异常中断类型

1(最高级)

0x00000000复位20x00000010数据访问中止30x0000001C 快速中断请求(F I Q )40x00000018外部中断请求(I RQ )50x0000000C 指令预取中止60x00000004未定义指令6(最低级)

0x00000008

软件中断(S W I )

2 Vxworks 中断处理机制

硬件中断处理是实时操作系统中最重要的部

分,为了尽快响应中断,Vx works中断处理程序在所有任务上下文之外的一个特殊上下文内执行,没有任务控制块(TCB),因此中断的发生只会引发一些关键寄存器的存储,而不涉及任务上下文的切换,从而减小了中断延时[2]。

Vx works中所有的中断服务程序使用相同的中断堆栈。该堆栈的定位和初始化由系统在启动时根据指定的配置参数完成。为能够处理最坏情况下的中断嵌套,必须分配足够大的中断堆栈空间。

Vx works中断处理完成以下工作:保存CP U中断的上下文、调用中断服务程序(I SR)、中断服务程序返回后,恢复中断的上下文。

2.1 中断向量表的生成与实现

中断处理使用中断向量表来提供中断级的服务,中断服务程序与中断向量相连接,中断向量表含有中断向量对应的中断服务程序的地址。

Vx works将中断向量表定位在RAM中,基地址为VEC_BASE_ADRS,在config A ll.h中定义,一般为RAM存储器的起始地址。在系统启动初始化时,由int V ec BaseSet()函数设置向量表的基地址。向量表地址设定后,需要初始化指定中断的缺省处理函数。Vx works在映像的代码段建立了一张中断缺省函数表,函数exc Vec I nit()根据这张表来设置向量表的各中断向量值。需初始化的向量表范围由LOW_VEC和H I GH_VEC确定,在exc A rchL ib.h中定义[3]。

2.2 中断服务程序的注册

Vx works在int L ib.h中提供int Connect()函数将中断服务程序(I SR)和中断向量表相关联。中断发生时,int Connect()将创建一小段代码,保存必要寄存器、设置堆栈入口,然后以指定的参数在中断级调用中断服务程序,完成相应的中断服务。从调用函数返回时,int Connect()函数恢复寄存器和堆栈,然后退出中断[4]。int Connect()函数原型如下: ST AT US int Connect(VO I D F UNCPTR3vect or, VO I D F UNCPTR r outine,int para m)

其中vect or为相关中断向量在向量表中的偏移地址,r outine为响应中断C函数指针,para m是传递给中断服务程序的参数。

一般用户可见的都是硬件中断号,需要将中断号转换为中断向量偏移。Vx works提供相关的几个宏:I V EC_T O_I N UM和I N UM_T O_I V EC。宏I V EC_ T O_I N UM将中断号(number)转换成中断向量地址,宏I N UM_T O_I V EC则将中断向量地址转换为中断号。宏定义在iv A rch.h中实现。

3 S3C44B0X处理器中断实现

3.1 中断向量表的安装

对于AR M体系结构,Vx works支持7种异常中断,默认的异常中断向量地址和中断服务程序如图1所示。操作系统启动后,将RAM存储器空间重映射到0地址空间,因此异常入口不是在Flash的0地址开始的空间中,而是在运行时写入到经过Re map 后的RAM中

图1 Vx Works AR M中断缺省向量表

对于S3C44B0X来说,它有固定的存储Bank地址,Flash的基地址位于0x0地址,RAM基地址也固定在0x0c000000处,不能将程序运行空间的起始地址映射到0地址,即不支持地址重映射操作。为了解决这个问题,就需要将异常入口硬编码到系统启动处,即Flash的开始处。r om I nit.s是在地址0处开始执行的,可以在r om I nit.s开始处添加异常入口函数。代码如下,其中0x14保留,0x1c在Vx works 中没有使用。

1574

18期徐 伟,等:Vx works基于S3C44B0X处理器的中断处理设计 

相关文档
最新文档