VxWorks下ComPactPCI总线驱动程序设计

发布者:daasddla最新更新时间:2009-08-10 来源: 电子设计工程关键字:CompactPCI总线  PCI配置  中断控制  信号量 手机看文章 扫描二维码
随时随地手机看文章

  引言

  VxWorks是美国Wind River公司专门为嵌入式处理器设计的一种模块化、高性能的实时多任务操作系统。嵌入式软件多采用交叉开发的方式,即主机运行开发工具Tonado,通过某种连接方式连接目标机,硬件平台为PC/104+架构。这里提出一种VxWorks操作系统下ComPactPCI总线驱动程序的设计及实现。该设计使用德国Kontron DT-64,它是一款高性能嵌入式计算机。采用Dual PentiLim 3 CPU,工作频率高达866 MHz,具有128 KB一级高速缓存和128 KB二级高速缓存。KontronDT-64与PC/AT标准完全兼容,并遵从PC/104+标准。具有PC/104结构的优点,适用于各种复杂的工作环境。

  2 BSP与VxWorks的关系

  板级支持包BSP(board support packet)通常是针对具体的硬件平台,是用户所编写的启动代码和部分设备驱动程序的集合。在VxWorks操作系统中,BSP是介于底层硬件环境和VxWorks之间的一个软件接口,它的主要功能是系统加电后初始化目标机硬件、初始化操作系统及提供部分硬件的驱动程序。BSP与VxWorks之间的关系如图1所示。从图1发现,BSP不是一个设备驱动程序。它只能运行于指定设备的硬件环境中,对其进行控制和初始化。这里主要阐述在PCM发送,接收模块的设计过程中,如何利用DT-64 BSP来实现PCI总线的驱动程序。

  3 总线及接口技术

  由于CompactPCI规范定义基于PCI总线方式的复印加坚固而耐用的PCI版本,并且适用于工业和嵌入式应用,本设计采用此规范。CompactPCI总线是3种技术的集成:通用PCI局部总线(Local Bus)的高性能,安装牢固的欧卡结构,接触可靠的针孔连接器(pin-antl-soeket connector)。

  PCI局部总线是一种地址和数据复用的高性能32,64位总线,它在高度集成的外围控制器件、外围插件板和处理器/存储器之间起连接作用。PCI总线为CPU和板上外设提供了方便的高速通信连接,工作频率为66 MHz或更高。PCI作为一种同步的、独立于处理器的32 bit或64 bit局部总线,在工作频率为33 MHz总线宽度为32 bit最低规格时其峰值吞吐速率可达到132 MB/s,适用于网络适配器、硬盘驱动器、视频卡、图形卡等各类高速外设。连接到PCI总线上的设备分为主控和目标两类,PCI支持多主系统。PCI总线的一个重要特点是存在配置空间,它提供一种配置关联,适合于目前或将来的系统配置机制,实现参数自动配置。系统软件通过读取配置空间中相应参数,即可确定PCI总线上挂接了什么设备以及需要哪些资源,通过对地址空间的重定位分配资源避免竞争,实现PCI设备的即插即用。

  连接到PCI总线的用户功能板卡需要使用PCI总线接口控制器和PCI总线进行交互,在应用系统设计时采用OL5064器件。QL5064是一款32 bit/33 MHz的通用PCI总线控制器,符合PCI规范2.2版,本突发传输速率达到132 MB/s。可作为PCI总线的主控设备控制总线,也可作为目标设备响应总线。Ql5064提供了PCI总线、E2ROM、LOCAL总线3个接口。LOCAL总线支持复用/非复用的32 bit地址/数据,有3种工作模式:M、C和J。在系统实际数据采集时,将LOCAl总线设置为C模式,这是一种目标设备模式。选用NM93CS56L型串行E2PROM作为QL5064的配置器件,该器件通过E2ROM接口和QL5064相连。QL5064的长配置方式要求68个字节的信息,主要包括:设备识别号、供应商代码号、LO-CAL总线3个空间的性质、范围以及基址等,这些配置信息内容一般要预先设计并用编程器事先写入配置器件中。在计算机启动时,系统将根据配置信息分配器件所申请的资源。Q155064作为一种桥接器件,在PCI总线和LOCAL总线之间有3种主要数据传输模式:

  (1)PCI Initiator数据传输模式 主控模式,LOCAL总线主设备通过QL5064访问PCI总线存储空间和I/O空间;

  (2)PCI Target数据传输模式PCI总线主设备通过QL5064访问LOCAL总线存储空问和I/O空间;

  (3)DMA数据传输模式QL5064作为两总线的主设备,从PCI总线存储空间读数据到LOCAL总线存储空间或者从LOCAL总线存储空间读数据到PCI总线存储空间。在系统设计中,使用PCI Target数据传输模式读写控制模块中的寄存器。

  4 设备的配置技术

  VxWorks是专门为实时嵌人式系统设计开发的操作系统软件,提供高效的实时任务调度、中断管理、实时的系统资源分配以及实时的任务间通信。程序员可将主要精力放在应用程序本身,而不用关心对系统资源的管理。

  为阐明在VxWorks操作系统下如何实现CompaetPCI总线设备的驱动,需了解PCI设备的配置寄存器空间。PCI设备有3种物理存储空间:配置寄存器空间、存储器空间和I/O空间。PCI局部总线设备中配置寄存器空间是一容量为256 KB并具有特定记录结构的地址空间,该空间分为头标区和设备有关区两部分,空间头标区的定义如图2所示。

  在配置空间中,只读空间有设备标识、供应商代码、修改版本、分类代码以及头标类型。其中供应商代码用来标识设备供应商;设备标识用来标识某一特殊的设备;修改版本标识设备的版本号;分类代码用来标识设备的种类;而头标类型用来标识头类型以及是否为多功能设备。除供应商代码之外,其他字段的值由供应商分配。

  PCI设备可以在地址空间中重定位是其重要功能之一,使得系统可合理地分配资源,甚至完全相同的两块PCI卡也能够在同一总线内工作而不会产生地址冲突。基地址寄存器的功能是分配PCI设备的系统地址空间,在基地址寄存器中,位0(最低位)均为只读位并且用来标识是存储器空间还是I/O地址空间。如果该位为0,表示映射到存储器空间。映射到I/O空间的基址寄存器宽度总是32 bit,其中位0值为1 (用硬件实现),位1为保留位并且其读出值必须为0,其余各位用来把设备映射到I/O空间。映射到存储器空间的基址寄存器可以是32 bit宽度,也可以是64 bit宽度。其中位0也要用硬件方式使其恒为0。位2和位1两位用来表示映射类型,其余各位用来将设备映射到存储器空间。

  系统配置软件通过向基址寄存器写入全“1”后再读回的方式确定设备要求的地址空间范围,与地址空间无关的位其返回值为0。

  在VxWorks操作系统下实现ComPactPCI总线设备的驱动过程主要包括下面步骤:

  (1)查找CompaetPCI设备在VxWorks操作系统中通过函数peiFindDeviee()来实现,该函数可根据给定的设备标识和供应商代码找到相应的设备。并返回总线号、设备号以及功能号。函数的定义如下:

  )

  (2)配置CompactPCI设备 通过操作系统提供的API函数访问CompactPCI设备的配置空间,配置CompactPCI设备基址寄存器、中断、ROM基地址寄存器等,可得到Compact-PCI的仔储器空间和I/O地址空间映射、设备的中断号等。在VxWorks操作系统中访问CompactPCI设备配置空间的函数有pciConfigInLong()、pciConfigOutLong()等,它们分别完成对CompactPCI设备配置空间的读写操作。这一系列操作也称为PCI设备枚举。然后,根据CompactPCI设备的配置参数,对不同的设备编写初始化程序、中断服务程序以及对PCI设备存储空间的访问程序。

  5 中断的响应与控制

  硬件中断处理是实时系统设计的关键环节,系统通过中断与外部事件交互。为了获得尽可能快的中断响应时间,Vx-Works的中断处理程序需要运行在特定的上下文中,也就是在所有任务上下文之外。因此,中断处理不会涉及任何任务上下文的切换。QL5064接几器件的寄存器序列巾有一个中断控制/状态寄存器,其偏移地址为0x68H。该寄存器可以使能或禁止CompactPCI总线的中断,因此在系统进行中断服务程序的配置时,必须设定该寄存器的内容,否则系统不能正常响应中断&nBSP;   在VxWorks系统下可以使用pciIntConnect()函数将中断和特定的C程序连接起来,该函数将指定的C函数与中断向量相联系,甬数的地址将存储在这个中断向量里。所以当中断发生时,系统将调用这个被称为中断服务程序的函数。因此,cPCI设备的中断响应设置主要有两点:

  (1)调用pciIntConnect()函数设置中断服务程序,该函数的定义如下:

  如果要禁止该设备的中断响应,可以给QL5064的中断控制寄存器写入0x0f000000即可。

  中断服务程序ISR负责协凋系统的采集任务,在系统设计时采用信号量的方式实现任务间的同步,因此ISR的程序非常简单,只给出和特定中断事件相关的信号量即可。举例如下:

  VxWorks信号量是提供任务间通信、同步和互斥的最优选择,它提供任务问的最快速通信,也是提供任务间同步和互斥的主要手段。对于同步,信号量可以协调外部事件与任务的执行。通用二进制信号量能够满足两种类型的任务协调需要:互斥与同步。二进制信号量需要的系统开销小,因而适用于高性能的需求。二进制信号量可以看成一个标记:对应的资源是可用f满)还是不可用(空)。当任务调用函数semTake()取一个信号量时,其结果依赖于在调用的时刻信号量是否可用。如果此时信号量可用,调用semTake()的结果使信号量变为不可用,任务继续执行;如果此时信号量不可用,调用semTake()的任务进入一个阻塞队列,进入等待状态该信号量变为可用阻塞状态。通过信号量来同步整个系统中数据,可保证系统运行的实时性和可靠性。

  6 结束语

  采用上述控制技术,在系统中成功实现控制驱动对多种CompactPCI板卡以及DSP信号处理板、高速A/D通道、低速A/D转换通道、计数器通道等均能正常工作。达到系统设计要求,因此可说明VxWorks系统CompactPCI总线的驱动与控制方法可行,保证系统实时数据采集的可靠性。

