DMA控制器

1 概述
 
DMA控制器可以无需CPU介入而在内部存储器、外部存储器及片上外设之间传送数据,HPI接口也使用DMA辅助端口传送数据。DMA具有如下的特点:
 
DMA可以独立于CPU工作;
4个标准端口(port)与DARAMSARAM、外部存储器和外设相连;
一个辅助端口用于HPI和存储器之间的数据传送;
具有6个通道;
可以设置每个通道的优先级;
每个通道的传输可以由选定事件触发;
当操作完成之后,DMA控制器可向CPU发出中断。

HPI和存储器接口之间的数据传输不使用DMA通道,如果将数据从HPI传给外设接口,必须将存储器当作暂时缓存器使用。在C5509中,HPI和USB模块共用该辅助接口。

2 通道和端口
如前所述,DMA控制器有6个通道,用于4个标准端口之间的数据传送,每个通道可以从某个端口读取数据,也可以将数据写入某个端口。每个通道有一个FIFO缓冲区。如图所示,使数据的传输包括两个阶段:端口读取和端口写入。DMA先从源端口读取数据,并将其放到通道的FIFO缓冲区里,然后再从FIFO缓冲区取出写入目的端口。

DMA控制器的寄存器有两套:一套是配置寄存器,供CPU写入所需的配置值;另一套是工作寄存器,供DMA工作时使用。所以,DMA通道正在进行数据传输时,CPU可以写入下次传输的配置参数,而不影响正在进行的传输。但是,寄存器DMACSDP,DMACCR,DMACICR,DMACSR,DMAGCR,DMAGSCR,和DMAGTCR不能使用这种方式配置。
传输数据时,配置寄存器的内容复制到工作寄存器,DMA控制器则使用工作寄存器的值来控制通道的工作。只要使能DMACCR的en = 1,就进行上述复制。如果使用自动初始化模式DMACCR里的AUTOINIT = 1,则该复制在块传输之间发生。
3 HPI的配置
 

如下图所示,HPIDMA通道的关系由DMAGCR寄存器中的EHPIEXCL位确定。
 1)当EHPIEXCL=0HPIDMA通道共享DARAMSARAMEMIF
 2)当EHPIEXCL=1HPI独占DARAMSARAMDMA通道只能访问EMIF和外设。
应当注意HPI不能访问外设端口。
 
4 服务链
   每个标准口都可以对6个DMA通道以及HPI同时发来的请求进行仲裁,每个都标准口都有独立的功能服务链,即有软件和硬件来控制的,为访问请求提供服务的方案。虽然4个服务链功能上是独立的,但他们共享一个通用的配置。
    1 DMA通道和HPI具有可编程的优先级。通过寄存器DMACCR中的PRIO位可以设置每个通道的优先级,通过寄存器DMAGCR中的EHPIPRIO位可以设置HPI的优先级。
    2 不管优先级如何设定,端口对通道和HPI的检测按照固定的顺序循环:0,1,2,3,4,5,HPI,0,1,2,3,4,5,HPI……
    3 通道可以通过软件,单个地和服务链连接和断开。
4 DMAGCR库的EHPIEXCL位为1,可以使HPI单独访问DARAM和SARAM口。
5 一个通道与一个同步事件相联系,就不会产生DMA请求。
4 DMA传输配置
1.数据传输单位
DMA通道传输的数据单位有4种:
(1)字节(Byte):一个字节是DMA通道最小的数据传输单位;
(2)单元(Element):若干个字节构成的数据传输单位称为一个单元,一个单元可以是8位、16位或32位的。一个单元的传输是不能被中断的。
(3)帧(Frame):若干个单元构成的数据传输单位称为一帧。在一帧的传输过程中不能被中断。
(4)块(Block):若干个帧构成的数据传输单位称为一个块,每个通道一次或多次传输一个块。在块的传输过程中可以被中断。 对于DMA的每个通道,可以定义一块中包括帧的个数,一帧中单元的个数,一个单元中字节的个数。
2.数据打包

DMA控制器具有数据打包功能,比如选择8比特的数据传输而目的端口是32位的数据总线,可以将48比特的数据片打包成一个32比特的数据包进行传输,这样会提高DMA的传输速率。DMA制器的数据打包功能通过参数寄存器DMACSDP中的DST(SRC)PACK字段设定。

DST(SRC)PACK=0时,不打包;
DST(SRC)PACK=1时,对数据打包后再传输。
3.端口
DMA通道传输的目的端口和源端口由参数寄存器DMACSDP中的DST(SRC)字段来确定。
DST(SRC)= xx00时,目的(源)端口为SARAM
DST(SRC)= xx01时,目的(源)端口为DARAM
DST(SRC)= xx10时,目的(源)端口为EMIF
DST(SRC)= xx11时,目的(源)端口为Peripheral

