初级会员

- 积分
- 53
- 金钱
- 53
- 注册时间
- 2020-5-1
- 在线时间
- 9 小时
|
1金钱
void DMA_Config(void)
{
dma_single_data_parameter_struct dma_data_parameter;
/* enable clock */
rcu_periph_clock_enable(RCU_DMA1);
dma_deinit(DMA1, DMA_CH0);
/* set the DMA struct with the values */
dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));
dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
//data buffer
dma_data_parameter.memory0_addr = (uint32_t)(&adc_raw_val);
dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_data_parameter.periph_memory_width = DMA_MEMORY_WIDTH_16BIT;
dma_data_parameter.direction = DMA_PERIPH_TO_MEMORY;
dma_data_parameter.number = (5* 50);
dma_data_parameter.priority = DMA_PRIORITY_HIGH;
dma_data_parameter.circular_mode = DMA_CIRCULAR_MODE_ENABLE;
dma_single_data_mode_init(DMA1, DMA_CH0, &dma_data_parameter);
/* interrupt enable */
nvic_irq_enable(DMA1_Channel0_IRQn, 1, 0);
/* enable DMA transfer complete interrupt */
dma_interrupt_enable(DMA1, DMA_CH0, DMA_CHXCTL_FTFIE);
/* enable channe0 */
dma_channel_enable(DMA1, DMA_CH0);
}
-------------------------------------------------------------------------------------------
void ADC_Config(void)
{
adc_deinit();
/* adc clock enable */
rcu_periph_clock_enable(RCU_ADC0);
adc_clock_config(ADC_ADCCK_PCLK2_DIV4);
/* ADC mode */
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
/* data alignment */
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
/* ADC resolution 12Bit */
adc_resolution_config(ADC0, ADC_RESOLUTION_12B);
/* ADC channel counts */
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 5);//channel counts
/* ADC channel config */
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_4, ADC_SAMPLETIME_144); //12V
adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_5, ADC_SAMPLETIME_144); //5V
adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_6, ADC_SAMPLETIME_144); //3.3V
adc_regular_channel_config(ADC0, 3, ADC_CHANNEL_7, ADC_SAMPLETIME_144); //current
adc_regular_channel_config(ADC0, 4, ADC_CHANNEL_8, ADC_SAMPLETIME_144); //1.1V
/* Disable ADC0 External trigger */
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, EXTERNAL_TRIGGER_DISABLE);
/* extern trigger */
//adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_T0_CH1);
/* ADC DMA enable */
adc_dma_mode_enable(ADC0);
adc_dma_request_after_last_enable(ADC0);
adc_enable(ADC0);
delay_1ms(200);
/* ADC calibration */
adc_calibration_enable(ADC0);
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
}
当前DMA中断后无法获取正确的电压值,哪位大神帮忙看看,配置有问题吗?谢谢!
|
|