zrk787

【征文】+转载:ADuCM360的DMA问题讨论

zrk787 在 2013-6-16 建立的討論區
最後回覆由zrk787於2013-6-16提供

ADuCM360的DMA问题讨论

作者:EEWORLD的dontium

链接:http://bbs.eeworld.com.cn/thread-372843-1-2.html

ADuCM360的DMA

ADuCM360的DMA,有12个专用通道,每个外设均有自己的可编程优先级的DMA通道,这样对数据交换提供了很大的方便。

DMA根据目的寄存器(存储器)的特点,可以灵活使用字节、半字、字的传输宽度。

DMA控制器支持外设至存储器、存储器至外设、存储器至存储器的数据传输。当处理器与DMA有相同的目的地址时,处理器将暂停一些对系统总线的控制周期。每一通道有各自的中断控制

DMA通道的优先级,由通道号及优先等级决定,每个通道都可以由DMAPRISET寄存器设置为约定优先级及高优先级。同一优先级,通道号越低,优先级越高。

. DMA Channel Assignment

  

Channel

 

Peripheral

0

SPI1 Tx

1

SPI1 Rx

2

UART Tx

3

UART Rx

4

I2C slave Tx

5

I2C slave Rx

6

I2C master Tx

7

I2C master Rx

8

DAC DMA output

9

ADC0

10

ADC1

11

SINC2  output/step detection

DMA通道控制数据结构,每通道都有原始数据结构及交替数据结构。对于简单传输模式及复合数据传输模式 ,均可使用原始的及交替数据结构。每个数据结构在内在中占居4 x 32bit存储空间,

. Channel Control Data Structure

  

Offset

 

Name

Description

0x00

SRC_END_PTR

Source end pointer

0x04

DST_END_PTR

Destination end pointer

0x08

CHNL_CFG

Control data configuration

0x0C

Reserved

Reserved

控制数据配置:

在CHNL_CFG寄存器中,可对DMA传输时的一些参数进行设置。如源及目的地址的增量、数据大小、控制数据结构、传输类型等

DMA传输类型

CHNL_CFG寄存器的最低三个决定传输类型。

1、无效型 (CHNL_CFG[2:0] = 000)。代表DMA通道没有允许。如果DMA传输结束后,就会置通道无效,以阻止重复相同的传输。

2、基本型(CHNL_ CFG[2:0] = 001)。DMA控制器可以配置为原始数据结构及交替数据结构。

3、自动请求型(CHNL_CFG[2:0] = 010)。它对控制器收到单一的请求时使用,对于象存储器拷贝时特别有用。它不用于外围的DMA传输。

4、乒乓传输(Ping-Pong (CHNL_CFG[2:0] = 011))。乒乓传输时,控制器使用一种数据结构传输,然后切换到另一种数据结构。这种类型很适用于外围到不同缓冲区的内存中。

5、存储器分散收集型(Memory Scatter-Gather (CHNL_CFG[2:0] =100 or 101))。这种类型,控制器必须设置成使用两种(primary andalternate data structures)数据结构。

6、外围分散收集型(Peripheral Scatter-Gather (CHNL_CFG[2:0] = 110 or 111))

地址计算

DMA控制器计算源地址,是基于SRC_END_PTR内容、源地址增量设置CHNL_CFG,及N_MINUS_1 (CHNL_CFG[13:4])的当前值。

同样地,目的地址的计算是基于DST_END_PTR的内容、目的地址增量CHNL_CFG以及N_MINUS_1 (CHNL_CFG[13:4])的当前值。

源地址 = SRC_END_PTR (N_MINUS_1 << (SRC_INC))

---       SRC_INC = 0,1, 2

源地址 = SRC_END_PTR

----  SRC_INC = 3

目的地址 = DST_END_PTR (N_MINUS_1 << (DST_INC))

---  DST_INC = 0, 1, 2

目的地址 = DST_END_PTR

---- DST_INC = 3

DMA寄存器及其配置

結果