4数据源和目的地址
DMA控制器采用字节地址,一个DMA通道的数据源起始地址由源起始地址寄存器DMACSSAL和DMACSSAU指定,其中DMACSSAL存放低16位地址,DMACSSAU存放高位地址;目的起始地址由目的起始地址寄存器DMACDSAL和DMACDSAU指定,其中DMACDSAL存放低16位地址,DMACDSAU存放高位地址。
DMA通道在数据传输过程中的地址修改方式由DMACCR寄存器中的DST(SRC) AMODE字段确定。
当DST(SRC)AMODE=00时,目的(源)地址为固定地址,用于单元的传输;
当DST(SRC)AMODE=01时,目的(源)地址在每个单元传输完后自动增加。根据数据的位数是8位、16位还是32位,地址分别增加1、2或4。
         当DST(SRC)AMODE=10时,目的(源)地址在每个单元传输完后自动增加一个索引值,索引值由单元索引寄存器DMACEI/DMACSEI确定。
        DST(SRC)AMODE=11时,目的(源)地址在每个单元传输完后按单元索引和帧索引自动增加,索引值由单元索引寄存器DMACEI/DMACSEI和帧索引寄存器DMACFI/DMACSFI确定,又称为双索引。
 
5 DMA控制器的寄存器
表中列出了DMA控制器的寄存器,其中有三个全局控制寄存器DMAGCRDMAGSCRDMAGTCR对所有的通道进行控制,此外还有通道配置寄存器用于对每个通道进行控制。
寄存器名
说    明
数    量
DMAGCR
全局控制寄存器,用于配置HPI
1
DMAGSCR*
全局软件兼容寄存器,用于控制DMA获得目的单元、目的帧索引的方式
1
DMAGTCR*
全局超时控制寄存器,用于使能或禁止SARAM和DARAM端口的超时计数器
1
DMACCR
通道控制寄存器,用于配置优先级等
每个通道一个
DMACICR
通道中断寄存器,用于中断使能
每个通道一个
DMACSR
状态寄存器
每个通道一个
DMACSDP
源和目的参数寄存器,用于配置数据块参数
每个通道一个
DMACSSAL
源起始地址寄存器(低地址)
每个通道一个
DMACSSAU
源起始地址寄存器(高地址)
每个通道一个
DMACDSAL
目的起始地址寄存器(低地址)
每个通道一个
DMACDSAU
目的起始地址寄存器(高地址)
每个通道一个
DMACEN
单元数量寄存器
每个通道一个
DMACFN
帧数量寄存器
每个通道一个
DMACEI/DMACSEI
单元索引寄存器
每个通道一个
DMACFI/DMACSFI
帧索引寄存器
每个通道一个
DMACDEI*
目的单元索引寄存器
每个通道一个
DMACDFI*
目的帧索引寄存器
每个通道一个
DMACSAC*
源地址计数寄存器
每个通道一个
DMACDAC*
目的地址计数寄存器
每个通道一个
*标注的寄存器只在TMS320VC5509aTMS320VC5510中应用。

1DMA全局控制寄存器
   
   
   
