Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IRQHandler for analog watchdog ADC1_2
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
VadimNic_nt
Здравствуйте уважаемые форумчане!

Столкнулся с проблемой. Не получается запретить прерывание
в обработчике. Контроллер STM32F103RC.
Ниже пример моего кода. До запрещения прерывания
ожидается, что оно произойдет 3 раза.

CODE
**---------------------------------------------------------------------------
* @brief IRQHandler for analog watchdog ADC1_2
* @param none
* @retval none
*---------------------------------------------------------------------------
*/
void ADC1_2_IRQHandler (void)
{
static uint8_t cnt = 0;

/* Analog watchdog flag? */
if (BIT_BAND_PER(ADC1->SR, ADC_SR_AWD)) {

/* Clears interrupt pending ADC_IT_AWD */
BIT_BAND_PER(ADC1->SR, ADC_SR_AWD) = 0;

if (cnt++ < 3) return;

cnt = 0;

/* Capture TIM8 value */
TIM8->EGR = TIM_EventSource_CC1;

/* Comparator timestamp for current cycle */
digreg_state.comp_timest.block_num[CycleParam.cycle_number] = control_wrseq.block_num;
digreg_state.comp_timest.counter[CycleParam.cycle_number] = (cnt_20Hz << 16) | TIM8->CCR1;

flag_event.CompOverdraft = 1;

/* Disable watchdog ADC1_2*/
ADC1->CR1 &= (~(uint32_t)ADC_IT_AWD);
}
}
VadimNic_nt
Обнаружил причину ошибки.
Код

ADC1->CR1 &= (~(uint32_t)ADC_IT_AWD);

заменил на
BIT_BAND_PER(ADC1->SR, ADC_CR1_AWDI) = 0;

Про макрос BIT_BAND_PER можно посмотреть здесь:
http://we.easyelectronics.ru/STM32/stm32---bit-banding.html
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.