APP下载

VxWorks下基于ML507嵌入式系统的中断处理

2012-04-23夏伟杰

电子科技 2012年1期
关键词:信号量处理程序服务程序

单 寅,夏伟杰

(南京航空航天大学电子信息工程学院,江苏南京 210016)

VxWorks作为目前较为主流的嵌入式操作系统,被广泛运用于航空与控制等方面,基于某型号飞机的虚拟仪表的GPU板卡,采用VxWorks作为顶层控制,其中采用中断机制与外界通信是一个重要手段,由于硬件环境为Virtex5 FXT型号的FPGA,CPU为IBM公司Powerpc440x5处理器,理解其特有的架构,并编写相应的中断处理程序,对于操作系统的完整移植以及上层程序的正常运行至关重要。

1 Virtex5的中断响应过程

FPGA内嵌的IBM PPC440处理器有两个中断引脚,一个关键异常引脚与一个外部中断引脚。在构建嵌入式系统时共有两种处理中断的方式:(1)外部中断直接引入外部中断引脚。(2)为能处理较多的中断,引入一个外扩的中断处理器XINTC,中断处理器连接PPC440外部中断引脚,中断控制器共可处理共32个优先级的中断,从0号中断开始优先级逐次降低。

1.1 中断控制器介绍

中断控制器由中断核和总线接口组成,中断核可与响应的逻辑接口总线配合,挂接在PLB总线上。图1为中断控制器(INTC)响应中断的原理图。通过PLB总线下INTC Interface向寄存器写值,使能相应中断位。连接在INTC的中断源产生中断信号Intr,被INTC检测到后,因为寄存器相应中断位被使能,就会产生Irq信号给PPC440外部中断引脚[1]。

中断控制器主要有几个重要的寄存器,如图1所示,Interrupt Status Register(ISR),Interrupt Enable Register(IER),Master Enable Register(MER)。MER是一个可读写寄存器,向MER写1才能允许向外输出Irq信号。ISR是一个32位只读寄存器,相应位为1代表相应的中断被使能。IER是个32位的可读写寄存器,向相应位写1可以将ISR相应位置1。

图1 中断控制器原理框图

1.2 INTC驱动的中断处理机制

中断驱动实际上是在内存中构造一个中断向量表,中断控制器的数据结构如下:

typedef struct{

u16 DeviceId;/**中断控制器对应的设备号*/

u32 BaseAddress;/**中断控制器基地址*/

u32 AckBeforeService;/**读取ISR寄存器的值以判断正在触发的中断号*/

u32 Options;/**中断控制器配置*/

XIntc_VectorTableEntry HandlerTable[XPAR_INTC_MAX_NUM_INTR_INPUTS];

}XIntc_Config

HandlerTable[XPAR_INTC_MAX_NUM_INTR_INPUTS]这一结构体数组即为中断向量表,宏XPAR_INTC_MAX_NUM_INTR_INPUTS为系统中所有中断的总数。

在Xilinx提供的BSP中,底层操纵中断控制器的驱动函数为XIntc_Connect和XIntc_Enable,即IntConnect与 IntEnable函数具体实现是 XIntc_Connect与XIntc_Enable,void XIntc_Enable(XIntc* InstancePtr,u8 Id),InstancePtr是中断控制器的地址,Id是想要使能的中断号

……

Mask=XIntc_BitPosMask[Id];

CurrentIER=XIntc_In32(InstancePtr- >BaseAddress+XIN_IER_OFFSET);

XIntc_Out32(InstancePtr- >BaseAddress+XIN_IER_OFFSET,

(CurrentIER|Mask));

通过此操作,给IER寄存器相应位写1,使能相应中断。int XIntc_Connect(XIntc* InstancePtr,u8 Id,XInterruptHandler Handler,void*CallBackRef),Handler是用户自己的中断服务程序,可以是任何操作,CallbackRef是要传递给服务程序的参数。

……

InstancePtr- >CfgPtr- >HandlerTable[Id].Handler=Handler;

InstancePtr- >CfgPtr- >HandlerTable[Id].CallBackRef=CallBackRef;

由此根据中断号Id将参数与程序放入中断注册表中。在BSP的sysInterrupt.c文件中,将这两个函数封装在IntConnect与IntEnable内,提高了程序的可移植性。

2 PPC440中断处理

2.1 PPC440相关寄存器介绍

Powerpc440处理器是一个32位精简指令集的CPU,与异常处理相关的寄存器有IVOR0~IVOR15,这16个寄存器用于存储异常向量入口的偏移地址,其中IVOR4对应的是外部异常,也就是文中所关心的异常。SRR0和SRR1用于保存和恢复机器状态。MSR是机器状态寄存器,用于指示处理器的状态[2]。

