当前位置: 首页 > news >正文

基于zedboard的DMA设计笔记

 

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端口地址

 

3. DEMO中的设计

PIO传输就是Programmable IO,通常用于配置寄存器等小数据的传输,一次传输32bit数据。首先需要明确一点,PIO传输都用主机(也就是PC电脑RT端)主动发起,进行一次PIO传输主要需要地址和数据两个参数。

 

 

 

那么我们来看一下,这两个参数在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]

 

 

 

 

待续............

 

转载于:https://www.cnblogs.com/daisyuer/p/6677089.html

相关文章:

  • WePY 在小程序性能调优上做出的探究
  • EL表达式学习笔记
  • Lucene 高级搜索
  • linux 小白启航之路-搭建linuxDHCP中继服务器
  • hdu 4122 Alice#39;s mooncake shop (线段树)
  • 三栏布局总结
  • date命令使用文档
  • Qproces的启动
  • [MAC OS] 常用工具
  • Template.
  • Scrum培训心得体会
  • java基础讲解12-----Swing
  • javascript匿名函数及闭包深入理解及应用
  • 如何看懂ORACLE执行计划
  • 关于研发团队建设的一点思考
  • canvas绘制圆角头像
  • eclipse的离线汉化
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • IDEA 插件开发入门教程
  • Java超时控制的实现
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL-事务管理(基础)
  • python 装饰器(一)
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • SpringBoot 实战 (三) | 配置文件详解
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 京东美团研发面经
  • 普通函数和构造函数的区别
  • 前端工程化(Gulp、Webpack)-webpack
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 译有关态射的一切
  • 找一份好的前端工作,起点很重要
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #git 撤消对文件的更改
  • #pragma 指令
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (poj1.3.2)1791(构造法模拟)
  • (过滤器)Filter和(监听器)listener
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (算法)Travel Information Center
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)认识微服务
  • (转)Google的Objective-C编码规范
  • (转)shell调试方法
  • (转载)Google Chrome调试JS
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net 代码性能 - (1)
  • .NET 设计模式初探
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET简谈设计模式之(单件模式)