根据zedboard的DMA设计笔记

图片 1

 

2.BAR0空间的定义:BAR(Base Address Register )

该组寄存器简称为BAR寄存器,BAR寄存器保存PCI设备采用的地点空间的基地址,该基地址保存的凡拖欠设施以PCI总线域中之地方。其中各一个设施最多好生出6只基址空间,但大多数装置不见面使这样多组地点空间。在PCI设备复位之后,该寄存器将存放PCI设备亟需用的基址空间大小,这段空间是I/O空间或存储器空间,如果是存储器空间该空间是否只是预取,系统软件对PCI总线进行配置时,首先获得BAR寄存器中的初始化信息,之后据悉处理器系统的部署,将合理的驻地址写副相应的BAR寄存器中。系统软件还好利用该寄存器,获得PCI设备以的BAR空间的长度,其方法是往BAR寄存器写入0xFFFF-FFFF,之后再次念博该寄存器。处理器访问PCI设备的BAR空间时,需要运用BAR寄存器提供的基地址。值得注意的凡,处理器使用存储器域的地点,而BAR寄存器存放PCI总线域的地址。因此处理器系统并无可知一直采用“BAR寄存器+偏移”的点子访PCI设备的寄存器空间,而需用PCI总线域的地方转换为存储器域的地方。如果x86处理器系统要能了IOMMU后,这有限单地点也并不一定相等,因此处理器系统一直使用此PCI总线域的情理地址,并无克管走访PCI设备的BAR空间的是。除此之外在Linux
PCI总线域的情理地址。而于pci_devàresource[bar].start参数中保留的地点已经通过PCI总线域到囤器域的地址转换,因此当编写Linux系统的配备驱动程序时,需要采取pci_devàresource[bar].start参数中的物理地址,然后重新经ioremap函数将大体地址转换为“存储器域”的虚拟地址。

 

有关地方:

user
application要使DW地址,配置空间地址是byte地址,将部署空间地址/4抱CFG端口地址

 

  1. DEMO中之筹划

PIO传输就是Programmable
IO,通常用于配置寄存器等小数码的传导,一破传输32bit数据。首先要明白一点,PIO传输都因此主机(也就是是PC电脑RT端)主动发起,进行同样潮PIO传输主要需要地方及数量两单参数。

 

 图片 2

 

那我们来拘禁一下,这简单个参数在BMD的计划受到凡是怎传递的。

BMD_64_RX_ENGINE.trn_rd[44:34]/[63:34] (PIO写/读)–>
BMD_64_RX_ENGINE.addr_o[10:0]–>BMD_EP.req_addr[10:0] ->BMD_EP_MEM_ACCESS.addr_i[6:0]
-> 地址用于索引寄存器

BMD_RX_ENGINE. wr_data_o[31:0](PIO写) ->
BMD_EP_MEM_ACCESS.wr_data_i[31:0]

 

 

 

 

待续…………

 

相关文章