![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测室 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| 使用DSP加速PCI接口产品的开发 | |||||
作者:林振华 文章来源:电子技术应用 点击数: 更新时间:2007-1-24 ![]() |
|||||
|
南京电子技术研究所(210013)林振华 来自:电子技术应用 摘要:一种基于PLX公司的PCI接口芯片的辅助开发工具,可极大地方便PCI产品的硬件调试,以及驱动程序和应用软件的开发。给出了一个以PCI9052为接口芯片的图形控制器的开发实例,以及在Windows操作系统下如何调用SDK中的API函数。 关键词:PCI桥 PCI9052芯片 SDK VC++6.0 1 PCI总线和PCI桥接芯片 PCI总线就一种目前较为流行的、先进的高速同步总线。它的历史较短,正式的2.2版本于1999年2月发布。其优点在于能够满足设备之间实现快速访问,因为PCI总线的全部读写传送都可以用突发方式进行,且总线速度可达33/66MHz,数据宽度为32/64bit。此外,低功耗以及与处理器无关也是其优点。PCI有三个相互独立的物理空间:存储器地址空间、I/O地址空间和配置地址空间。配置空间用于访问PCI设备的配置寄存器,以完成启动时的初始化,并由配置软件给PCI设备分配存储器和I/O地址空间。 由于PCI总线协议较为复杂,在设计具有PCI接口的产品时,如果CPU或MCU没有PCI接口,一般采用专用的桥接芯片,或者是可嵌入PLD中的IP核来实现PCI协议。Altera、Xilinx等PLD生产厂商大都提供可以嵌入自己产品中的支持PCI协议的IP Core,使用起来较为灵活,但是对应用者的要求也较高。采用专用PCI桥芯片,可以让工程师工必精通PCI规范的各种细节,甚至不需完全了解PCI总线的时序,只要理解了桥电路的局部总线的性能,就可以顺利地进行PCI产品的设计开发,不失为一种低成本、高效率的解决方案。主流的PCI桥芯片主要有AMCC公司 S593X和PLX公司的PCI9050、9054、9060等。其中PLX公司为其产品还提供一套软件开发工具包SDK,它可以很好地帮助工程师进行硬件调试,并大大简化PCI设备驱动程序及应用软件的编制。 2 用PCI9052构成的PCI接口电路 按照是否具有控制总线的功能,可以将PCI的设备功能划分为主设备(Master)功能和目标设备(Target)功能,总线上可以有多个具有Master功能的设备, 由于PCI9052的ISA接口不是芯片上电后的缺省状态,所以还要对硬件进行预先设备。首先,将PCI9052的MODE引脚接地,设置成非复用总线方式;然后对串行EEPROM进行预编程,也就是对芯片内部的寄存器进行设置。由于PCI9052的ISA模式已指定将局部总线的CS0分配给了ISA的存储器地址空间,CS1分配给了ISA的I/O地址空间,所以要对CS0、CS1对应的两组相关寄存器进行设置。其中LAS0RR、LAS0BA、CS0BASE用于设置PCI到ISA的存储器地址空间的映射;LAS1RR、LAS1BA、CS1BASE用于设置PCI到ISA的I/O地址空间的映射;LAS0BRD、LAS1BRD用于将时序设置成能满足ISA总线的要求。此外,须将INTCSR寄存器的第12位置成ISA模式,还要设置CNTRL寄存器,将第138、139脚置为ISA总线输出信号IORD、IOWR。 3 使用SDK实现PCI设备的驱动和应用软件的开发 要完成对PCI设备产品的开发和调试,相关的软件调试工具是必不可少的。PLX公司的Software Development Kits(SDK)就是这样一个功能较为完善的工具包。 3.1 SDK软件包的内容和特点 SDK软件包主要包括以下内容: (1)Windows 98/NT/2000兼容的设备驱动程序和以此为基础的HOST API库函数; (2)一个Windows下的调试应用软件PLXMon,它可以对PLX公司的所有PCI接口芯片进行配置和操作,使用非常方便; (3)可以支持多种嵌入式CPU的Local API库函数; (4)可以支持VxWorks、Linux、pSOS等多种RTOS的BSP。 其中(3)、(4)项是专业版SDK-PRO的内容,对于在嵌入式实时操作系统(RTOS)上开发具有嵌入式CPU的PCI MASTER设备是很有帮助的。而在Windows操作系统上开发PCI的TARGET设备,(1)、(2)项即可满足要求,而且利用SDK的HOST API就可方便地进行设备驱动程序的开发。 3.2 使用SDK开发步骤 将PCI SDK安装后,Windows的驱动程序就已被放置在SDK的目录下,插入PCI设备后上电,操作系统自动搜索到新的PCI硬件,并且识别出PLX接口芯片的型号,要求安装驱动程序,将SDK的相应目录给出,便自动完成安装。 如要进行硬件调试,PLXMon是一个使用简便的基于Windows 98/NT/2000操作系统的调试工具。它可以查看和修改PLX公司的PCI桥芯片内的所有寄存器的值,并支持FLASH和EEPROM编程,可极大地方便硬件的调试。而要开发用户自己的设备驱动或应用程序,还需要Microsoft的Windows DDK和Visual C/C++ 6.0;步骤如下:1、将PLX公司的SDK包含在工程目录下;2、程序中要设置PCI_CODE和LITTLE_ENDIAN宏定义;3、包含头文件PlxApi.h;4、将PlxApi.lib插入到工程中去;5、调用PLX公司的API函数完成相应的功能操作。 3.3 实例说明 下面是一段在Visual C++6.0环境下编写的代码,仅为了说明如何在计算机局部总线上调用SDK的API函数对上设备进行I/O读写等基本操作,这也是编写一个设备驱动程序的基础。为了节省篇幅,省略了程序中变量和函数的详细说明部分,具体可参考文献[4]。 PlxPciDeviceFind(&Device,&DeviceNum); //首先在PCI总线上寻找PLX公司的PCI接口芯片,获得一个指向DEVICE_LOCATION类型的指针变量Device; rc=PlxPciDeviceOpen(&Device,&hDevice); //打开这个设备,获得一个句柄hDevice; PlxChipTypeGet(hDevice,&ChipType,&Rivision); //通过句柄读出芯片的型号; port=PlxPciConfigRegisterRead (Device.BusNumber,Device.SlotNumber,0x1c,&rc); //利用获得的设备总线和插座的序号信息定位该设备,并调用函数读取PCI9052内部寄存器关于该设备被分配在PCI总线上I/O空间的端口地址(0xlc是要读的PCIBAR3寄存器的地址偏移量); prot=port & ~(1<<0);//清第零位,得到真正的端口其地址; rc=PlxIoPortRead (hDevice,port + 0x2b0,BitSize 16,&RegValue); //将基地址加上偏移地址,读取局部总线扩展端口的数据,写操作与此类似; …… PlxPciDeviceClose(hDevice); //程序结束时,与PlxPciDeviceOpen()相对应,释放该设备 本文介绍的只是最简单的应用SDK API库的步骤和方法。目前3.2版SDK提供的API库函数功能已非常完善,可完成PCI总线上的包括存储器、I/O和配置寄存器的读写、中断响应以及DMA通道等要求的各种功能,完全可以满足应用软件开发的需要。 SDK最大的优点是使用方便简单,不过它只是面向PLX公司的PCI接口芯片的开发工具,不能做到与芯片无关;另外,它提供的API库只是基于Windows操作系统的,并且要预先安装在提供的各类芯片的驱动程序,然后通过DLL的调用来实现驱动,因此无法开发运行在核心态的真正的VxD。这些是它的局限性. |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|