听闻zedboard的DMA设计笔记

图片 1

 

二.BACR-V0上空的定义:BA昂Cora(Base Address Register )

该组寄存器简称为BA汉兰达寄存器,BA凯雷德寄存器保存PCI设备采取的地方空间的集散地址,该营地址保存的是该设施在PCI总线域中的地址。在那之中每三个设施最多能够有七个基址空间,但超越61%装置不会选拔那样多组地方空间。在PCI设备重新载入参数之后,该寄存器将存放在PCI设备亟需选取的基址空间大小,那段空间是I/O空间依然存款和储蓄器空间,如若是存款和储蓄器空间该空间是不是可预取,系统软件对PCI总线进行布署时,首先获得BAHaval寄存器中的开始化消息,之后遵照处理器系统的安排,将创制的集散地址写入相应的BA凯雷德寄存器中。系统软件还足以行使该寄存器,得到PCI设备使用的BA凯雷德空间的长度,其方法是向BAEnclave寄存器写入0xFFFF-FFFF,之后再读取该寄存器。处理器访问PCI设备的BARubicon空间时,必要选取BAPAJERO寄存器提供的集散地址。值得注意的是,处理器使用存款和储蓄器域的地点,而BASportage寄存器存放PCI总线域的地方。由此处理器系统并不能够间接行使“BA汉兰达寄存器+偏移”的章程访问PCI设备的寄存器空间,而必要将PCI总线域的地址调换为存款和储蓄器域的地点。若是x八⑥处理器系统使能了IOMMU后,这四个地点也并不一定相等,因而处理器系统一贯动用那一个PCI总线域的情理地址,并无法确认保障走访PCI设备的BA瑞鹰空间的不错。除了这一个之外在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,平日用于配置寄存器等小数目标传导,叁次传输3二bit数据。首先供给鲜美赞臣点,PIO传输都用主机(也正是PC计算机RT端)主动发起,实行1回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]

 

 

 

 

待续…………

 

相关文章