Страница 1 из 1

AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Чт окт 24, 2013 19:03:04
Xrust
Уважаемые коты, помогите. Весь мозг уже сломал, никак не пойму в чем проблема.

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>

ISR (TIMER0_COMP_vect)
{
   asm("nop");
}
ISR (TIMER0_OVF_vect)
{
   asm("nop");
}

int main(void)
{
    while(1)
    {
        TCCR0 |=(1<<0);
      TCCR0 &=~(1<<WGM00);
      TCCR0 &=~(1<<WGM01);
      TIMSK |=(1<<1);
      OCR0 = 100;
      sei();
      while(1)
      {
         asm("nop");
      }
      
    }
}

Флаг прерывания срабатывает, а вызов обработчика не происходит :dont_know:
Сначала просто пытался настроить, потом пример рабочий из ютуба скопировал - не работает :(
???

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 09:08:23
ibiza11
микроконтроллер какой?

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 10:56:13
Xrust
Atmega16 специально выбрал как в примере из ютуба.
Сначала я на Attiny 13 тренировался. Естественно, там идентификаторы регистров свои. Когда понял, что ничего не получается, взял готовый пример - :dont_know:

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 12:16:54
a_skr
Прерывание по сравнению у Вас работает, а по переполнению забыли включить.

Код: Выделить всё

#include <avr/io.h>
#include <avr/interrupt.h>

ISR (TIMER0_COMP_vect)
{
  PORTB ^= 1;
}
ISR (TIMER0_OVF_vect)

{
  PORTB ^= 2;
}

int main(void)
{
    DDRB = 3;
    while(1)
    {
      TCCR0 = (1<<CS00);
      TIMSK = (1<<OCIE0) | (1<<TOIE0);
      OCR0 = 100;
      sei();
      while(1)
      {
         asm("nop");
      }
    }
}
Изображение

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 12:38:35
Xrust
a_skr писал(а):Прерывание по сравнению у Вас работает, а по переполнению забыли включить.

Совершенно верно, по сравнению должно работать, но не работает. Счетчик считает правильно, флаг сравнения срабатывает, а управление обработчику прерываний не передается, стрелка так и остается в главном цикле. Ваш пример тоже проверил - результат тот же. Счетчик считает, флаги срабатывают, подпрограмма обработчика прерываний не запускается , указатель так и остается в главном цикле. Может какие-то настройки компилятора или отладчика надо проверить? Вроде не трогал ничего. Пару дней назад установил студию и потихоньку разбираюсь, что не знаю - не трогаю. Что-ж за засада такая? :shock:

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 12:40:47
ibiza11
может что-нибудь осмысленное вставить в обработчик? например вывод в порт?

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 13:18:42
Xrust
Ну вот выше пример я попробовал. Все равно. Оба условия в процессе счета были достигнуты, оба флага OCF0, TOV0 сработали. Но...

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 17:18:47
a_skr
Точку останова ставили в обработчик?

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 18:50:31
Xrust
Нет.

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 20:31:02
vek
А дизасм что показывает?Пробуй симулятор2 в симулятор1 (или наоборот) переключить

P.S. Попробовал Ваш код - такая-же петрушка:) Дизассамбнул. Посмотрел построчно - все чикаго. Почему-то после дизасма все стало так как и должно быть(и в Сишной портянке тоже норм стало).И после перекомпиляции тоже нормально.... УРА!!! Симулятор починился:)))) (У меня затупил симулятор2,а у вас какой выбран?)

P.P.S. у меня 4-я версия

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 20:57:54
Xrust
А у меня только один - не из чего выбирать.
Поставил в обработчик прерываний точку останова - и стало все работать. :music:

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 21:28:11
vek
А теперь убери её и перекомпилируй. Починился симулятор?Нет? А если НОП-ов штук 10 в обработчик вставить?

Я не знаю как симулятор работает:может он думает что в сишном варианте счетчик сразу на несколько тактов прибавляется за строчку,а обработчик пустой,то и нефиг системные ресурсы попусту транжирить:)
или просто из лени :)

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Пт окт 25, 2013 21:38:36
Xrust
Мой первый пример так и не заработал. Даже с точкой останова. :(
Сейчас стало доходить понемногу. Отладчик "проскакивает" первую команду в обработчике прерываний. И если там только одна строка, как у меня в примере, то он "пролетает со свистом". Даже если поставить точку останова. Глюк отладчика, короче.

Re: AtmelStudio - проблема с прерыванием по таймеру.

Добавлено: Сб окт 26, 2013 07:28:54
BOB51
Для работающих с дебаггером АВР студио.
сколько раз уже писано:
СМОТРИТЕ В СПРАВКУ ОБ ОГРАНИЧЕНИЯХ СИМУЛЯТОРА!!! :kill: :kill: :kill:
многие из устройств периферии не поддерживаются в конкретных МК (да и от версии самой IDE кой-чего меняется).
:beer: