PCI开发备忘录

1. 基于FPGA的PCI总线图像采集卡的设计与实现_范赫南

1)配置了主模式单周期发数

(l)PCICR〔2:0]=111b,设定PCI9054工作方式为主模式。
(2)DMPBAM{1:0}=1b,设定本地端处理器访问PCI总线为存储器方式或IO方式。
(3)DMRR=FFF0000Oh,设定本地端处理器寻址空间是1MB。

2)给出了设计电路板的注意事项

3)提示了可以使用plxmon观测内存信息。

4)有基于win的驱动程序开发,少量内容

2. 基于PCI总线的高速采集系统的研究与设计_李旭鹏

总结的比较系统


3. 基于PCI总线的数据采集卡的实现_熊松

1)PCI配置寄存器组 
PCIIDR[15::0]: 设备商ID号 
PCIIDR[31::16]:设备标志号 
PCICCR[7::0]:  寄存器标准编程接口。无定义 
PCICCR[15::8]: 类码(其他桥设备) 
PCICCR[23::16]:基本类码(桥设备) 

PCISVID[15::0]:子系统ID号 

PCISID[15::0]:子系统生厂商ID号 

在PCI9054中,这两个寄存器的值分别为1OB5H和9054H。 
PCIIPR[7::0]: 中断引脚寄存器 
PCIBAR0:表明PCI9054中的Local总线配置寄存器组、运行寄存器组和DMA寄存器组在PCI总线存储空间的起始地址。 
PCIBAR1:表明PCI9054中的Local总线配置寄存器组、运行寄存器组和DMA寄存器组在PCI总线I/0空间的起始地址。 
PCIBAR2:表明PCI9054的Local总线的地址空间0映射到PCI总线存储空间的起始地址。 
PCIBAR3:表明PCI9054的Local总线的地址空间1映射到PCI总线存储空间的起始地址。 
PCIMGR:表明总线主设备希望一次突发传输要求多长时间(以250ns递增)。 
PCIMLR;表明总线主设备希望重新获得总线的最大延迟时间(以250ns递增)。 
在PCI9054的配置寄存器中与PCI规范相匹配的六个基址寄存器,即从PCIBARO到PCIBAR5,其中PCIBAR4和PCIBAR5保留使用。在这六个寄存器的首位(bit 0)用于表示存储空间映射:0表示映射到内存空间,1表示映射到I/0空间。 

2)Local配置寄存器组 

PCI9054的本地配置寄存器按照功能可以划分成以下几个部分: 
Local Base Address (Remap)for PCI-to-Local Address Space 1:表明Local总线的Space 1在Local总线空间的基址,映射到PCI总线空间的位置,由PCI配置寄存器组中的
PCIBAR3决定。 
Mode/DMA Arbitration: 主要用来设置Local总线的一些工作状态和DMA通道的优先级。 
Big/Little Endian Description:用来设置Local总线在不同的工作状态时采用哪种字节调整技术(Little Endian和Big Endian)。 
LMISC:里面有一个重要的状态位LMISC[2](Local Init Status),在任何PCI访问PCI9054前必须先要由Local总线或EEPROM设置该位。 

3)DMA寄存器组 

DMA寄存器主要针对PCI9054的双DMA通道(DMA Channel 0和DMA Channel 1)的功能进行设置。 
DMA ChannelO Mode:用来设置PCI9054的通道0的DMA工作方式(Local总线的宽度、内部的等待状态、中断的使能与选择、分散/聚合模式、块模式、请求模式)。 
DMA Channel0 PCI Address:  PCI9054 DMA通道0的传输对应的PCI总线空间的地址。 
DMA ChannelO Local Address: PCI9054 DMA通道0的传输对应的Local总线空间的地址。 
DMA ChannelO Transfer Size (Bytes):PCI9054通道0的DMA传输的字节数。 
DMA ChannelO Command/Status: DMA通道0的控制位(DMA开始、DMA使能、DMA中止、清理中断)和状态位(DMA完成)。 
DMA Channell Command/Status:有DMA通道1的控制位(DMA开始、DMA使能、DMA中止、清理中断)和状态位(DMA完成)。 
DMA Channel0 Description Pointer:用于分散聚合中描述符位置、DMA传输方向、中断和结束的控制。 

4)运行寄存器组 

Interrupt Control/Status:有PCI总线和Local总线中断输出使能、Local总线中断输入使能、Local总线和LSERR输出使能和DMA中断使能等使能位以及DMA中断、PCI总线错误和
Local总线错误等一些状态位。 
Serial EEPROM Control,PCI command codes User I/O Control和Initial Control:有串行EEPROM控制位、PCI命令、用户I/O控制和部分中断控制。 


5)给出了一组plxmon eeprom的配置 可以使用

给出了完整的verilog代码,可以进行尝试

给出了详细的上位机开发过程,可以进行尝试。


4. 基于PCI总线结构的数据采集系统设计_李小平

DMA 传输的配置方式,给出了一些时序


5.数字信道化接收机接口设计与PCI驱动开发_张涛

给出了eeprom的配置,不能用

寄存器和时序,还是看datasheet比较保险


接下来的工作:

1. 自习阅读一下3号文献

2. 试用一下plxmon软件的内存读写功能

3. fpga程序编写是否有可行性

4. 驱动开发的方案,和黎为进行交流

5. 先完成单周期发送数据的功能,再完成DMA的配置,过程中关注一下如何进行切换控制。














  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux的PCI驱动开发指的是在Linux操作系统上编写与PCI总线上的设备通信的驱动程序。PCI总线是一种计算机总线标准,也是一种兼容性最强、功能最全的计算机总线。Linux作为开源操作系统,其源代码开放,给连接到PCI总线上的任何设备编写驱动程序变得相对容易。 在Linux下编写PCI驱动程序的主要步骤如下: 1. 确定PCI设备的硬件信息:使用命令`lspci`可以获取PCI设备的详细信息,包括设备ID、供应商ID等。 2. 创建PCI驱动程序:可以使用C语言编写驱动程序,其中需要包含头文件`linux/pci.h`。驱动程序需要实现一系列的回调函数,用于处理设备的各种操作。 3. 注册驱动程序:使用函数`pci_register_driver`将驱动程序注册到Linux内核中。 4. 初始化PCI设备:在驱动程序中使用函数`pci_enable_device`来使能PCI设备,函数`pci_disable_device`用于禁止PCI设备。 5. 实现设备操作:根据设备的功能需求,编写相应的操作函数,比如读写设备的寄存器、传输数据等。 6. 与其他子系统交互:根据需要,驱动程序可能需要与其他子系统进行交互,可以使用Linux提供的各种API函数来实现。 7. 注销驱动程序:在驱动程序不再使用时,可以使用函数`pci_unregister_driver`将驱动程序从内核中注销。 需要注意的是,以上步骤是一个简要的概述,实际的PCI驱动开发过程可能更加复杂,需要根据具体的设备和需求进行调整。 参考资料: "PCI驱动开发", IBM DeveloperWorks, http://www.ibm.com/developer*** Linux PCI Library Functions, https://www.kernel.org/doc/html/latest/driver-api/pci/pci-enable-device.html "pci_register_driver", Linux PCI Library Functions, https://www.kernel.org/doc/html/latest/driver-api/pci/pci-register-driver.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值