ARM DMA Controller PL330 使用经验分享
总体简介
DMAC提供一个AXI主接口来执行DMA传输,并提供两个APB从接口来控制其操作。DMAC采用TrustZone技术,其中一个APB接口运行在secure状态,另一个运行在非secure状态。 secure策略是ARM的TrustZone技术一部分。
整个DMA操作受一个小的指令集控制,这是与传统链表BD模式的不同之处。


由图中可以看出,其支持外设如UART或者GPIO主动trigger发起。
主要特性
▲AXI、APB接口
▲支持mem2me,mem2perh,perh2mem
▲支持scatter-gather BD模式
▲通道security可配
▲丰富的中断/事件源
可配置
AXI数据线宽度
通道数配置
内部buffer深度配置
读指令队列深度
写指令队列深度
外设请求接口数量
中断/事件数量
DMAC Diagram

DMAC里面包含一个指令处理模块,指令被存储在指令cache中。最多可以配置为8个通道,每个通道都可以执行一个独立的DMA操作,每个通道线程之间采用轮询仲裁。
MFIFO用于存储读/写的数据
读指令队列深度、写指令队列深度、MFIFO的深度会影响DMA的效率
apb接口可以访问状态寄存器也可以执行DMAC中的指令
apb的地址空间被限定在4KB
接口及功能
apb的时钟与axi为同一个时钟域,且接同一个时钟,但是其提供一个pclken可以控制apb的时钟速率,pclken必须是aclk的整数分频。
DMAC不支持独占或者lock访问,arlock[1:0]、awlock[1:0]需要tie low;不支持wrapping操作,arburst[1]、awburst[1]需要tie low;awcache[2],awcache[3]需要tie low;
ID_MSB与通道数量关联。DATA_MSB和STRB_MSB与配置的数据宽度关联。AWID、WID、ARID将于channel num关联起来,比如通道4发出的请求,其ID将为b100
DMAC会控制ARLEN和ARSIZE根据指令的长度和总线宽度的关系。
指令缓存长度≤AXI数据总线宽度
•ARLEN = 1
•ARSIZE = 以字节为单位的指令缓存长度。
指令缓存长度> AXI数据总线宽度
•ARLEN = 以字节为单位的指令缓存线长度与AXI数据总线宽度之比
•ARSIZE = 以字节为单位的AXI数据总线宽度。

用于设置DMAC的boot地址,boot_from_pc用于指示DMA manager的状态是stopped或exccuting
指令、source data、dst data都是从一个AXI走。
单channel内部带watchdog 防止过长占用总线
DMAC使用前,需要进行一系列软件初始化,这个就不再展开。

