基于VxWorks和DSP的多PCI总线设备驱动程序的研究与实现

2022-03-23 09:25:21 | 浏览次数:


打开文本图片集

摘 要:为解决导航信号模拟源在分时系统下的实时性差、数据传输的时效性等问题,基于TMS320C6416的PCI接口控制模块,研究了实时操作系统VxWorks下PCI总线设备驱动程序的开发方法。依据导航信号模拟源的结构和组成设计,通过动态加载的方式扫描和配置PCI总线设备,使得模拟源中的硬件设备可以根据需要裁剪,并很好的完成了多PCI总线设备的初始化和配置,同时为保证数据传输时效性,保证模拟源的稳定性,实现了DSP主模式下的DMA数据传输。

关键词:VxWorks PCI总线 驱动程序 TMS320C6416

中图分类号:TP31 文献标识码:A 文章编号:1674-098X(2015)07(b)-0044-03

Abstract:Navigation signal generator based on time-sharing opeating system has certain disadvantage, such poor real-time character and low speed of data transferring. To solve these problems, the research of developing driver for device of PCI bus is implemented. According to the design of generator, the driver uses the method of dynamic loading and searching of PCI bus device, and implements the initializing and configuring of multiple-PCI device and DMA data transferring base on the DSP maser Mode.

Key words:VxWorks;PCI Bus;Driver;TMS320C6416

导航信号模拟源模拟真实的卫星信号在空间传播,最后到达导航终端的无线信号。用于信号产生的所有信号参数和数据都来源于算法模型计算出来的,所以,信号模拟源在工作时,存在大量的数据传输,同时必须按照严格的时序进行。在采用Windows操作系统来完成任务的分配和调度时,由于操作系统自身占有过多系统资源以及无法快速响应中断,致使设备在大数据量的情况下,出现工作状态不稳定的情况。VxWoks是高实时性的嵌入式系统,能够很好的满足信号模拟源对实时性和数据传输的要求,同时基于TMS320C6416的PCI控制接口使用PCI总线来实现数据的传输。

1 VxWorks和PCI总线接口

1.1 VxWorks

VxWoks作为高性能嵌入式实时操作系统(RTOS),具有良好的可靠性、可裁剪性、互操作性和实时性。其主要组成包括以下几个部分:高性能的内核Wind、板级支持包(BSP)、文件系统、I/O系统、网络工具及目标代理和实例库。

BSP向VxWorks提供与硬件交互的基本接口,负责在加电时完成硬件的初始化,为VxWorks访问硬件驱动程序提供支持,并在VxWorks中集成了与硬件相关的软件和部分与硬件无关的软件,因此,BSP与设备驱动程序密切相关。

VxWorks设备驱动程序是提供给系统直接控制下层硬件设备的一个软件接口,应用程序必须通过驱动程序才能对硬件进行操作。BSP、设备驱动程序与VxWorks系统的关系如图1所示。

1.2 PCI接口控制模块结构

每个PCI设备有三种物理空间:配置空间、存储器空间和IO空间。配置空间是一容量为256B并具有特定记录结构或模型的地址空间。

当计算机加电时,配置软件(一般为BIOS)扫描PCI总线,并取得设备的配置空间,以进行系统配置。为实现PCI设备的正常加载和操作,PCI设备必须实现PCI协议规定的配置空间内容,如表1所示。

2 导航信号模拟源组成

导航信号模拟源需要提供很多频点的信号,一块基带板卡最多提供四个频点,故需要多个基带板卡来组成信号的生成部分,通过PCI总线将所有的基带板卡以设备的形式挂接在零槽监控板卡上,由监控软件来统一控制和管理基带板卡,导航信号模拟源组成图如图2所示。

基带板卡上的数据处理器使用TMS320C6416来完成。TMS320C6416是TI公司的低功耗定点处理器,在片内集成了支持主/从模式的PCI接口,通过该PCI总线能够实现DSP与PCI主机的互联,并且通过PCI接口,主机可以访问DSP整个片内RAM、集成外设以及片外存储器。

基于DSP的PCI总线DMA数据传输主要有两种模式:一种是主模式传输,使用PCi卡上DSP的DMA控制器;一种是从模式传输使用PCI主机主板的DMA控制器。由于主板DMA控制器的DMA通道数目有限,并且主板DMA控制器从外设读取数据需要两次地理的操作,并且还需要插入等待状态,所以,从模式的DMA传输要求一定的中断延迟时间,并且当DMA控制器到达缓冲区的末端时,需要快捷的对他重新编程使用另外一个缓冲区。

针对设计需求,系统采用DSP主模式,并将C6416内部RAM的一部分作为数据传输空间,从而满足PCI总线的高速数据传输。

3 PCI设备驱动设计与实现

PCI设备驱动基于VxWorks系统开发,包括用户应用程序和PCI驱动程序,工作在同一地址空间。VxWorks是一种微内核结构,采用单一的实地址空间模式,不区分核心态和用户态,任务间可以直接共享变量,不需要通过内核在不同的地址空间复制数据。用户程序通过对设备文件进行文件操作,实现与驱动程序的通信。

