DSP

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

2019-07-13 11:04发布

本文根据《TMS320VC5509 Direct Memory Access (DMA) Controller Reference Guide (Rev. A)》——TI官方提供的文档,翻译整理得到。 TMS320VC5509A资料的官方下载路径: TMS320VC5509A官方提供文档下载(全) TMS320VC5509A官方提供文档下载(DMA)  

DMA控制器简介

当CPU在后台工作时,DMA控制器可以:
  1. 实现片内存储器、片外存储器、片上外围设备之间传送数据;
  2. 在主机接口(HPI)和存储器直接传送数据。
DMA控制器特征:
  1. DMA操作独立于CPU;
  2. 有4个标准端口,每个数据源(内部双口存取RAM、内部单口存取RAM、外部存储器、外设)对应一个;
  3. 有一个辅助端口,控制主机接口HPI和内存之间的数据传输;
  4. 6条通道容许DMA控制器在标准端口之间保持6个独立块传输;
  5. 通过位指定每条通道的低或高优先级;
  6. 事件同步功能,每条通道的数据传输可以独立于事件发生;
  7. 每条通道都可以申请中断;
  8. 软件可选择更新数据传输源和目标地址;
  9. 有一个专用空闲控制位域。
下图是DMA控制器功能框图:  

DMA控制器通道和端口存取方式

DMA控制器有6条通道,在4个标准端口之间传输数据,每个通道从1个端口(数据源)读取数据、写数据到相同端口或另一端口(目标)。每条通道有1个先进先出(FIFO)缓冲器,允许数据传输分成2个阶段。端口读访问,传输来自于源端口的数据到FIFO缓冲器;端口写访问,传输FIFO缓冲器中的数据到目标端口。在1条通道中,传输数据所需要的一系列条件称为通道上下文。 在6条通道中,每一条都包含1个可编程和可更新寄存器结构。也就是说,每条DMA通道有两套寄存器,即设置寄存器和工作寄存器。通过代码可以修改配置寄存器。当数据正在传输时,配置寄存器的内容被复制到工作寄存器,并且DMA控制器使用工作寄存器去控制通道动作。只要通过代码使能通道(DMACCR中EN=1),配置寄存器的内容就被复制到了工作寄存器中。此外,如果自动初始化模式被打开(DMACCR中AUTOINIT=1),复制工作发生在两个块传输中间。 当DMA控制器以当前设定状态正在运行时,可以通过编程修改一些配置寄存器,改变下一次数据块的传输。下次传输将使用新的配置,而不需要停止DMA控制器。DMACSDP、DMACCR、DMACSR、DMAGCR、DMAGSCR、DMAGTCR寄存器不能被修改。当DMA通道正在运行时,如果修改这些寄存器,会引起对通道不可预料的操作。

DMA通道自动初始化

一个数据块传输完成后,DMA控制器自动地使通道无效。如果通道需要再次使用,CPU重新编程,设定通道新配置,并重新使能DMA通道;或者DMA控制器自动地重新初始化设置和重新使能通道。 当自动初始化设定被使用时,一次数据块传输完成。DMA控制器自动地从配置寄存器到工作寄存器重新复制通道配置值,并重新使能通道,使通道再次工作。自动初始化设定通过设定通道寄存器DMACCR的AUTOINIT位来实现。 当设定为自动初始化时,DMACCR中ENDPROG和REPEAT两位被使用。ENDPROG是一个握手控制位,用于CPU和DMA控制器寄存器复制过程的状态通信过程。REPEAT用来控制DMA控制器是否等待来自CPU对配置寄存器已经被复制完成的指示。 通道控制寄存器(DMACCR)部分字段 位 字段 值 描述 11 ENDPROG 0 1 DMA控制器已经完成了对寄存器设置的复制工作,配置寄存器准备好编程 结束编程 9 REPEAT 0 1 当ENDPROG=1时重复,一旦DMA传输完成,自动初始化将等到ENDPROG=1后再执行 无论ENDPROG位,一旦DMA传输完成,自动初始化将执行 8 AUTOINIT 0 1 自动初始化无效,当前数据块传输完成后,通道停止工作 自动初始化使能,当前数据块传输完成后,DMA控制器重新初始化通道并开始新的传输

DMA数据传输单元

DMA控制器有4种数据传输单元,即字节(Byte)、要素(Element)、帧(Frame)、块(Block)。字节是一个8位值,是DMA数据传输的最小单元。要素是一个或多个字节作为一个单元去传输,取决于编程数据类型,一个要素可以是一个8位、16位或者32位的值。一个要素的传输不能被打断。帧时由一个或多个要素构成,作为一个单元去传输,帧传输时能在要素之间被中断。块是由一个或多个帧构成,每条通道能传输一个块数据一次或多次。数据块的传输在帧之间或要素之间能被中断。

通道起始地址配置

当一个数据在DMA通道中传输时,读的第一个地址称为源起始地址,写入的第一个地址称为目标起始地址。这些都是字节地址。对应DMA来说,在存储器或I/O空间,每8位对应一个地址。每条通道包括下列定义开始地址的寄存器,同时DMA控制器能够访问所有内部、外部存储器和I/O空间(包括DSP外设寄存器)。 DMA传输起始地址寄存器 寄存器名 装入内容 寄存器名 装入内容 DMACSSAL 源起始地址(低位部分) DMACDSAL 目标起始地址(低位部分) DMACSSAU 源起始地址(高位部分) DMACDSAU 目标起始地址(高位部分) 1、存储器起始地址 CPU使用23位地址,DMA控制器使用24位地址。为了将源或目标地址装入起始地址寄存器,需要执行下列操作。
  1. 识别正确的地址。如果有一个字地址,左移1位形成23位地址。
  2. 装入字节地址的16位最低有效位到DMACSSAL寄存器或DMACDSAL寄存器。
  3. 装入字节地址的8位最高有效位到DMACSSAU寄存器或DMACDSAU寄存器的低8位。
2、I/O起始地址 对于I/O空间映射,CPU使用16位字地址,DMA控制器使用17位字节地址。为了将源或目标地址装入起始地址寄存器,需要执行下列操作。
  1. 识别正确的地址。如果有一个字地址,左移1位形成17位地址。
  2. 装入字节地址的16位最低有效位到DMACSSAL寄存器或DMACDSAL寄存器。
  3. 装入字节地址的最高有效位到DMACSSAU寄存器或DMACDSAU寄存器的最低有效位。