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

 
 
> Флаги прерываний таймера stm32f103, Как отключить их установку?
GMVM
сообщение May 15 2011, 12:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 4-07-10
Пользователь №: 58 276



Здравствуйте!Пишу программу в которой используются 3 канала таймера. В прерывании анализирую флаги которые устанавливаются в SR.1 и 3 каналы установлены на захват, канал 2 на выходное сравнение. В процессе работы программы, канал 2 и 3 должны отключаться. Возникла проблема: я могу отключить их от прерываний, могу отключить выход 2 таймера, но флаги прерываний все равно устанавливаются. И тогда если я захожу в прерывание по 1-му каналу, то обрабатываются и остальные. Можно как-то отключать установку флагов или придется искать другой путь?

вот код настройки таймера и упрощенное прерывание
CODE
/*Конфигурация таймера TIM1*/

TIM1->PSC = 0x0; // установка делителя счетчика
TIM1->ARR = 0xFFFF; //установка макс. значения регистра счетчика

TIM1->CCMR1 &= ~TIM_CCMR1_CC1S; // отчищаем флаги
TIM1->CCMR1 |= TIM_CCMR1_CC1S_0; //
TIM1->CCMR1 &= ~TIM_CCMR1_IC1F;
TIM1->CCMR1 |= (TIM_CCMR1_IC1F_2|TIM_CCMR1_IC1F_3);
TIM1->CCER |= TIM_CCER_CC1P;
TIM1->CCER &= ~TIM_CCMR1_IC1PSC;
TIM1->CCER |= TIM_CCER_CC1E;
TIM1->DIER |= TIM_DIER_CC1IE|TIM_DIER_UIE;
//канал 2
TIM1->CCR2 = 0xFFE; //записываем значение в регистр сравнения
TIM1->CCMR1|=(TIM_CCMR1_OC2M_0|TIM_CCMR1_OC2M_1); // устанавливаем выход таймера в режим переключателя
TIM1->CCER|= TIM_CCER_CC2E;
TIM1->DIER |= TIM_DIER_CC2IE;

//канал 3
TIM1->CCMR2 &= ~TIM_CCMR2_CC3S; // отчищаем флаги
TIM1->CCMR2 |= TIM_CCMR2_CC3S_0; //
TIM1->CCMR2 &= ~TIM_CCMR2_IC3F;
TIM1->CCMR2 |= (TIM_CCMR2_IC3F_2|TIM_CCMR2_IC3F_3);
TIM1->CCER |= TIM_CCER_CC3P;
TIM1->CCER &= ~TIM_CCMR2_IC3PSC;
TIM1->CCER |= TIM_CCER_CC3E;
TIM1->DIER |= TIM_DIER_CC3IE|TIM_DIER_UIE;


TIM1->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE; // включаем счетчик, разрешаем авто-перезагрузку


CODE
void TIM1_CC_IRQHandler(void)
{
if(TIM1->SR&TIM_SR_CC1IF)
{
TIM1->SR &=~TIM_SR_CC1IF;
cc1++;
}
if(TIM1->SR&TIM_SR_CC2IF)
{
TIM1->SR &=~TIM_SR_CC2IF;
cc2++;
}
if(TIM1->SR&TIM_SR_CC3IF)
{
TIM1->SR &=~TIM_SR_CC3IF;
cc3++;
}
}


Сообщение отредактировал IgorKossak - May 15 2011, 13:09
Причина редактирования: сократил длинные строки
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GMVM
сообщение May 16 2011, 09:19
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 4-07-10
Пользователь №: 58 276



Разобрался)) Не был установлен бит MOE.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:29
Рейтинг@Mail.ru


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