基于PCI9054的接口卡设计
子系统ID号。对于PCI9054,其生厂商ID号,器件ID号,子系统号,子系统ID号等是固定的,可以在PCI9054数据手册中查到。
本地配置寄存器的配置是对本地地址空间及本地总线属性的配置,这种配置根据实际开发需要进行,配置完成后,在主机CPU要访问本地地址空间时,可能给出对应的PCI总线地址。
PCI9054在加电启动时,从外部EEPROM读取初始化数据来配置PCI9054的内部寄存器,在板卡加电自检期间,PCI总线的RST#信号复位,PCI9054内部寄存器的默认值作为回应。PCI9054出本地LRESET#信号并检测串行EEPROM。
如果串行EEPROM中的前33位不全为1,那么PCI9054确定串行EEPROM非空,用户可通过向PCI9054的寄存器CNTRL的29位写1,来加载EEPROM的内容到PCI9054的内部寄存器,配置的信息可以在P1xSdk的PLXMON下对EEPROM进行配置。
3 接口卡软件设计
3.1 CPLD逻辑设计
PC39054通过本地总线与本地总线设备进行通信,PCI9054提供2种访问方式,即单周期访问和突发方式访问。
其中单周期访问本地总线采用状态机实现本地总线接口的控制,其状态图如图5所示。状态SO为空闲状态,当ADS#为0时,如经本地总线译码逻辑译码后表明需要访问本地空间时则转到状态S1,否则留在状态SO;状态S1为单周期访问开始状态,当BLAST#为1时,停留在状态S1,否则转到状态S2:状态S2为访问等待状态,在此状态下数据在本地总线保持,然后直接转到状态S3;状态S3数据传送状态,在此状态下数据从本地总线上取走(如果需要可以加一个状态来延长数据读取时间);当ADS#为0时,经本地总线译码逻辑译码后,表明还需要访问本地空间,转到状态S1,否则转为SO,本周期访问结束完成数据传送。
将以上状态机用VHDL语言在可编程器件中实现,部分源程序代码如下:
图6是借助于Xilinx ISE 9.1i仿真工具对在C模式下的8位本地总线宽度的本地逻辑控制的传输时序仿真结果举例。由图6可知:在写周期,是把PCI总线端的地址local_adrr[9:2]为8'h00的数据写到输出端outport0;在读周期,是把地址为8'h00的数据从inportO[2;0]读入到local_data[0]。
3.2 驱动程序设计
Windriver是Jungo公司生产的一个设备驱动程序开发组件,开发者不需熟悉操作系统内核即可利用Windriver开发设备驱动程序。整个驱动程序中的所有函数都是在用户态下运行的,通过与Windriver的.Vxd或者.Sys文件交互来达到驱动硬件的目的,大大提高了PCI设备驱动程序开发。
用Windriver开发驱动程序的过程大致如下:首先,打开Windriver设备,查找所要访问的PCI设备;然后是枚举该设备的资源(包括内存、I/O、中断)并锁定该设备的资源,不能被其他程序访问;在访问板上的资源之后是解锁资源;最后是关闭Windriver设备。这个过程是用C语言在VC++6.0开发环境下借助于Windriver本身自带函数(安装Windriver之后,在其“Help”中可找出相关函数说明)实现对PCI9054的
初始化。设备打开,访问硬件资源,调用函数库,设备关闭等操作后。再对源代码进行编译,链接和运行成功后,找出产生的5个文件:wdr-eg.exe,plx9054.inf,windrvr6.sys,plx9054.lib和plx9054.dll,这5个文件组成了所需的驱动文件。在板卡成功插入插槽后点击wdreg.exe成功安装驱动程序。
4 结束语
本文以性价比较高的PCI9054作为PCI桥路器,给出了桥路器的部分功能介绍、电路设计时需注意的问题及本地总线数据传输的接口逻辑设计。本设计降低了PCI总线的复杂性,轻松实现了PCI总线端的控制器对本地总线和本地总线外部设备的工作模式和状态的有效检测,具有极大的应用价值。
- ARM和WinCE6.0下nRF24L01的驱动设计(05-28)
- 电源设计小贴士 1:为您的电源选择正确的工作频率(12-25)
- 用于电压或电流调节的新调节器架构(07-19)
- 超低静态电流电源管理IC延长便携应用工作时间(04-14)
- 电源设计小贴士 2:驾驭噪声电源(01-01)
- 负载点降压稳压器及其稳定性检查方法(07-19)