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

 
 
> Прерывание от таймера STR91x+Keil MDK 3.22
Shuuura
сообщение Aug 30 2008, 13:01
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 80
Регистрация: 23-08-05
Пользователь №: 7 902



Используется таймер TIM1, настраивается на output compare mode, прерывание разрешено:
Код
    TIM1->CR1 &= TIM_CLK_APB;
    TIM1->CR2 &=0xFF00;
    TIM1->CR2 |= 199;
    TIM1->OC1R = 60000;
    TIM_ITConfig(TIM1, TIM_IT_OC1, ENABLE);
    VIC_Config(TIM1_ITLine, VIC_IRQ, 0);
    VIC_ITCmd(TIM1_ITLine, ENABLE);
    TIM_CounterCmd(TIM1, TIM_START);

Обработчик прерывания просто перебрасывает состояние вывода - мигает светодиод.
Код
void TIM1_IRQHandler(void){
       TIM_ClearFlag(TIM1, TIM_FLAG_OC1);
       TIM_CounterCmd(TIM1, TIM_CLEAR);
       if (flag == 1){
        GPIO_WriteBit(GPIO6, GPIO_Pin_7, Bit_SET);
        flag = 0;}
      else{
        GPIO_WriteBit(GPIO6, GPIO_Pin_7, Bit_RESET);
        flag = 1;}
   VIC0->VAR = 0xFF;}

Проблема: прерывание исполняется два раза подряд, т.е. после окончания периода работы счетчика вызывается прерывание и перебрасывается состояние ножки. После этого сразу же вызывается обработчик повторно и возвращает состояние. Потом снова отрабатывается период и все по новой.
Если установить в обработчике точку останова и шагать в отладчике - все работает правильно.
Что я делаю не так?
Go to the top of the page
 
+Quote Post



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

 


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


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