DMA
- 作用
为cpu分担(内存与外设通信的)压力
cpu 的处理方式是
获取总线占用权
通过AHB总线从内存读数据到CPU中的通用寄存器
通过AHB->APB总线将CPU的通用寄存器中的数据写到外设中
DMA 的处理方式是
获取总线占用权
通过AHB总线从内存读数据到DMA的FIFO中
通过AHB->APB总线将DMA中的FIFO中的数据写到外设中
问题:
DMA和CPU用的是同一总线吗?
stm32f407 好像不是 ,cpu 用 S0(I) S1(D) S2(S).各功能DMA分别用S3-S7中的一个.
s3c2440 好像是, cpu 用 ahb , dma 用 ahb和apb(dma位于ahb和apb的bridge上)
DMA在工作的时候,CPU可以干什么?
应用DMA的场景?
-
DMA在芯片中的位置(等同于CPU)
-
常见实现形式及实现概念
1.专用DMA
2.通用DMA
channel 通道 ,行,表示功能
stream 数据流 ,列,表示序号
例如16数据流,8通道 ,可以画 16行*8列,可以有 16*8个单元格.每个单元格表示一个DMA对(源地址,目的地址) // 如果只标识一个,默认另一个是内存.
例如当你选中了 1数据流,1通道的时候, DMA对是(内存,串口1的TX) ,表示你可以利用这个DMA对来 实现 内存->串口1的TX 数据传送.
- 常见工作方式
#############################
############################# 开始
#############################
1、当外设有DMA需求,并且准备就绪,就向DMAC控制器发出DMA请求信号DREQ。
: 外设 ----DMA请求信号DREQ----> DMAC
2、DMAC接到DMA请求信号后向CPU发出总线请求信号HRQ。该信号连接到CPU的HOLD信号。
: DMAC ----总线请求信号HRQ-----> CPU
3、CPU接到总线请求信号以后,如果允许DMA传输,则会在当前总线周期结束后,发出DMA响应信号HLDA。
一方面CPU将控制总线、数据总线和地址总线置高阻态,即放弃对总线的控制权;
一方面CPU将有效的HLDA信号送给DMAC,通知DMAC,CPU已经放弃了对总线的控制权。
: CPU ----响应信号HLDA -------> DMAC
4、DMAC获得对总线的控制权,并且向外设送出DMAC的应答信号DACK,通知外设可以开始进行DMA传输了。
: DMAC ----应答信号DACK -------> 外设
#############################
############################# 过程
#############################
5、DMAC向存储器发送地址信号和向存储器及外设发出读/写控制信号,控制数据按初始化设定的方向传送,实现外设与内存的数据传输。
: DMAC ---- 地址及读写控制信号-------> 内存
: DMAC ---- 读写外设寄存器 --------> 外设 // 会在总线上形成怎样的时序
#############################
############################# 结束
#############################
6、数据全部传输结束后,DMAC向CPU发HOLD信号,要求撤销总线请求信号。CPU收到该信号以后,使HLDA无效,同时收回对总线的控制权。
: DMAC ---- HOLD(撤销总线请求信号) ---------- CPU
: CPU ---- HLDA无效 ---------- DMAC
- 常见软件操作过程
1.选中DMA对,设置源地址,目的地址,设置传输大小
2.设置开始传输
3.利用 循环或者定时或者中断方式来获悉 传输结束
实例
- 51单片机与DMA
51单片机是没有DMA的,不仅仅你说的这个型号,抄所有的51单片机都没有,当然增强型的C8051除外。
要想是普通51单片机具有DMA功能,知可以用8237来扩展,8237是一款比较老的道DMA扩展芯片了,典型电路很多,可以直接从网上找到。
http://www.elecfans.com/emb/danpianji/20171206595614_a.html
http://www.elecfans.com/dianzichangshi/20171206596218.html
- cortex-m单片机与DMA
STM32F103c8
DMA
– 7-channel DMA controller
14个数据流,8个通道
通道,行,表示功能(例如SPI,I2C)
数据流,列,表示序号 (例如SPI1 SPI2 SPI3)
– Peripherals supported: timers, ADC, SPIs,I2Cs and USARTs
stm32f407zgt6
General-purpose DMA
16-stream DMA controller with FIFOs and burst support
8 个通道
(x-stream,y-channel) 对应一个外设 // 共 16*8个项
USB-dedicated DMA
USB 2.0 high-speed/full-speed device/host/OTG controller with dedicated DMA, on-chip full-speed PHY and ULPI
// 此代码完成了 边打印内存数据(DMA) 边显示数据(CPU)
// 初始化
MYDMA_Config(DMA2_Stream7,4,(u32)&USART1->DR,(u32)SendBuff,SEND_BUF_SIZE);//DMA2,STEAM7,CH4,外设为串口1,存储器为SendBuff,长度为:SEND_BUF_SIZE.
MYDMA_Enable(DMA2_Stream7,SEND_BUF_SIZE);//开始一次DMA传输!
// 此时 DMA 在传输数据,串口1 在 吐数据
// 此时CPU 可以执行下面的代码,关键是此时CPU不能访问总线了(不能访问flash中的代码,不能访问ram,下面的代码和变量其实在cache 里面)
while(1){
if(DMA2->HISR&(1<<27)) //等待DMA2_Steam7传输完成
{
DMA2->HIFCR|=1<<27; //清除DMA2_Steam7传输完成标志
break;
}
pro=DMA2_Stream7->NDTR; //得到当前还剩余多少个数据
}
- s3c2440
LCD-dedicated DMA
LCD controller (up to 4K color STN and 256K color TFT) with LCD-dedicated DMA
General-purpose DMA
· 4-ch DMA controllers with external request pins
7个数据流,共28项
· Supports memory to memory, IO to memory,memory to IO, and IO to IO transfers
· Burst transfer mode to enhance the transfer rate
Peripherals supported:
timer
dma request mode
usb device controller
dma
i2c
dma
spi
dma
DMA-based or interrupt-based operation
camera
dma
pwm
4-ch 16-bit Timer with PWM / 1-ch 16-bit internal timer with DMA-based or interrupt-based operation
uart
3-channel UART with DMA-based or interrupt based operation
interrupt
4 DMA interrupt source
IIS-Bus Interface
· 1-ch IIS-bus for audio interface with DMA-based operation
SD Host Interface
· Normal, Interrupt and DMA data transfer mode(byte, halfword, word transfer)
· DMA burst4 access support (only word transfer)
- i.mx6ull
Smart DMA enables data transfer between non-mastering peripherals and external or internal memories
Connectivity peripherals, timers and External Memory Interfaces:
Embedded DMAs
其他
- DMA与总线矩阵
- DMA传输过程及物理组成
- arm 的 DMA
在 http://infocenter.arm.com/help/index.jsp 中的 corelink控制器和外设中的 system controllers 中,包括
DMA-330 DMA Controller
PL23x - PrimeCell µDMA Controller
PL08x - DMA Controller