реклама на сайте
подробности

 
 
> Запуск ADC из прерывания таймера
Controlplast
сообщение May 27 2016, 10:20
Сообщение #1





Группа: Участник
Сообщений: 5
Регистрация: 19-05-16
Пользователь №: 91 798



Подскажите кто знает. STM32F303, настроено ADC - DMA, все работает если запускать не из прерывания (например таймера), в прерывании просто поднимаю флаг, а запускаю по флагу из основного цикла. Нужно запустить из прерывания, программа виснет.
CODE
// Обработка прерываний DMA ......
....
void TIM2_IRQHandler(void) //Собственно прерывание по которому хочется запустить цикл ADC c DMA
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);


if (side==0){ //Переставляем банки для результатов ADC
DMA1_Channel1->CMAR = ADMA1;
DMA2_Channel1->CMAR = ADMA2;
side=1;
} else {
DMA1_Channel1->CMAR = BDMA1;
DMA2_Channel1->CMAR = BDMA2;
side=0;
}
bsize1 = 5164;
bsize2 = 5164;
DMA1_Channel1->CNDTR = bsize1;
DMA2_Channel1->CNDTR = bsize2;

DMA1_Channel1->CCR |= DMA_CCR_EN;
ADC1->CR |= ADC_CR_ADSTART; //Если закоментировать эту строку все работает

DMA2_Channel1->CCR |= DMA_CCR_EN;
ADC2->CR |= ADC_CR_ADSTART; //Если закоментировать и эту строку все работает
}

}

while (1) {
}



Вот рабочий вариант

CODE

// Обработка прерываний DMA ......
....
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

ADC_Start = 1;

}

}

while (1) {

if (ADC_Start==1){
if (side==0){ //Переставляем банки для результатов ADC
DMA1_Channel1->CMAR = ADMA1;
DMA2_Channel1->CMAR = ADMA2;
side=1;
} else {
DMA1_Channel1->CMAR = BDMA1;
DMA2_Channel1->CMAR = BDMA2;
side=0;
}
bsize1 = 5164;
bsize2 = 5164;
DMA1_Channel1->CNDTR = bsize1;
DMA2_Channel1->CNDTR = bsize2;

DMA1_Channel1->CCR |= DMA_CCR_EN;
ADC1->CR |= ADC_CR_ADSTART;

DMA2_Channel1->CCR |= DMA_CCR_EN;
ADC2->CR |= ADC_CR_ADSTART;
ADC_Start = 0;
}
}


Сообщение отредактировал IgorKossak - May 27 2016, 20:07
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016