用双端口RAM实现与PCI总线接口的数据通讯
(3)配置片选信号控制寄存器
本文引用地址:http://www.amcfsurvey.com/article/83198.htm该寄存器的地址范围和基地址必须与LAS0RR或LAS0BA所定义 的范围和空间相对应。可根据PCI 9030提供的配置寄存器的方法确定CS0BASE的数值:板卡的2KB空间可以用十六进制表示为800H,将800H右移一位得到400H,然后将基地址加到400H左边的任何一位中。因为所采用的基地址为00004000H,所以得到的值为00004400H;又因为第1位为片选使能位,应该设置为1。所以最终确定的数值为00004401H。
由于局部总线采用8位的宽度,将工作方式定义在不使能突发,不预取,配置总线区域描述寄存器的数值确定为400140A2H。另外,还要根据要求设置CNTRL寄存器控制PCI 9030的工作状态,确定为18784500H。当所有这些数据都配置完成后,便可将这些数据按照加载顺序写入串行E2PROM中,从而完成整个系统的配置。
通过这几个寄存器的配置,一个局部地址空间便可以确定下来。在系统上电后,系统BIOS根据这几个寄存器的内容将板卡上2KB的RAM空间重映射到PCI空间中,使主机可以像访问自己的地址空间一样访问板卡上的RAM。
2.3 CPLD控制逻辑
对于双口RAM同一个地址单元,不能同时进行读或写操作,但两边连接的主控芯片,都可以对其进行读、写操作,因此必须解决地址竞争问题。本系统中,使用XILINX公司的XC9536CPLD芯片完成PCI局部总线的译码和控制电路。由于系统控制计算主要在DSP中完成,上位机只起监控和数据保存作用,因此规定对双口RAM的操作DSP优先于PCI 9030;同时CPLD也参与了DSP片外程序存储器Flash和数据存储器RAM的地址译码,控制逻辑用公式表示为:
3 设备驱动程序设计
设备驱动程序开发工具通常有DDK、VtoolsD、WinDrvr等。为加快开发速度,采用JUNDO公司的WinDrvr开发设备驱动程序。其使用简单,支持多种操作系统。
采用Windrvr开发PCI桥接设备的驱动程序有两种方法。一种Wizard开发向导是自动生成驱动程序框架代码,然后根据实际需要,加入定制功能。这种方法生成的代码较多,程序较复杂。另一种是在Vc++创建工程中直接利用Windrvr的API函数生成驱动程序,比在Wizard生成的框架代码上修改更为灵活。本文采用后一种方法。以下是用Windrvr开发PCI9030桥芯片的驱动代码,只要稍加改动就可以作为其他PCI芯片驱动程序的一部分,例如PCI9050、PCI9052等。程序中出现的变量名都由其名称反映含义,具体可以参见Windrvr设计文档说明。
至此获得了本地端映射到用户的内存地址,调用读写函数就可以对本地芯片进行操作。
参考文献
1 邓晓勇,韩 燮,毛 明.利用FPGA实现与PCI总线接口的数据通信[J].华北工学院学报,2002;23(6):436~439
2 陈利学,孙 彪,赵玉连等.微机总线与接口设计[M].成都:电子科技大学出版社,1998
3 PLX公司.PCI 9030 Data Book.Version 1.4.May,2002
4 刘 巍.一种快速开发PCI桥设备驱动程序的方法.现代雷达,2002;(2):39~40
5 黄 殉,孙政顺.利用WinDriver开发PCI设备驱动程序.电子技术应用,2001;27(3):15~16
评论