关键字:CompactPCI总线  PCI配置  中断控制  信号量 引用地址:VxWorks下ComPactPCI总线驱动程序设计

上一篇:周立功:基于应用构建嵌入式软件平台
下一篇:如何在VIM中实现对嵌入式软件的调试

推荐阅读最新更新时间:2024-05-02 20:50

stm32使用PWM波中断的方式精确的控制波的个数
1,假如想要得到如下的波形: 每一个波的周期为25us,一组波的频率为10HZ 实现思路: 实现的时候使用TIM1的CH1和TIM2的CH1,使用TIM15的中断,每100个ms来一次中断,在中断服务函数中以中断的方式打开PWM波的输出,在输出一个PWM波之后会进入PWM的中断服务函数,在中断服务函数中计数PWM波的个数,当达到8个的时候关闭PWM波的中断输出。 中断优先级的安排: TIM15 1 0 TIM1 2 0 TIM2 3 0 2,在CUBE中的配置 TIM15的配置: TIM1的配置: TIM2的配置: 3,代码实现
[单片机]
stm32使用PWM波<font color='red'>中断</font>的方式精确的<font color='red'>控制</font>波的个数
分别利用查询和中断方式编程实现灯的闪烁控制实例
本站前面有个灯的闪烁 编程 实例,那是用延时程序做的,现在回想起来,这样做不很恰当,为什么呢?我们的主程序做了灯的闪烁,就不能再干其它的事了,难道单片机只能这样工作吗?当然不是,我们能用定时器来实现灯的闪烁的功能。 例1:查询方式 ORG 0000H AJMP START ORG 30H START: MOV P1,#0FFH ;关所 灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB TR0 ;定时/计数器0开始运行 LOOP:JBC TF0,NEXT ;如果TF0等于1,则清TF0并转NEXT处 AJM
[单片机]
Tiny4412中断控制器(GIC)之外部中断
#include regs.h void enable_mmu(unsigned long ttb); void init_ttb(unsigned long *ttb_base); void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa); void memset(char *buf, char ch, int size); void memcpy(char *dst, char *src, int size); void do_irq(unsigned long regs ); void (*printf)(char *, ...) = 0x
[单片机]
S5PV210的向量中断控制
1、异常处理的2个阶段 (1)可以将异常处理分为2个阶段来理解。第一个阶段是异常向量表跳转;第二个阶段就是进入了真正的异常处理程序 irq_handler 之后的部分。 2、回顾:中断处理的第一阶段(异常向量表阶段)处理。 (1)第一阶段之所以能够进行,主要依赖于CPU设计时提供的异常向量表机制。第一个阶段的主要任务是从异常发生到响应异常并且保存 / 恢复现场、跳转到真正的异常处理程序处。 (2)第二个阶段的目的是识别多个中断源中究竟哪一个发生了中断,然后调用相应的中断处理程序来处理这个中断源。 3、S3C2440的第二阶段处理过过程 (1)第一个问题,怎么找到具体是哪个中断:S3C2440的中断控制器中有
[单片机]
硬件实时操作系统信号量管理的设计与实现
    随着嵌入式技术的发展,实时操作系统RTOS(Real Time Operating System)被越来越多地应用在嵌入式系统中,但是对现有基于软件实现的RTOS,单纯依靠改进调度算法已经不能使系统的实时性有很大提高。为提高系统的响应能力,国内外一些研究机构提出RTOS硬化的方法,并开始做这方面的研究工作 。目前,软件硬化常用的有两种方法:(1)微程序方式,特点是成本较低,方便灵活;(2)组合逻辑方式,特点是速度快、可靠性高,随着大规模集成电路的发展,这种方式逐渐显示出优越性 。信号量管理是RTOS中频繁运行的程序段之一,如果将这一部分用硬件实现,对提高机器的速度将有很明显的效果。本文采用组合逻辑方式参照μC/OS-II将
