adc dma 中断 可以接收
This commit is contained in:
+14
-11
@@ -45,6 +45,15 @@ void adc_init(void)
|
||||
|
||||
DMA_Init(DMA1_Channel1, &DMA_InitStructure); //配置DMA1的1通道
|
||||
|
||||
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
|
||||
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
|
||||
DMA_Cmd(DMA1_Channel1,ENABLE);
|
||||
|
||||
|
||||
|
||||
ADC_DeInit(ADC1);
|
||||
@@ -74,11 +83,7 @@ void adc_init(void)
|
||||
ADC_StartCalibration(ADC1);
|
||||
while(ADC_GetCalibrationStatus(ADC1));
|
||||
|
||||
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
|
||||
|
||||
NVIC_InitStructure.NVIC_IRQChannel = ADC_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
|
||||
@@ -86,10 +91,8 @@ void adc_init(void)
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
|
||||
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
|
||||
DMA_Cmd(DMA1_Channel1,ENABLE);
|
||||
|
||||
ADC_ITConfig( ADC1, ADC_IT_EOC, ENABLE);//使能规则通道中断
|
||||
|
||||
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
|
||||
}
|
||||
|
||||
@@ -114,17 +117,17 @@ void DMA1_Channel1_IRQHandler(void)
|
||||
|
||||
if(DMA_GetFlagStatus(DMA1_IT_TC1))
|
||||
{
|
||||
printf("adc dma:%4d,%4d,%4d,%4d \n", adc_raw[0],adc_raw[1],adc_raw[2],adc_raw[3]);
|
||||
printf("adc-dma: %4d, %4d, %4d, %4d\n", adc_raw[0],adc_raw[1],adc_raw[2],adc_raw[3]);
|
||||
|
||||
/* 失能DMA1通道1,以防在中断过程中发生DMA传输 */
|
||||
DMA_Cmd(DMA1_Channel1, DISABLE);
|
||||
/* 如果DMA设置的是normal模式,需要手动重装计数器 */
|
||||
DMA1_Channel1->CNTR = sizeof(adc_raw);
|
||||
DMA1_Channel1->CNTR = 4;
|
||||
/* 清除中断标志位 */
|
||||
DMA_ClearITPendingBit(DMA1_IT_TC1);
|
||||
// DMA_ClearFlag(DMA1_FLAG_TC1);
|
||||
/* 重新使能DMA1通道1,开始工作 */
|
||||
//DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
|
||||
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
|
||||
DMA_Cmd(DMA1_Channel1,ENABLE);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user