DMA直接存储器访问
-
以存储器 ->外设为例
void DMA_InitConfig()
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);DMA_InitTypeDef DMA_InitStruct;
DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t) USART1_BASE+0x04 ; //外设地址
DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t) 0x10; //存储器地址(根据存储器位置)
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST; //传输方向
DMA_InitStruct.DMA_BufferSize = 5000; //传输的数目
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址增量模式
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; //存储器地址增量模式
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外设数据宽度
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //存储器数据宽度
DMA_InitStruct.DMA_Mode = DMA_Mode_Normal; //传输的模式
DMA_InitStruct.DMA_Priority = DMA_Priority_High;
DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel4,&DMA_InitStruct); //初始化
DMA_ClearFlag(DMA1_FLAG_TC4);
DMA_Cmd(DMA1_Channel4, ENABLE); //使能
}
基本配置包括:传输方向、存储器地址、外设地址、传输数目、传输数据的类型等
- DMA传输可以不经过cpu直接访问内存,不仅大大的提高了数据的读取,同时也减少了cpu的运行时间,提高了cpu的利用率