- #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);
- }
|