TI DSP DMA配置

1 概述
DMA 控制器可以无需 CPU 介入而在内部存储器、外部存储器及片上外设之间传 送数据, HPI 接口也使用 DMA 辅助端口传送数据。 DMA 具有如下的特点:
DMA 可以独立于 CPU 工作;
4 个标准端口( port )与 DARAM SARAM 、外部存储器和外设相连;
一个辅助端口用于 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的配置
如下图所示, HPI DMA 通道的关系由 DMAGCR 寄存器中的 EHPIEXCL 位确定。
1 )当 EHPIEXCL=0 HPI DMA 通道共享 DARAM SARAM EMIF
2 )当 EHPIEXCL=1 HPI 独占 DARAM SARAM DMA 通道 只能访问 EMIF 和外设。
应当注意 HPI 不能访问外设端口。
4 服务链
每个标准口都可以对6个DMA通道以及HPI同时发来的请求进行仲裁,每个都标准口都有独立的功能服务链,即有软件和硬件来控制的,为访问请求提供服务的方案。虽然4个服务链功能上是独立的,但他们共享一个通用的配置。
DMA 通道和HPI具有可编程的优先级。通过寄存器DMACCR中的PRIO位可以设置每个通道的优先级,通过寄存器DMAGCR中的EHPIPRIO位可以设置HPI的优先级。
2 不管优先级如何设定,端口对通道和HPI的检测按照固定的顺序循环:012345HPI012345HPI……
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 位的数据总线,可以将 4 8 比特的数据片打包成一个 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 控制器的寄存器,其中有三个全局控制寄存器 DMAGCR DMAGSCR DMAGTCR 对所有的通道进行控制,此外还有通道配置寄存器用于对每个通道进行控制。
  
DMAGCR全局控制寄存器,用于配置HPI1
DMAGSCR*全局软件兼容寄存器,用于控制DMA获得目的单元、目的帧索引的方式1
DMAGTCR*全局超时控制寄存器,用于使能或禁止SARAMDARAM端口的超时计数器1
DMACCR通道控制寄存器,用于配置优先级等每个通道一个
DMACICR通道中断寄存器,用于中断使能每个通道一个
DMACSR状态寄存器每个通道一个
DMACSDP源和目的参数寄存器,用于配置数据块参数每个通道一个
DMACSSAL源起始地址寄存器(低地址)每个通道一个
DMACSSAU源起始地址寄存器(高地址)每个通道一个
DMACDSAL目的起始地址寄存器(低地址)每个通道一个
DMACDSAU目的起始地址寄存器(高地址)每个通道一个
DMACEN单元数量寄存器每个通道一个
DMACFN帧数量寄存器每个通道一个
DMACEI/DMACSEI单元索引寄存器每个通道一个
DMACFI/DMACSFI帧索引寄存器每个通道一个
DMACDEI*目的单元索引寄存器每个通道一个
DMACDFI*目的帧索引寄存器每个通道一个
DMACSAC*源地址计数寄存器每个通道一个
DMACDAC*目的地址计数寄存器每个通道一个
* 标注的寄存器只在 TMS320VC5509a TMS320VC5510 中应用。
1 DMA 全局控制寄存器
   
154Reserved

保留位
3Reserved1保留位(通常写入1
2FREE
0
1
遇到断点时的处理
停止 DMA 传输
继续 DMA 传输
1EHPIEXCL
0
1
HPI 的配置
与通道共享
独占内部 RAM
0EHPIPRIO
0
1
HPI 优先级
低优先级
高优先级
2 DMA 通道控制寄存器
   
1514DSTAMODE0011目的地址修改模式
1312SRCAMODE0011源地址修改模式
11ENDPROG
0
1
编程结束
10Reserved0保留位
9REPEAT
0
1
多次传输配置时的重复条件
在本次传输结束后,只有当   ENDPROG=1 ,才装入新的配置值,开始 下次传输
在本次传输结束后,立即装入新的配置 值,开始下次传输
8AUTOINIT
0
1
多次传输配置时的自动初始
自动初始禁止
自动初始使能
7EN
0
1
通道使能
禁止
使能
6PRIO
0
1
通道优先级
低优先级
高优先级
5FS
0
1
/ 单元同步
单元同步
帧同步
4-0SYNC同步事件
3 .源和目的参数寄存器
   
1514DSTBEN
00 01
10
11
目的端口突发使能
目的端口突发禁止
目的端口突发使能
保留
13DSTPACK
0
1
目的端口打包使能
禁止
使能
129DST
xx00
xx01
xx10
xx11
目的端口类型
目的端口为 SARAM
目的端口为 SARAM
目的端口为 EMIF
目的端口为 Peripherals
87SRCBEN
00 01
10
11
源端口突发使能
禁止
使能
保留
6SRCPACK
0
1
源端口打包使能
禁止
使能
52SRC源端口类型(同DST
10DATATYPE
00
01
10
11
数据传输单位
8
16
32
保留
4 .起始地址寄存器
寄存器名  
DMACSSAL 150SSAL源起始地址低16
DMACSSAUSSAU源起始地址高位
DMACDSALDSAL目的起始地址低16
DMACDSAUDSAU目的起始地址高位
5 .单元数量和帧数量寄存器
寄存器名  
DMACEN 150ELEMENTNUM每帧包含的单元数量
DMACFNFRAMENUM每块包含的帧数量
5 .单元索引寄存器和帧索引寄存器
寄存器名  
DMACEI/DMACSEI 150ELEMENTNDX单元索引值
DMACFI/DMACSFIFRAMENDX帧索引值
DMACDEIELEMENTNDX目的单元索引值
DMACDFIFRAMENTDX目的帧索引值
6 使用方法及实例
调用 DMA 库函数首先要在头文件中包含 csl_dma.h 文件,接下来介 DMA 配置结构。 DMA 配置结构名为 DMA_Config DMA_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_x x=0, 2
Int16 dmacfi ;DMA  通道帧索引寄存器
Int16 dmacei ;DMA  通道单元索引寄存器
对于  CHIP_5510PG2_x x=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_open DMA_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_config myhDma, &myConfig ; /*  配置通道  */
配置完成之后,调用 DMA_start ()函数开始 DMA 传送:
DMA_start myhDma ; /* 开始传送  */
等待 DMA 状态寄存器的帧状态位指示传输结束:
while  !DMA_FGETH myhDma, DMACSR, FRAME ))
{
}
之后关闭句柄:
DMA_close myhDma ; /* 关闭通道  */
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值