[嵌入式]
stm32 中断串口控制LED灯
#include stm32f10x.h #include usart.h #include led.h #include stdio.h /*********************************************************************** ***********************************************************************/ void RCC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); //void d
[单片机]
TI - MCU - MSP430使用指南5 -> ICC中断控制
ICC,即Interrupt Compare Controller,中断比较控制器,作用便是设定中断优先级,同时通过比较中断优先级等实现中断的硬件嵌套。 首先普及一下MSP430的中断系统,大部分的MSP430 MCU中断优先级是不能设置的,也就是说对于每一个中断源的优先级是体现设定好的,不支持后期用户自动设置,因此可以说如果正在执行低优先级的程序,突然来了一个高的优先级中断,是可以打断低优先级的服务程序的,但是前提是进入低优先级中断服务程序时开启了全局中断即GIE。但是如果高优先级中断正在执行服务程序,来了一个低优先级的中断,那么只能等待高优先级中断服务程序执行完之后,才可以去执行低优先级的中断服务程序,这样也就是说不能灵活
[单片机]
TI - MCU - MSP430使用指南5 -> ICC<font color='red'>中断</font><font color='red'>控制</font>器
基于VME CompactPCI AMC总线架构的嵌入式单板计算机
    英国并行科技公司(CCT)作为生产高性能嵌入式系统的世界级企业,相对于其它公司产品全面的各层次覆盖,并行公司专注于设计和开发基于Intel处理器技术的高性能单板计算机产品。   并行公司的单板计算机主要有三大类:AMC、CPCI(6U、3U标准)、VME/VXS。产品系列处理器主要采用了奔腾M以上CPU。公司也配套生产基于这三种总线的以太网交换机、PMC载板和大容量的存储模块,以满足客户配套需要,产品优势:   1)扩温,提供-25℃~70℃和-40℃~85℃的产品,只有少数几家国际大厂能提供的。   2)针对更恶劣的环境,提供加固级产品(风冷和密闭的导流冷却产品)。   3)是二十多年的技术沉淀,无论在产
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved