VxWorks下龙芯3A中断控制技术的研究

徐骞



摘 要: 中断控制是嵌入式操作系统VxWorks正常运行的基础,是其具有高实时性的保障。针对VxWorks系统下中断控制驱动开发难度大、应用广等特点,首次提出了VxWorks系统中断控制驱动分层模型。基于该模型提出了VxWorks下中断控制驱动软件的设计方法,并基于该方法实现了VxWorks下国产龙芯3A处理器中断控制驱动软件的开发。最后提出一种优化龙芯3A中断控制性能的方法,大大缩短了中断响应时间,提高了系统的性能。
关键词: 中断控制; VxWorks; 龙芯3A; 驱动软件
中图分类号: TN876?34; TP311.1 文献标识码: A 文章编号: 1004?373X(2017)14?0036?04
Abstract: Interrupt control is the base of normal running of the embedded operating system VxWorks and is a safeguard of high real?time performance. A drive hierarchical model of interrupt control on VxWorks is proposed aiming at the characteristics that the drive development of interrupt control on the embedded operating system VxWorks has great difficulty and its wide application. According to this model, a design method of interrupt control drive software based on VxWorks is put forward. The interrupt control drive software of Loongson 3A have was developed successfully with the method. A method to optimize the Loongson 3A interrupt control performance is presented. It greatly shortens the interrupt response time, and improves the performance of the system.
Keywords: interrupt control; VxWorks; Loongson 3A; drive software
VxWorks操作系统是风河公司推出的一种嵌入式实时操作系统, 以其高性能、高可靠性、高实时性等特点成为实时操作系统中最具特色的系统之一。其广泛地应用在通信、军事、航空、航天等高端技术及实时性、扩展性要求极高的领域中[1]。龙芯系列处理器芯片是龙芯中科技术有限公司研发的具有自主知识产权的处理器芯片,产品包括龙芯1号、龙芯2号和龙芯3号三个系列[2]。龙芯3A处理器是龙芯3号处理器的第一款产品,主要面向高性能计算机、服务器和高端桌面应用,是一款实现64位MIPS Ⅲ指令集的高性能四核處理器芯片,片内集成了HT控制器、PCI/PCIX等接口,最高工作主频[3]可以达到1 GHz。VxWorks作为一个实时嵌入式操作系统,通常采用中断的方式来满足系统实时性的要求。因此,中断控制驱动的实现对于VxWorks操作系统的开发是至关重要的[4]。本文在研究VxWorks系统中断控制技术的基础之上,描述了VxWorks下龙芯3A中断控制驱动的设计方法和实现过程,并对其中断控制性能进行了优化。
1 龙芯3A的中断控制
龙芯3A的中断通路示意图如图1所示。南桥的中断控制器在接收到外部设备的中断申请后,发出中断请求,经过PCIE根控制器转化后发送到HT总线上,然后被HT控制器得知,HT控制器根据接收到的中断信息来设置自己的中断状态寄存器,之后按照既定的配置发出中断信号至CPU的中断路由配置模块,最后按照中断路由模块的设置将中断信号送到某个CPU核上[5]。
2 VxWorks下的中断控制
2.1 中断控制驱动分层模型
VxWorks下中断控制有一个层次的划分,一些中断控制器的输入是其他中断控制器的输出,因此可以将中断控制驱动抽象为三层,具体情况如图2所示。
图2中,第一层为CPU指定的中断控制驱动,与CPU的体系架构密切相关,主要包括CPU一级与中断相关的配置,如中断路由等;第二层中断控制器直接与第一层CPU中断路由模块相连,并作为其中断输入,最常见的如8259中断控制器[5];第三层中断控制作为第二层的中断输入,一般与外部设备密切相关,主要实现了中断服务程序的挂接和中断的响应处理,如传统的PCI设备中断控制就属于该层[6]。
2.2 中断控制驱动设计方法
基于VxWorks下中断控制驱动分层模型,本文提出了VxWorks下中断控制驱动的设计方法,主要包括中断路由配置、初始化中断控制器、挂接中断服务程序和中断响应处理四个部分,具体流程如图3所示。
3 龙芯3A中断控制驱动的实现
根据VxWorks下中断控制驱动的设计方法,可以将龙芯3A中断控制驱动的实现主要分为四个步骤,配置中断路由、初始化中断控制器、挂接中断程序以及中断响应处理。
3.1 配置中断路由
龙芯3A下通过配置中断路由模块来确定中断信号最终分配到哪个CPU核上[7?8],中断路由模块示意图如图4所示。
图4中,中断路由配置模块有32个外部中断源,以统一方式进行管理。龙芯3A集成了4个处理器核,任意一个中断源都可以通过软件配置选择期望中断的目标处理器核,进一步中断源可以选择路由到处理器核4个中断INT0~INT3中的任意一个,即图4所示的CORE0~CORE3的IP0~IP3。在32个中断源中,最重要的是与HT总线相关的中断源,龙芯3A下绝大部分外部中断都是通过HT中断引脚输入至CPU,通过设置相关的中断路由寄存器可以对这些中断源进行路由配置,部分相关代码如下:
STATUS sysIntRouteSet()
{ /*将HT0相关中断路由至CPU CORE0 INT1*/
MIPS_SB64 _IO_base_regs_addr(HT0_INT0_ADDR,0x21);
MIPS_SB64 _IO_base_regs_addr(HT0_INT1_ADDR,0x21);

/*将HT1相关中断路由至CPU CORE0 INT1*/
MIPS_SB64 _IO_base_regs_addr(HT1_INT0_ADDR,0x21);
MIPS_SB64 _IO_base_regs_addr(HT1_INT1_ADDR,0x21);
…}
3.2 初始化中断控制器
龙芯3A下,中断控制器位于南桥上,默认配置为8259模式,初始化中断控制器主要包括设置中断控制器和使能中断控制器两个部分。
3.2.1 设置中断控制器
龙芯3A中断控制器可用的中断输入有8个,INTA#~
INTH#,输出的中断号为irq0~irq15,每个中断输入与输出中断号的映射关系可以通过设置相关寄存器来完成,如图5所示。
图5中,可以先往0xC00写入一个值表示配置哪个中断输入,然后写0xC01表示将中断输入映射至哪个irq号。例如要把INTC#对应的中断号设置为irq6,则操作为:先往0xC00写入2,再往0xC01写入1即可。
3.2.2 使能中断控制器
中断配置寄存器都是以位的形式对相应的中断线进行控制。中断控制器使能的配置主要有三个寄存器:Intenset,Intenclr和Inten。Intenset设置中断使能,Intenset寄存器写1的位对应的中断被使能;Intenclr清除中断使能,Intenclr寄存器写1的位对应的中断被清除;Inten寄存器读取当前各中断使能的情况。
3.3 挂接中断服务程序
VxWorks系统下,需要实现类函数func{vxbIntCtlrConnect}为硬件配置指定的中断并搭接相应的中断服务程序以及中断输入,该函数主要通过调用系统函数intCtrlISRAdd()完成相关工作[9]。龙芯3A中断控制驱动中实现的类函数名为vxbMipsSbIntCtlrConnect,其部分代码如下:
LOCAL STATUS vxbMipsSbIntCtlrConnect()
{ …
/* 获取中断输入并确认其有效 */
if(ERROR == intCtlrPinFind(pDev,index,pIntCtlr,&isrHandle))
return (ERROR);
/*为指定的中断分配中断服务程序和参数*/
if (intCtlrISRAdd(&pVxbPMipsSbIntCtlrDrvCtrl?>isrHandle, inputPin,pIsr, pArg) != OK)
return (ERROR);
… }
3.4 中断响应处理
龙芯3A处理中断的流程,从外部中断请求到内核软件对中断的处理,其过程都是一样的,如图6所示。
中断发生时,CPU会设置Cause寄存器的Excode域及相关的IP位[10]。进而进入软件处理过程,软件通过查询Excode域来确定是哪一种类型的异常,并选择使用何种异常处理例程。如果是外部硬件中断,就会进入相应的中断分发函数。中断分发函数再根据Cause寄存器的IP位来进行一级中断分发,然后再根据中断号的位域来进行二次分发,最后执行具体的中断操作处理程序[11]。
4 驅动测试与优化
4.1 驱动测试
基于龙芯3A的硬件平台,对中断控制驱动进行测试,能够成功运行VxWorks系统,如图7所示。
4.2 驱动优化
在驱动开发的设置中断控制器环节,默认配置情况下,龙芯3A平台的设备中断输入与中断号的映射关系如表1所示。
从表1中可以看出,中断号irq6对应的中断输入过于集中,即挂接在中断输入INTC上的设备过多,这样会导致系统中断响应的时间过长,从而影响系统的性能。可以在驱动软件设置控制器的环节对其进行优化,将其中的USB设备包括OHCI和EHCI进行分流,将这些设备映射到其他中断号上。修改后的软件经过测试,系统的中断响应时间大大缩短,性能显著提升,测试结果如表2所示。
5 结 语
本文提出一种VxWorks系统中断控制驱动分层模型,基于该模型给出了VxWorks下中断控制驱动软件的设计方法,并通过该方法实现了VxWorks下国产龙芯3A处理器中断控制驱动软件的开发。另外,本文还提出了一种优化VxWorks下龙芯3A中断控制性能的方法,通过该方法可以大大缩短系统中断响应时间,提高系统的性能。目前,VxWorks下龙芯3A中断控制驱动软件已成功应用于某通信系统项目中,在应用的过程中,驱动程序工作稳定,性能可靠,满足实际应用的需求。
参考文献
[1] 陈怀民,王哲,程鹏飞,等.VxWorks下设备驱动程序开发技术研究[J].现代电子技术,2015,38(10):38?41.
[2] HU Weiwu,ZHANG Fuxin,LI Zusong. Microarchitecture of the Godson?2 processor [J]. Journal of computer science and technology,2005, 20(2): 243?249.
[3] 中科院计算技术研究所.龙芯3A处理器数据手册[M].北京:龙芯中科技术服务中心有限公司,2010.
[4] 王迪.基于X86体系结构VxWorksSMP调度和中断机制研究与优化[D].长沙:国防科技大学,2009.
[5] 李祖松,许先超,胡伟武,等.龙芯2号处理器的同时多线程设计[J].计算机学报,2009,32(11):2265?2273.
[6] 徐立松,于淼,李佩玥,等.基于VxWorks的VME从板驱动设计与实现[J].现代电子技术,2013,36(6):79?82.
[7] 金浩,韩江洪,李阳铭.基于ARM的嵌入式系统中断处理机制研究[J].现代电子技术,2005,28(22):1?3.
[8] 周启平,张扬.VxWorks下设备驱动程序及BSP开发指南[M].北京:中国电力出版社,2004.
[9] 付月生,王丽.基于VxBus的驱动程序架构分析[J].计算技术与自动化,2012,31(2):98?102.
[10] Wind River. VxWorks device driver developer′s guide Vlolume2 [M]. US: Wind River, 2008.
[11] Wind River. VxWorks architecture supplement, 6.7 [M]. US: Wind River, 2008.