




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DMA控制器8DMAC简介DMAC工作原理PL330指令集其他相关寄存器DMA编程实例第8章DMA控制器8.1DMAC简介
当需要在系统内存与高速外设或者内存的不同区域之间进行批量数据的快速传送时,采用查询或中断的方式并不能满足要求。DMA(DirectMemoryAccess,存储器直接访问)正是为解决这一问题提出来的,无需占用CPU,在DMA控制器的控制下,可以高速地完成外设和存储器之间数据的交换。CPU除了在数据传输开始和结束时做一些处理外,在传输过程中,CPU可以进行其他工作。这样,在大部分时间里,CPU和DMA都处于并行操作状态。DMAC(DirectMemoryAccessController)是一个自适应、先进的微控制器总线体系的控制器,它由ARM公司设计并基于PrimeCell技术标准。DMAC提供了一个AXI接口用来执行DMA传输,以及两个APB接口用来控制这个操作。DMAC在安全模式下用一个APB接口执行TrustZone技术,其他操作则在非安全模式下执行。图8.1是DMAC外部接口框图。第8章DMA控制器图8.1DMAC外部接口框图第8章DMA控制器图8.2DMAC原理框图第8章DMA控制器由图8.2可以看出,Exynos4412的DMA模块又分为两个子模块,DMA_mem和DMA_peri。其中,DMA_mem用于内存之间的数据传输;DMA_peri用于内存与外设之间进行数据传输。DMA_mem包括一个PL330模块,而DMA_peri包括两个PL330模块(分别为DMA0和DMA1)。每个PL330模块有32个中断源,但是每一次只能发送一个中断请求到中断控制器第8章DMA控制器8.2DMAC工作原理DMAC内部包括了指令处理模块,使得DMAC本身能够处理代码以控制DMA传送。这些指令代码存储在系统存储器中,DMAC通过AXI接口获取这些代码。DMAC的8个通道都是可配置的,且每个都支持单个并发线程的操作。除此之外,还有一个管理线程、专门用来初始化DMA通道的线程。DMAC使用了变长指令集,范围为1~6字节,并为每个通道提供了单独的PC寄存器。第8章DMA控制器1、工作过程当外设准备就绪,向DMA控制器(DMAC)发出DMA请求信号(DREQ)。DMAC收到此信号后,向CPU发出总线请求信号(HOLD)。CPU在完成当前总线操作后立即对DMA请求信号做出响应。DMAC获得总线的控制权。
DMAC获得总线的控制权后,向地址总线发出地址信号,指出传送过程需使用的内存地址。向外设发出DMA应答信号(DACK),实现该外设与内存之间的DMA传送。第8章DMA控制器(4)在DMA传送期间,DMAC发出内存和外设的读/写信号。(5)为了决定数据块传输的字节数,在DMAC内部必须有一个“字节计数器”。在开始时,由软件设置数据块的长度,在DMA传送过程中,每传送一个字节,字节计数器减1,减为0时,该次DMA传输结束。(6)
DMA过程结束时,DMAC向CPU发出结束信号(撤消HOLD请求),将总线控制权交还CPU。第8章DMA控制器2、传送的方式 I/O接口到存储器方式:I/O接口的数据利用DMAC送出控制信号,将数据输送到数据总线D0~D7上,同时DMAC送出存储器单元地址及控制信号,将存于D0~D7上的数据写入选中的存储单元中。这样就完成了I/O接口到存储器的一个字节的传送。第8章DMA控制器(2) 存储器到I/O接口方式:
在进行传送时,DMAC送出存储器地址和控制信号,将选中的存储器单元的内容读入数据总线的D0~D7,然后DMAC送出控制信号,将数据写到指定的端口中。DMAC再修改“地址寄存器”和“字节计数器”的内容。第8章DMA控制器(3) 存储器到存储器方式:
这种方式的DMA数据传送是用“数据块”方式传送。首先,送出存储器源的地址和控制信号,将选中内存单元的数据暂存,然后修改“地址寄存器”和“字节计数器”的值,接着,送出存储器目标的地址和控制信号,将暂存的数据通过数据总线写入存储器的目标区域中,最后修改“地址寄存器”和“字节计数器”的内容,当“字节计数器”的值减少到零时便结束一次DMA传送。第8章DMA控制器8.3PL330指令集1. DMAMOV
该指令是一条数据转移指令,它可以将一个32位的立即数移动到源地址寄存器、目标地址寄存器、通道控制寄存器3种类型的寄存器中。(1)源地址寄存器:该寄存器提供了DMA通道的数据源的地址。DMAC从该地址取得数据,每个通道都有自己的数据源地址寄存器。第8章DMA控制器表8.1通道源地址寄存器注:SA_n表示DMA通道n的源地址(SourceAddress)。第8章DMA控制器(2)目标地址寄存器:该寄存器提供了DMA的目标数据存放地址,和数据源地址寄存器是相互对应的。表8.2是每个通道的目标地址寄存器列表。表8.2通道目标地址寄存器第8章DMA控制器(3)通道控制寄存器:该寄存器可以控制DMA在AXI中的传输,并且该寄存器记录了一些关于目标与源寄存器的基本配置,如表8.3所示。图8.3是该寄存器的位分配顺序。表8.3通道控制寄存器第8章DMA控制器2. DMALD
该指令是一条DMAC装载指令,它可以从源数据地址中读取数据序列到MFIFO中,如果src_inc位被设置,则DMAC会自动增加源地址的值。
其指令格式为:DMALD[S|B]其中:[S]——如果S位被指定,则bs位被置0,且x转换为0。[B]——如果B位被指定,则bs位被置0,且x转换为1。第8章DMA控制器3. DMAST
该指令与DMALD相互对应,是一条DMA存储指令,是将MFIFO中的数据转移到目的地址中。目的地址是由目的地址寄存器所指定的,如果dst_inc被置位,则DMAC会自动增加目的地址的值。
其指令格式为:DMAST[S|B]其中:[S]——如果S位被指定,则bs位被置0,且x转换为1。[B]——如果B位被指定,则bs位被置1,且x转换为1。第8章DMA控制器4. DMARMB
该指令是读内存栅栏指令。5. DMAWMB
该指令是写内存栅栏指令。6. DMALP/DMALPEND
该指令用来指定某个指令段的开始位置,需要DMALPEND指定该指令段的结束位置,一旦指定,DMAC会循环执行介于DMALP与DMALPEND之间的指令,直到循环次数为0结束。第8章DMA控制器8. DMASEV
使用该指令可以产生一个事件信号,可以有以下两种模式:(1)产生一个事件<event_num>。(2)产生一个中断信号,irq<event_num>。其指令格式为:DMASEV <event_num> 9. DMAEND
该指令用来通知DMAC结束一次操作集合第8章DMA控制器其中,[10:8]用来确定通道号。对应关系为:b000 = DMA通道0;b001 = DMA通道1;b010 = DMA通道2;b011 = DMA通道3;b100 = DMA通道4;b101 = DMA通道5;b110 = DMA通道6;8.4其他相关寄存器 DBGINST0
该寄存器可控制调试指令、通道、DMAC线程信息。图8.10DBGINST0位控制第8章DMA控制器2. DBGINST1
该寄存器控制内存中设置的指令段首地址,也就是DMAC第一次取指令的地址。DBGCMD
该寄存器控制调试命令的执行,通过配置它,可以控制DMAC执行一些指定的工作。第8章DMA控制器8.5DMA编程实例8.5.1DMA驱动程序编写步骤1.申请DMA通道
在申请DMA通道之前至少需要确定外设ID(filter_param)和通道类型(mask)。外设ID可以通过数据手册或者PL330获得,通道类型一般设置为DMA_SLAVE或DMA_CYCLIC。
在Linux3.8的内核中,通过三星公司提供的以下API完成这一操作:sdd->dma->ch=sdd->ops->request(dma->dmach,&req);第8章DMA控制器2.设置DMA通道传输参数
设置DMA通道方向、通道设备端的物理地址(如果使用DMA向SPI收发数据,则为SPI数据寄存器的物理地址)、通道字节宽度等信息。
在Linux3.8内核中,通过三星公司提供的以下API完成这一操作:sdd->ops->config(dma->ch,&config);第8章DMA控制器3.获取desc添加回调函数
在驱动函数中,将发送数据个数、通道方向、数据缓存的总线地址等参数赋值给scatterlist结构体,通过调用dmaengine_prep_slave_sg或dmaengine_prep_dma_cyclic获取desc,再将回调函数指针传给desc->callback。
在Linux3.8内核中,通过三星公司提供的以下API完成这一操作:
sdd->ops->prepare(dma->ch,&sdd->rx_info);第8章DMA控制器4.递交配置好的通道
调用dmaengine_submit((structdma_async_tx_descriptor*)desc),将desc提交到DMA驱动等待队列,通常第3和第4步都是在DMA驱动的prepare函数中实现的。
在Linux3.8内核中,通过三星公司提供的以下API完成这一操作:
sdd->ops->prepare(dma->ch,&sdd->rx_info);第8章DMA控制器5.开启通道,等待回调函数
用dma_async_issue_pending(
)函数激活挂起的等待队列,如果此时通道空闲,则开始传输队列中的数据,传输结束后调用回调函数。
在Linux3.8内核中,通过三星公司提供的以下API完成这一操作:sdd->ops->trigger(dma->ch);第8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论