154
Reserved
保留位
3
Reserved
1
保留位(通常写入1
2
FREE
0
1
遇到断点时的处理
停止DMA传输
继续DMA传输
1
EHPIEXCL
0
1
HPI的配置
与通道共享
独占内部RAM
0
EHPIPRIO
0
1
HPI优先级
低优先级
高优先级

2DMA通道控制寄存器

   
   
   
1514
DSTAMODE
0011
目的地址修改模式
1312
SRCAMODE
0011
源地址修改模式
11
ENDPROG
0
1
编程结束
10
Reserved
0
保留位
9
REPEAT
0
1
多次传输配置时的重复条件
在本次传输结束后,只有当   ENDPROG=1,才装入新的配置值,开始下次传输
在本次传输结束后,立即装入新的配置值,开始下次传输
8
AUTOINIT
0
1
多次传输配置时的自动初始
自动初始禁止
自动初始使能
7
EN
0
1
通道使能
禁止
使能
6
PRIO
0
1
通道优先级
低优先级
高优先级
5
FS
0
1
/单元同步
单元同步
帧同步
4-0
SYNC
 
同步事件
3.源和目的参数寄存器
   
   
   
1514
DSTBEN
0001
10
11
目的端口突发使能
目的端口突发禁止
目的端口突发使能
保留
13
DSTPACK
0
1
目的端口打包使能
禁止
使能
129
DST
xx00
xx01
xx10
xx11
目的端口类型
目的端口为SARAM
目的端口为SARAM
目的端口为EMIF
目的端口为Peripherals
87
SRCBEN
0001
10
11
源端口突发使能
禁止
使能
保留
6
SRCPACK
0
1
源端口打包使能
禁止
使能
52
SRC
 
源端口类型(同DST
10
DATATYPE
00
01
10
11
数据传输单位
8
16
32
保留
4.起始地址寄存器
寄存器名
   
   
DMACSSAL
150
SSAL
源起始地址低16
DMACSSAU
SSAU
源起始地址高位
DMACDSAL
DSAL
目的起始地址低16
DMACDSAU
DSAU
目的起始地址高位
5.单元数量和帧数量寄存器
寄存器名
   
   
DMACEN
150
ELEMENTNUM
每帧包含的单元数量
DMACFN
FRAMENUM
每块包含的帧数量
5.单元索引寄存器和帧索引寄存器
寄存器名
   
   
DMACEI/DMACSEI
150
ELEMENTNDX
单元索引值
DMACFI/DMACSFI
FRAMENDX
帧索引值
DMACDEI
ELEMENTNDX
目的单元索引值
DMACDFI
FRAMENTDX
目的帧索引值
6 使用方法及实例
调用DMA库函数首先要在头文件中包含csl_dma.h文件,接下来介DMA配置结构。DMA配置结构名为DMA_ConfigDMA_Config包含如下成员:
 
Uint16 dmacsdp  ;DMA 通道控制寄存器
Uint16 dmaccr  ;DMA 通道中断寄存器
Uint16 dmacicr  ;DMA 通道状态寄存器
DMA_AdrPtr dmacssal ;DMA通道源起始地址(低字段)
Uint16 dmacssau ;DMA通道源起始地址(高字段)
DMA_AdrPtr dmacdsal ;DMA通道目的地址(低字段)
Uint16 dmacdsau ;通道目的地址(高字段)
Uint16 dmacen ;DMA 通道数据单元数量寄存器
Uint16 dmacfn ;DMA 通道帧数寄存器
对于 CHIP_5509, CHIP_5510PG1_xx=0, 2
Int16 dmacfi ;DMA 通道帧索引寄存器
Int16 dmacei ;DMA 通道单元索引寄存器
对于 CHIP_5510PG2_xx=0, 1, 2, 5509A, 5502
Int16 dmacsfi ;DMA 通道源帧索引寄存器
Int16 dmacsei ;DMA 通道源单元索引寄存器
Int16 dmacdfi ;DMA 通道目的帧索引寄存器
Int16 dmacdei DMA 通道目的单元索引寄存器
DMA_Config myconfig = {

……  }

声明配置结构之后,需要调用DMA_open函数,初始化DMA句柄
DMA_Handle myhDma;
myhDma = DMA_openDMA_CHA0, 0;/*打开 DMA通道 0 */
 
接下来调用DMA_config函数对DMA进行配置:
 
myconfig.dmacssal =
DMA_AdrPtr)(((Uint16)(myconfig.dmacssal<<1&0xFFFF;
myconfig.dmacdsal =
DMA_AdrPtr)(((Uint16)(myconfig.dmacdsal<<1&0xFFFF;
myconfig.dmacssau - (((Uint32 &src >> 15 & 0xFFFF;
myconfig.dmacdsau - (((Uint32 &dst >> 15 & 0xFFFF;
DMA_configmyhDma, &myConfig; /* 配置通道 */
 
配置完成之后,调用DMA_start()函数开始DMA传送:
 

DMA_startmyhDma; /*开始传送 */

等待DMA状态寄存器的帧状态位指示传输结束:
while !DMA_FGETHmyhDma, DMACSR, FRAME))
{
}
 
之后关闭句柄:
 

DMA_closemyhDma; /*关闭通道 */

DSP之直接存储器访问控制器相关推荐

  1. 【DSP】直接存储器访问(DMA)控制器——TMS320VC5509A(下篇)

    之前的上篇和中篇是对直接存储器访问(DMA)的一个大体上的讲解,下篇中主要是对一个DMA具体的实例进行讲解. 实例主要是两个文件:dma.c和vectors.s55. dma.c文件 /** Copy ...

  2. 【瑞萨RA_FSP】DMAC/DTC——直接存储器访问与数据传输

    文章目录 一.DMAC和DTC模块简介 1. DMAC 特性 2. DTC 特性 二.DMAC 模块框图分析 三.DMAC 传输模式 1. 正常传输模式 2. 重复传输模式 3. 块传输模式 4. 重 ...

  3. DSP原理学习笔记--第七章--增强直接存储器访问(EDMA)

    第七章 增强直接存储器访问(EDMA) 第七章 增强直接存储器访问(EDMA) DMA 数据传输 EDMA的特点 EDMA控制器的结构 EDMA传输中的术语 EDMA传输方式 同步事件 EDMA通道与 ...

  4. ARM/DSP+FPGA运动控制机器视觉控制器方案定制

    ARM/DSP+FPGA运动控制机器视觉控制器方案定制,信迈拥有成熟的相关方案. 机器视觉是计算机视觉的一个分支,工业自动化领域中的视觉控制或视觉应用,主要指的是通过前端光学摄像头,从采集到的数字化图 ...

  5. Redis构建频次访问控制器(一)

    Redis频次访问控制器 设计思路 频次控制旨在控制某个用户接触到某个广告的次数,以达到提高广告性价比的目的,一般来说,随着某个用户看到同一个广告频次的逐渐上升,点击率呈逐渐下降的趋势,因此在按照CP ...

  6. yii2 ajax访问控制器,如何在yii2中运行控制器动作作为ajax

    使用模态来解决它. use yii\bootstrap\Modal; use johnitvn\ajaxcrud\CrudAsset; Html::a('Custom', ['custom'], [' ...

  7. yii2 ajax访问控制器,yii2控制器Controller Ajax操作示例

    本文实例讲述了yii2控制器Controller Ajax操作的方法.分享给大家供大家参考,具体如下: request->isAjax) { $data = Yii::$app->requ ...

  8. 计算机三级嵌入式学习笔记(三)

    第三章-嵌入式系统硬件组成 考纲与考点分析 嵌入式系统硬件组成 嵌入式硬件组成与嵌入式处理芯片(组成,特点,类型,ARM的AMBA总线,嵌入式处理芯片的选型) 嵌入式系统的存储器(层次结构,分类,性能 ...

  9. 学习计算机嵌入式的笔记汇总

    第一章:嵌入式系统的概论 [RAM:随机存取存储器(数据存储器,电失):ROM只读存储器(程序存储器)] [静态SRAM 和 动态 DRAM 都是 易失性存储器] [对于内存容量而言,1KB=1024 ...

最新文章

  1. 28. Leetcode 25. K 个一组翻转链表 (链表-反转链表)
  2. 服务器用REG ECC内存的好处
  3. 去除字符串中的指定字符
  4. 卡夫卡如何分区_通过分区在卡夫卡实现订单担保人
  5. Python安装与环境变量的配置
  6. MySQL通配符代替引号,MySQL通配符替换
  7. java json处理入门
  8. 用perl发送数据到钓鱼站
  9. 飞桨PaddleHub带你环游世界,快来试试Python一键视频抠图吧
  10. 2018阿里笔试题一道
  11. 最全面测试计划书模板
  12. 汇编实验 用Radasm设计生成一个对话框,实现如图1.1所示的四则运算计算器
  13. Java JDK8下载 (jdk-8u251-windows-x64和jdk-8u271-linux-x64.tar)
  14. 图形验证码文字识别——pytesseract
  15. CHIA币的本质认识
  16. 限期4个月:苹果严控版号,开发者将如何自救?
  17. Python实现PDF(图片版)水印的去除
  18. 等分曲线轮廓,法线方向矩形
  19. 用Excel生成Ansys *VREAD函数所需的具有固定字符长度和小数位数的数据
  20. 【VC++游戏开发#六】2D篇 —— 粒子系统(一):浪漫唯美的场景之雪花飞舞

热门文章

  1. linux shell的sleep指定延时单位
  2. tensorflow之FIFOQueue
  3. 用户、话题、评论一网打尽,分享一个最强微博爬虫
  4. 监控的1080P、3MP和5MP是什么意思?区别是什么?
  5. python导入自定义模块_如何Import自定义的Python模块?
  6. sp许可证查询 旧sp电信经营许可证查询 电信业务
  7. c语言游戏角色建立,(c语言)游戏中由人物各种信息组成的结构体
  8. c lambda表达式 select 改变字段名称_拟提高回购价格上限至40.58元/股 吉宏股份称对未来业务发展有信心...
  9. php上传压缩文件,8行代码实现PHP上传RAR文件并解压
  10. tkinter label_tkinter版自制王者荣耀抽卡程序