保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

PCI传输卡的WDM驱动程序设计


初始化完后可以直接利用成员函数ReadHeader/WriteHeader函数访问所有的配置寄存器。
  
  为了确定映射空间的类型和大小,先向目标基地址寄存器写入0Xffffffffh,然后回读该寄存器的值。如果最低位为1,表示映射于I/O空间,反之为存储空间;如果映射于存储空间,从第四位开始计算0的个数可以确定内存空间的大小;如果是I/O方式,从第二位开始计算0的个数可确定I/O空间的大小,最大为256字节。如果设备的存储空间超过256字节,要实现设备的整个存储部分的访问,就必须采用内存映射。
  
  (2)I/O操作模块
  
  Driverworks的KIoRange类封装了I/O端口访问的操作。部分代码如下:
  
  {……
  
  KIORangeDevIoPort();//创建实例
  
  NTSTATUSstatus=DevIoPort().Initialize(pResListTranslated,pResListRaW,PciConfig.BaseAddressIndexToOrdinal(0));
  
  /*第一个参数为转换后的资源列表指针;第二个参数为原始资源列表指针;第三个参数中的0为I/O口对应的基地址,用来转换成特定端口资源的序数?*/
  
  If(NT_SUCCESS(status))
  
  {……
  
  DevIoPort.inb(0,LineBuf1,10);
  
  /*成功初始化后可分别用KIoRange类的成员函数inb(/outb)从端口中读/写字节*/
  
  }
  
  else{Invalidate();returnstatus;
  
  /*未能初始化成功,错误信息在status中*/
  
  {
  
  ……}
  
  (3)内存读写模块
  
  DriverWorks的KMemoryRange类封装了端口访问的操作。
  
  status=m_MemoryRange().Initialize(pResListTranslated,pResListRaw,PciConfig.BaseAddressIndexToOrdinal(0));
  
  此函数的参数、意义及具体用法与I/O端口的操作基本相同。
  
  内存对象也用来发送控制字,以控制CPLD的开始和停止等
  
  
  
  。实际上控制字是通过PCI9052发送的。该控制字地址已被映射成PCI的内存空间。所以定义一个指向内存空间的内存对象,通过该对象即可发送控制字。
  
  (4)中断模块
  
  在中断模块,首先要激活PCI9052中断使能位,然后判断硬件中断响应是否产生,如果有,则进行突发传输,读入FIFO中的数据。
  
  BOOLEANTranCard::Isr_MyIrq(void)
  
  {if(//中断未产生)
  
  {……
  
  returnFALSE;}
  
  else
  
  {/*如果产生硬件中断,设置命令寄存器,进行突发数据传输*/
  
  returnTR

《PCI传输卡的WDM驱动程序设计(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/140176.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。