PCI设备驱动程序实现的关键是如何完成硬件操作,包括设备初始化、端口的读写操作、中断设置和中断服务程序以及对内存的直接读写。PCI设备驱动程序一般包括三个模块:初始化模块、中断处理模块及功能模块。

3.1 多PCI设备的加载

单个PCI设备时,只需要简单的考虑单个设备的地址映射以及中断使用,而在多个PCI设备驱动设计时则需要考虑不同设备在地址映射以及中断复用时是否会出现冲突,从而出现地址错乱、中断混乱等异常情况,以至于系统的崩溃。所以多PCI设备的初始加载中的地址映射以及中断复用问题必须很好的解决。

由于VxWorks中只包含了基本MMU(Memory Management Unit 内存管理单元),所以不会对PCI设备进行自动加载,需要用户加载和配置设备。用户可以通过静态指定和动态查找两种方法来配置PCI设备所占用的内存映射空间,把PCI总线上的物理资源映射成CPU的本地资源。PCI设备在VxWorks下加载步骤如下:

通过调用pciFindDevice来实现PCI总线设备的动态查找。

本信号模拟源中使用的PCI设备数目是不确定的,需要在系统启动时才可以确认。硬件设计时使用了DSP中的PCI接口控制器,厂商ID为0x104C,设备ID为0xA106,具体实现代码如下:

#define PCI6416_VID 0x104C

#define PCI6416_DID 0xA106

if(pciFindDevice(PCI6416_VID,PCI6416_DID,ix,&pciBus,&pciDevice,&pciFunc)!=OK){……}

取得PCI设备的配置数据。取出各板卡基地址寄存器,每块板卡最多有6个基地址寄存器。使用函数如下:

pciConfigInLong(pciBus,pciDevice,pciFunc,PCI_CFG_BASS_ADDRESS_0,&(MemBaseAddr[ix][0]));

配置PCI的命令字使能I/O空间、存储器空间和总线主设备功能,并链接中断服务程序。

将PCI设备的存储器空间映射到MMU单元的内存映射表中。

PHYS_MEM_DESC sysPhysMemDesc[] =

{……

{

(void *)CPU_PCI_MEM_ADRS_L,//需要映射的虚拟逻辑地址

(void *)CPU_PCI_MEM_ADRS_P,//硬件板卡上的实际物理地址

0x2000,//内存区的大小

VM_STATE_MASK_VALID"VM_STATE_MASK_WRITEABLE

|VM_STATE_MASK_CACHEABLE,//内存管理使能掩码

VM_STATE_VALID|VM_STATE_WRITEABLE,//内存管理状态值

}

……

}

根据配置寄存器初始化设备。

对C6416设备的存储器空间读写。

编写中断服务程序。

3.2 DMA方式的数据传输

在主模式下,数据传输时使用的相关寄存器包括DSP主地址寄存器(DSPMA)、PCI主地址寄存器(PCIMA)以及PCI主模式控制寄存器(PCIMC)。PCI接口控制模块主模式结构图如图3所示。

从DSP向PCI从设备传输时,DSP将PCIMC寄存器中的START字段置为有效,,PCI接口模块启动主模式写操作,由C6416的EDMA负责从源地址向写FIFO搬移所要求的数据,一旦FIFO得到有效的数据,接口控制模块会向外发出PCI总线请求,并将FIFO中数据向PCI从设备传输。当需要传输的所有数据都送入FIFO后,DSP内部的数据传输结束,通过使能PCIIEN寄存器中的MASTEROK位产生DSPINT中断,通知DSP一次主模式的传输结束。主模式数据传输流程如图4所示。

在数据传输过程中,数据传输的启动和结束都通过中断的方式通知DSP或者PCI从设备。在中断发生时,DSP-C6416首先读取PCI中断源寄存器(PCIIS),判断中断源,并清除相应bit位。当前中断为HOSTSW时,如果上次传输结束,DSP将重新启动PCI总线的数据传输;MSTEROK中断则用来标志一次传输的结束,此时C6416向RSTSRC寄存器中的INTREQ位写1,对应的INTA管脚上产生中断信号,通知PCI主机数据可用。

4 结语

该文使用WorkBench3.0开发环境,开发了实时操作系统VxWorks下的PCI设备驱动程序,可以支持多块同类PCI设备的动态加载,同时采用有效的数据传输方式,保证了模拟源对数据的实时性要求。在实际使用中,导航模拟器的工作频度为20ms,其最大可模拟信号通道数为36路。在模拟器全负载的情况下,仍可以很好的在有效时间内完成信号参数和信息数据的传输。

参考文献

[1]TMS320C6000 DSP Peripheral Component Interconnect (PCI) Reference Guide. Texas Instruments Incorporated, 2004.

[2]李方慧,王飞,何佩琨.TMS320c6000系列DSP的原理与应用[M].北京:电子工业出版社,2003.

[3]周启平,张扬.VxWorks下设备驱动程序及BSP开发指南[M].北京:中国电力出版社,2004.

[4]尹勇,李宁.PCI总线设备开发宝典[M].北京:北京航空航天大学出版社,2005.

推荐访问: 总线 设备驱动程序 研究 VxWorks DSP