forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-12 f03cf3ae7a36954e64fc014e6bb7afd20c5a5247
HARDWARE/DMA/DMA.c
@@ -1,86 +1 @@
/******************************************************************************
 * Copyright (C) 2014-2015 HangZhou SiZhu Co.,LTD.
 *
 *-----------------------------------------------------------------------------
 * File:              DMA.c
 * Description:      initialize DMA config code
 * Author:           Lishoujian (867693272@qq.com)
 * Date:             Jan 8, 2015
 *****************************************************************************/
/* ----------------------- Platform includes --------------------------------*/
#include "dma.h"
#include "stm32f10x_rcc.h"
uint16 SendBuff[1000];
/******************************************
 * func:    DMA_Configuration
 * desc:    Initialize DMA
 * input:   none
 * output:  none
 * return:  none
 *****************************************/
void DMA_Configuration(void)
{
   DMA_InitTypeDef DMA_InitStructure;
   ADC_InitTypeDef  ADC_InitStructure;
   GPIO_InitTypeDef GPIO_InitStructure;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);   //Enable DMA
   DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;  //DMA peripheral base address
   DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;  //DMA memory base address
   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
   DMA_InitStructure.DMA_BufferSize = DMA_bufsize;  //DMA  send buffer size
   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
   DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
   DMA_Init(DMA1_Channel1, &DMA_InitStructure);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE |RCC_APB2Periph_ADC1, ENABLE);//enbale adc channel clock
   RCC_ADCCLKConfig(RCC_PCLK2_Div4);//72M /6 = 12M ;adc max sample frequence <= 14MHZ
   GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;//
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9;   //power
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //ÍÆÍìÊä³ö
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       //IO¿ÚËÙ¶ÈΪ50MHz
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  GPIO_SetBits(GPIOE,GPIO_Pin_9);
   ADC_DeInit(ADC1);//reset adc1
   ADC_InitStructure.ADC_Mode                =  ADC_Mode_Independent;   //ADC1 work mode:independent
   ADC_InitStructure.ADC_ScanConvMode        =  DISABLE;   //single channel mode
   ADC_InitStructure.ADC_ContinuousConvMode  =  ENABLE;   //
   ADC_InitStructure.ADC_ExternalTrigConv    =  ADC_ExternalTrigConv_None;   //triggered by software
   ADC_InitStructure.ADC_DataAlign           =  ADC_DataAlign_Right;   //ADC data align right
   ADC_InitStructure.ADC_NbrOfChannel        =  1;
   ADC_Init(ADC1, &ADC_InitStructure);//init adc1 register
   ADC_DMACmd(ADC1, ENABLE);
   ADC_Cmd(ADC1, ENABLE);//enbale adc1
   ADC_ResetCalibration(ADC1);//reset & calibrate adc1
   while(ADC_GetResetCalibrationStatus(ADC1));//waiting for ending
   ADC_StartCalibration(ADC1);//open calibrating adc1
   while(ADC_GetCalibrationStatus(ADC1));//waiting for ending
   ADC_RegularChannelConfig(ADC1, 9, 1, ADC_SampleTime_1Cycles5 );
}