DMA存储器

DMA:direct memory access :直接存储器访问

DMA将数据从一个地址空间复制到另一个地址空间,在外设和存储器之间或者存储器与存储器之间进行高速数据传输。

DMA:数据传输不需要cpu

DMA传输参数须知:
数据源地址
数据传输位置的目标地址
数据传输量
传输模式

stm32由2个DMA控制器,DMA1有7个通道,DMA2有5个通道

从外设(TIMx[x=1,2,3,4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1,2]和USARTx=[x=1,2,3] )产生的7个DMA请求

从外设(TIMx[5,6,7,8]、ADC3、SPI/I2S3、UART4、DAC通道1,2和SDIO)产生的5个请求,经逻辑或输入到DMA2控制器

DMA传输时外设对DMA控制器发出请求,DMA工作,DMA控制器从AHB外设获取ADC采集的数据,由DMA通道存放再SRAM。

发生一个事件,外设向DMA控制器发送一个请求信号。

DMA控制器访问发出请求的外设,收到应答信号,外设释放请求,一旦外设释放请求,DMA控制器撤销应答信号。

外设数据寄存器从当前存储器地址取数据,第一个传输的开始地址时DMA_CPARx或DMA_CMARx寄存器指定的外设基地址或存储器单元。
存数据到外设同理

执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。

DMA传输方式:
DMA_Mode_Normal正常模式
DMA_Mode_Circular循环传输模式

仲裁其的作用是去欸的那个各个DMA传输的优先级,根据通道请求的优先级来启动外设/存储器的访问

外设和存储器传输数据量可以通过DMA_CCRx寄存器的PSIZE和MSIZE编程。

在软件设置了DMA_CCRx寄存器中的EN位启动DMA通道时,DMA传输将马上开始。当DMA_CNDTRx寄存器变为0时,DMA传输结束。

每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断

DMA配置参数包括:通道地址、优先级、数据传输方向、存储器/外设数据
宽度、存储器/外设地址是否增量、循环模式、数据传输量。

DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7)

DMA通道x配置寄存器(DMA_CMARx)

DMA库函数配置过程:
使能DMA时钟:RCC_AHBPeriphClockCmd();
初始化DMA通道:DMA_Init();
使能外设DMA;
以串口为例:调用函数USART_DMACmd();
使能DMA通道传输;函数:DMA_Cmd();
查询DMA传输状态。函数:DMA_GetFlagStatus()

你可能感兴趣的:(硬件,uboot,linux,物联网)