3. 硬联逻辑设计
PCI接口芯片的主要功能是桥接CPU端的LocalBus与PCI总线。另外,还必须通过串行总线上的EEPROM来配置PCI芯片的初始工作方式。PLX9656的三种工作模式(M、C和J)可以和大多数CPU和DSP接口。其中M模式是专为MOTOROLA的POW-ERPC系列CPU而设计的接口模式。
由PLX9656与MPC8260组成的最小系统至少应包括以下几个组成部分:FLASH、SDRAM、SRAM、PCI连接器、JTAG端口、时钟、复位、电源、EEPROM、以太网接口、ATM和RS232串行口等。
PLX9656信号线包括PCI端信号、Local Bus端地址与数据、控制信号、电源和地。其中前两项占了信号数量的绝大部分。为了保证信号的可靠传输,芯片上用很多引脚作电源和地,这些引脚在布线时应仔细连接,并应大面积敷铜,同时还要连接滤波电容。另外要注意的是:MPC8260有60x Bus和LocalBus两条总线,前者为MPC8260与外界的接口总线,所以应将PLX9656的Local Bus信号与MPC8260的60x Bus连接。图2所示是系统的硬联逻辑框图。
4. 驱动程序
开发Windows环境和Linux环境的驱动程序有很大不同。
4.1 Windows环境中驱动程序的编写
由于Windows操作系统被Microsoft所垄断,它是一个封闭的操作系统,因此很难将用户驱动程序挂接到Windows操作系统中。通常要利用一些开发工具,如Microsoft的DDK、Numega的DriverStudio和Jungo的WinDriver等。因而应首先是由它们生成驱动程序的框架后,再导入到Microsoft的Visual C++中,在填入与设计对象相关的代码后,最后由build生成Windows环境下的驱动程序。PLX公司的PLX9656RDK提供了Windows API及其源代码和调试工具PLXMon。利用这些针对PLX芯片的API可以驱动PCI接口,而且其编程工作也非常快捷。
PLX芯片的初始化函数原型为:
S8 Select Device(DEVICE_LOCATION*pDev);
它可提供很多对PCI的接口操作,其中包括寄存器读/写、中断允许/禁止、获取中断状态、IOP总线读/写、IOP端口读/写、电源管理、热插拔功能、VPD读/写、EEPROM读/写、邮箱寄存器读/写、门铃寄存器读/写、DMA控制/状态、DMA块通道操作、DMASgl通道操作以及DMAShuttle通道操作等。在对PLX芯片进行初始化后,便可利用PLX9656RDK提供的上述功能对PCI接口进行操作。
4.2 Linux环境下驱动程序编写
Linux是源代码开放型操作系统。在这种系统中,用户自编的设备驱动程序可以和原操作系统的驱动程序享有同等的“地位”。Linux环境下,驱动程序的编写有两种方式,一种是基于内核的,另一种是基于模块的。前一种方式是将驱动程序直接注册在相应的系统文件中,然后在操作系统启动时将它装载在内存中使用;后一种方式则通过命令行insmod和mmod来加载和卸载驱动程序模块,因此比较方便灵活。
Linux对设备的操作与对文件的操作一致,所有的驱动程序都毫不例外地要使用file operations结构。其中的read、write、ioctl、mmap、open、release指针分别指向用户编写的驱动程序的相关操作。
每个PCI设备均可由总线号、设备号和功能号来确定,它共有三个访问空间,即内存空间、I/O端口和配置寄存器。配置空间用于决定PCI器件的工作方式和映射到系统中的地址。其基本功能函数如下:
访问I/O和内存空间时,要根据配置寄存器中PCL-BASE-ADDRESS-i(i=0.5)所给定的基地址来读写数据。
|