图2为机器状态寄存器(MSR)示意图。CE为关键异常位,EE为外部异常位。这里主要关注的是EE,通过将EE位置1,可以使能外部中断异常。通过查看Powerpc汇编指令集,对MSR寄存器操作的指令为mtmsr和mfmsr,其中mtmsr为读出MSR中内容,mfmsr为向MSR写入内容。在系统开始时初始化异常向量表,首先应将对应的异常向量装入储存异常向量入口的寄存器中。

图2 机器状态寄存器

2.2 异常处理程序

异常只能发生在处理器的内核中,在总线的中断处理中没有异常这个概念。异常是指处理器有意或无意的停止正常的运行,如意外重启、软件中断等。而在PPC440中,所有的外部中断被当做一个特殊的异常来进行处理。当发生异常/中断时,系统自动跳转到异常向量表(Interrupt-handler Table)中。异常向量表将异常/中断与其异常向量相关联,异常/中断通过异常向量表找到自己的向量。通过异常向量在中断控制器中找到对应的处理程序,这样就与前面所说的总线中断控制器对应。通过excIntConnect函数将外部中断与异常处理程序挂接,excIntConnect((VOIDFUNCPTR*)_EXC_OFF_INTR,(VOIDFUNCPTR)ExternalISR),_EXC_OFF_INTR这个宏定义在VxWorks6.5安装目录下Powerpc处理器对应的excPpcLib.h文件中,代表外部异常向量;ExternalISR为异常处理程序,此处理程序主要负责对中断控制器进行发出中断后的操作,具体操作为利用IO函数XIo_Out32和XIo_In32读写各个中断寄存器,中断优先级从高到低检测哪个中断是被激活的,通过向IAR寄存器相应位写1可以清除中断请求。

如图3所示,程序首先进入异常向量表中注册的Xintc_DeviceInterruptHandler,该服务程序是系统层的注册,然后进入HandlerTable,用户自己的服务程序通过BSP中的中断控制器驱动程序注册在这个HandlerTable中。这样就可以完成一次中断的流程。

图3 中断处理流程框图

3 中断服务程序

3.1 中断服务程序设计

由于VxWorks下中断服务程序不能调用可能引起阻塞的函数,所以处理方法是拆分中断服务程序,分为两部分:一部分专门做判断中断类型,禁止中断等,称为中断服务程序;第二部分将多数需要处理的操作,尤其是可能引起任务阻塞的操作放在此执行,称为中断服务任务。两部分间采用VxWorks特有的信号量机制通信。由于获取信号量会造成任务阻塞,中断服务程序中不能获取信号量,但可以释放信号量,从而解除等待在该信号量上的一个任务[3]。

3.2 中断服务程序性能

在调试实时系统过程中,中断程序的性能是一个重要的指标,所以在调试过程中,需要使用时间戳功能。时间戳与sysclk不同,sysclkRate可以看做内核调度的频率,一般默认较低,在本系统中为60,即每秒有60个TICK,如果修改的过高会导致CPU系统占用率过高。而时间戳与CPU的主频相关,与RTOS调度无关。sysTimestamp是通过读取计时器当前计数值来实现高精度定时的。时间戳显示的是一秒内的时间状态,溢出后就会从0开始重新计数,所以首先要确保任务运行在1 s内可以完成,否则一旦时间戳溢出,得出的数据就无意义了[4]。调试时可以使用打印两次时间戳的方式查看任务所用时间,即两次数据之差乘以频率即为任务所用时间。

3 结束语

嵌入式操作系统VxWorks现被广泛应用于各类实际工程中,其中中断处理的性能直接影响整个系统的性能。由于ML507开发板FPGA和PPC440双核的特殊性,理解基于该板卡的中断处理流程是一个难点。通过研究驱动程序的内容,对深入了解硬件与FPGA逻辑的工作原理有帮助。

[1] Xilinx,Inc.DS516[M].USA:Xilinx,Inc,2009.

[2] International Business Machines Corporation.PPC440x5 CPU CORE User's Manual[M].USA:International Business Machines Corporation,2003.

[3] 王韬,杨士中,谭晓衡.基于MPC860和VxWorks的嵌入式中断处理设计[J].电讯技术,2005(1):45-50.

[4] 陈育智,温彦军,陈琪.VxWorks程序开发实践[M].北京:人民邮电出版社,2004.

猜你喜欢

信号量处理程序服务程序
高速公路工程变更与计量支付处理程序的优化方法
SylixOS系统的中断嵌套机制研究与实现
基于C#的进程守护程序的设计
UDP穿透NAT技术实现数据唤醒车联网T-Box设备的方案
Nucleus PLUS操作系统信号量机制的研究与测试
基于C++的数控加工通用后处理程序的开发应用研究
企业危机公关管理问题分析
处理房地产纠纷中行政与民事交叉问题的正当程序
水利工程施工监理服务程序及质量控制
硬件信号量在多核处理器核间通信中的应用