外设请求接口主要采用valid和ready握手协议
drtype[1:0]:
single传输请求
burst传输请求
承认flush请求
datype[1:0]:
single传输完成
busrt传输完成
flush请求
外设请求可以被mapping到任意的DMA channel去
DMA分通道线程和管理线程
一些禁止操作
边界不能跨越4K
不能出现wrapping burst
DMAC不支持非对齐的fix burst
不能发起一次资源长度大于MFIFO的请求,有可能会导致watchdog abort
通过使用得出,ARM的DMA与自身的平台耦合过深,只能用于ARM平台的IP开发
ARM DMA Controller PL330 使用经验分享的更多相关文章
- 阅读DMA Controller Core 官方手册
阅读DMA Controller Core 官方手册 DMA控制器框架图 怎样去设定一个DMA控制器 实例化DMA控制器 参数配置界面如下图所示: 对于width of the DMA length ...
- 走进异步世界-犯傻也值得分享:ConfigureAwait(false)使用经验分享
在上周解决“博客程序异步化改造之后遭遇的性能问题”的过程中,我们干了一件自以为很有成就感的事——在表现层(MVC与WebForms)将所有使用await的地方都加上了ConfigureAwait(fa ...
- sublime前端编辑器入门与个人使用经验分享
Sublime Text(以下简称sublime)是一款很好用的代码编辑器,小巧且很灵敏,几乎可以编写大部分主流的计算机语言代码,更是堪称前端代码编辑神器. 你百度一下会发现许多sublime的安装和 ...
- JS组件系列——Bootstrap 树控件使用经验分享
前言:很多时候我们在项目中需要用到树,有些树仅仅是展示层级关系,有些树是为了展示和编辑层级关系,还有些树是为了选中项然后其他地方调用选中项.不管怎么样,树控件都是很多项目里面不可或缺的组件之一.今天, ...
- XCODE的演变及使用经验分享
IOS编程使用的是XCODE 编译器,安装XCODE你需要一台MAC(黑苹果也可以,个人不推荐,不稳定),然后直接去MAC上的APP STORE上下载安装就行,很简单,再次不做过多介绍... OK,那 ...
- Bootstrap树控件(Tree控件组件)使用经验分享
前言:很多时候我们在项目中需要用到树,有些树仅仅是展示层级关系,有些树是为了展示和编辑层级关系,还有些树是为了选中项然后其他地方调用选中项.不管怎么样,树控件都是很多项目里面不可或缺的组件之一.今天, ...
- jqGrid使用经验分享(一)——jqGrid简单使用、json格式和jsonReader介绍
广大的读者朋友们大家好,很高兴又可以在博客中和大家分享我的开发经验了. 此次,我准备向大家介绍一个非常好用的jQuery表格插件——jqGrid. 如果您在实际项目中遇到web端表格展示功能的需求,又 ...
- 泡泡后台Couchbase缓存使用经验分享
一.导读 爱奇艺的社交业务“泡泡”,拥有日活用户6千万+,后台系统每日高峰期间接口QPS可以达到80K+,与视频业务的主要区别是泡泡业务更多地引入了与用户互动相关的数据,读.写的量均很大.无论是庞大的 ...
- Apache poi 使用经验分享
我在使用apache poi导入导出Excel做项目过程中,遇到了许许多多的问题,在此简单罗列. 1.xls和xlsx的区分:poi将2003以前和2007以后的excel封装成了两个不同的实现:HS ...
- php与redis使用经验分享 (转载)
一.安装 1.redis的下载及安装: 引用 mkdir /usr/local/redis cd /usr/local/redis wget http://redis.googlecode.com/f ...
随机推荐
- 如何通过C++ 将数据写入 Excel 工作表
直观的界面.出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件.在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最有效手段之一.这样不仅可以方便 ...
- 第一章 1.1.1节 Kubeadm安装K8S高可用集群
1.1 安装前必读 请不要使用带中文的服务器和克隆的虚拟机. 生产环境建议使用二进制的方式安装. 文档中的IP地址要更换成自己的IP地址,要谨记!!! 1.2 基本环境配置 kubeadm安装方式自1 ...
- 解读 Servlet 源码:GenericServlet,ServletConfig,ServletContext
解读 Servlet 源码:GenericServlet,ServletConfig,ServletContext 每博一文案 人活着,就得随时准备经受磨难.他已经看过一些书,知道不论是普通人还是了不 ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——20.汇编语言读硬盘实战
学习操作系统原理最好的方法是自己写一个简单的操作系统. 本讲我们设计一个简单的读硬盘实验.通过一定的方法使硬盘第二个扇区的前3个字节依次为1.2.3,最后3个字节依次为3.2.1,中间的506个字节全 ...
- 月光宝盒(vivo流量录制回放平台)正式对外开源
作者:vivo 互联网服务器团队- Liu Yanjiang 月光宝盒是一个基于流量录制回放的自动化测试平台,通过录制回放取代编写脚本进行自动化回归,提升测试效率和覆盖率.因为其解决方案具有很强的通用 ...
- Java并发(二)----初次使用多线程并行提高效率
1.并行 并行代表充分利用多核 cpu 的优势,提高运行效率. 想象下面的场景,执行 3 个计算,最后将计算结果汇总. 计算 1 花费 10 ms 计算 2 花费 11 ms 计算 3 花费 ...
- MySQL(二)字符集、比较规则与规范
1 字符集的相关操作 MySQL8.0之前的版本,默认字符集为latin1,8.0及之后默认为utfmb3.utfmb4,如果以前的版本忘记修改默认的密码,就会出现乱码的问题. 1.1 修改步骤 修改 ...
- 【SSM项目】尚筹网(五)项目改写:使用前后端分离的SpringSecurityJWT认证
在项目中加入SpringSecurity 1 加入依赖 <!-- SpringSecurity --> <dependency> <groupId>org.spri ...
- Lexicographic Order
Lexicographic Order (https://codeforces.com/group/L9GOcnr1dm/contest/422381/problem/L) 比较简单的一道题目,主要理 ...
- Java中的同步
Java中的同步 线程间的通讯首要的方式就是对字段及其字段所引用的对象的共享访问.这种通信方式是及其高效的,但是也是导致了可能的错误:线程间相互干涉和内存一致性的问题.避免出现这两种错误的方法就是 ...