您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

PCI总线协议的FPGA实现及驱动设计

时间:2007-1-20栏目:电子通信论文

_outpd(gBaseAddresses,Data);//向基地址写入数据
  
  其中,gBaseAddresses为基地址值,Data为写操作时的数据。
  
  3.3内存方式下的读写
  
  对于内存方式下的读写,一个重要问题就是地址的映射。因为硬件设备读写的是物理内存,但应用程序读写的是虚拟地址,所以存在着将物理内存地址映射到用户程序线性地址的问题。
  
  映射功能通过调用VtoolsD软件的标准库函数完成。根据给定的物理地址和所要求的空间大小,在系统内存中分配相应空间。首先,用PageReserve函数分配当前保留页的线性地址空间,再利用PageCommitPhys函数的服务对开始的线性地址空间分配相应的物理地址空间。程序如下:
  
  ULONGnPages=_NPAGES_(PhysAddress,SizeInByte);
  
  Linear=PageReserve(PR_SYSTEM,nPages,PR_FIXED);
  
  PageCommitPhys(PAGENUM(Linear),nPages,PAGENUM
  
  (PhysAddress),PC_INCR|PC_WRITEABLE|PC_USER);
  
  LinPageLock(PAGENUM(Linear),nPages,0);
  
  其中,PhysAddress为给定的物理地址,SizeInBytes为需要的空间大小。
  
  建立了物理RAM到系统内存的映射后,就可以利用C++语言中的文件操作基类CFile类完成数据的读写。首先使用CFile类的成员函数Open打开文件,为保证数据读写的准确无误,必须使用二进制方式打开;接下来使用Read和Write成员函数进行文件读写;完毕后用Close成员函数关闭文件。
  
  3.4中断的勾挂和处理
  
  首先在ON_DEVICE_INIT函数中完成中断的初始化。即通过前面读取的PCI设备的中断号,使用VPICD_Virtualize_IRQ函数进行中断勾挂,外调用VPICD_Physically_Unmask函数开中断。
  
  RTCIRQHandle=VPICD_Virtualize_IRQ(&IRQdesc);
  
  VPICD_Physically_Unmask(RTCIRQHandle);
  
  然后在RTCInt_Handler函数中进行中断处理,可以进行各种操作,例如向应用程序发送自定义的消息来通知中断的发生。
  
  3.5与应用程序的通信
  
  一般地,应用程序通过CreateFile函数调用VxD驱动程序,得到一个VxD的文件句柄。使用如下的语句可以打开一个名为mydriver.VXD的文件,得到的句柄保存在hVxD中。
  
  hVxD=CreateFile(\\.\mydriver.VXD,0,0,0,CREATE-NEW,FILE-FLAG-DELETE-ON-CLOSE,0);
  
  通过句柄hVxD和DeviceIoControl函数就可以与驱动程序进行数据传输。
  
  本文采用ALTERA公司的FLEX6000系列芯片,型号为EPF6016TC144-3,实现了简化的从设备模式PCI协议,并在Windows9x系统下实现驱动程序的设计。整个系统工作良好。资源占用情况如下:可用I/O引脚113根,占用51根,占用率45%;可用逻辑单元数1320个,占用151个,占用率11%。
  
  简化的PCI协议的实现占用较少的逻辑资源,可以灵活方便地进行功能添加和改进,同时可以在同一块芯片中集成其他用户模块,实现不同功能,以降低成本。目前,本系统已经应用在数据采集处理、图像处理等方面。
  
  
  
 

上一页  [1] [2] [3] 

下页更精彩:1 2 3 4 下一页