#include "dma.h"
void DMAx_Init(DMA_Channel_TypeDef* DMAy_Channelx,u32 par,u32 mar,u16 ndtr)
//通道,外设地址,存储器地址,传输数目
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
DMA_InitStructure.DMA_BufferSize=ndtr;//传输数据大小
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;//数据传输方向
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//设置存储器到存储器模式
DMA_InitStructure.DMA_MemoryBaseAddr=mar;//DMA存储器地址
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;//:存储器数据宽度选择,
//与外设宽度对应,因为是从存储器传到外设
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//内存地址递增
//我们自定义的存储区一般都是存放多个数据的,所以需要使能存储器地
//址自动递增功能
DMA_InitStructure.DMA_PeripheralInc=DMA_MemoryInc_Disable;//外设地址递增,外设数据寄存器
//只有一个,不能递增
DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;//设置 DMA 通道的优先级
DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;//DMA 传输模式选择
DMA_InitStructure.DMA_PeripheralBaseAddr=par;//DMA外设地址
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;//外设数据宽度选择,可以为字节(8 位)、半字
//(16 位)、字(32 位)
DMA_Init(DMAy_Channelx, &DMA_InitStructure);
}
void DMAx_Enable(DMA_Channel_TypeDef* DMAy_Channelx,u16 ndtr)//通道
{
DMA_Cmd(DMAy_Channelx, DISABLE);
DMA_SetCurrDataCounter(DMAy_Channelx,ndtr ); //传输的数据量
DMA_Cmd(DMAy_Channelx, ENABLE);
}
|