浮点系列芯片ADSP2116中DMA的应用

来源:IC解密中的DMA
2.1   ADSP2116中DMA的数据传输类型
ADSP2116中的DMA包含14条独立通道,可完成下列类型的数据传输操作:
●片内存储器与片外存储器或片外设备之间的传输操作;
●片内存储器与其它ADSP2116的片内存储器之间的传输操作;
●片内存储器与主处理器之间的传输操作;
●片内存储器与串行口之间的传输操作;
●片内存储器与Link口之间的传输操作;
●片内存储器与SPI口之间的传输操作;
●片外存储器与片外设备之间的传输操作。
2.2 ADSP2116 中与DMA有关的寄存器
   DMA的编程实际上是通过内部核心处理单元或外部主机对片内有关的I/O寄存器设置来完成的,与DMA有关的I/O寄存器如表1所列。控制寄存器主要用来设置数据传输的方向、数据格式、是否链式等操作;参数寄存器用来设置数据传输的地址、数目等信息;数据缓存器则主要用来缓存传输的数据,以提高数据的传输率。这些I/O寄存器都被映射到片内存储器的前256个地址上。
2.3 ADSP2116中DMA一般传输过程的设置
DMA一般传输过程的设置步骤如下:
(1)设置对应通道的参数寄存器
(2)设置对应通道的DMA控制寄存器,并将其中的DMA使能位设为有效
(3)开始DMA数据传输
(4)DMA传输结束后,产生对应的中断,并通过程序对中断进行处理。
2.4 ADSP2116x中的链式DMA
   为了减少由DMA引起的中断,ADSP2116x中的DMA控制器提供了链式DMA功能。所谓链式DMA,是指在当前的DMA结束时,I/O处理器能够自动加载DMA参数并开始下一个DMA传输。利用这种特性,程序能够设置多个具有不同属性的DMA传输。在链式DMA过程中,通常先把每次DMA传输的有关参数写成一个传输控制块(TCB),并把它们存储在片内。传输过程中,在当前的DMA结束时,I/O处理器将对链式指针寄存器(CPx)进行控制以使其指向存储在片内的下一个TCB。
   CPx在链式DMA中具有非常重要的作用,它是一个19位的寄存器,其中低18位是偏移地址,在ADSP2116x中,这组偏移地址加上0x00040000后才是片内存储器中的实际地址,其中最高一位为中断控制位。该位在被设置的情况下,I/O处理器将在链式DMA结束时产生一个中断,实际上CPx指向的是TCB的最大地址,在TCB中,各有关DMA参数寄存器的排列顺序如表2所列。表中的“x”代表所用到的DMA通道。链式DMA传输过程的设置步骤如下:
(1)在片内存储器中设置好所有的TCB
(2)设置对应通道的控制寄存器,并将其中的DMA使能位和链式使能位设为有效
(3)将第一个TCB的最大地址写到CPx中,并开始链式DMA的传输
(4)传输结束后,产生对应的中断。
有两点要特别注意:第一是链式DMA只能发生在同一DMA通道内;二是SPI口不支持链式DMA。