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

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
Xrust
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Чт сен 26, 2013 11:31:29

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

Сообщение 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:
Сначала просто пытался настроить, потом пример рабочий из ютуба скопировал - не работает :(
???
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

микроконтроллер какой?
Ставим плюсы: )
Аватара пользователя
Xrust
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Чт сен 26, 2013 11:31:29

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

Сообщение Xrust »

Atmega16 специально выбрал как в примере из ютуба.
Сначала я на Attiny 13 тренировался. Естественно, там идентификаторы регистров свои. Когда понял, что ничего не получается, взял готовый пример - :dont_know:
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение 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");
      }
    }
}
Изображение
Вложения
123.JPG
(63.15 КБ) 1388 скачиваний
Аватара пользователя
Xrust
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Чт сен 26, 2013 11:31:29

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

Сообщение Xrust »

a_skr писал(а):Прерывание по сравнению у Вас работает, а по переполнению забыли включить.

Совершенно верно, по сравнению должно работать, но не работает. Счетчик считает правильно, флаг сравнения срабатывает, а управление обработчику прерываний не передается, стрелка так и остается в главном цикле. Ваш пример тоже проверил - результат тот же. Счетчик считает, флаги срабатывают, подпрограмма обработчика прерываний не запускается , указатель так и остается в главном цикле. Может какие-то настройки компилятора или отладчика надо проверить? Вроде не трогал ничего. Пару дней назад установил студию и потихоньку разбираюсь, что не знаю - не трогаю. Что-ж за засада такая? :shock:
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

может что-нибудь осмысленное вставить в обработчик? например вывод в порт?
Ставим плюсы: )
Аватара пользователя
Xrust
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Чт сен 26, 2013 11:31:29

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

Сообщение Xrust »

Ну вот выше пример я попробовал. Все равно. Оба условия в процессе счета были достигнуты, оба флага OCF0, TOV0 сработали. Но...
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

Точку останова ставили в обработчик?
Аватара пользователя
Xrust
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Чт сен 26, 2013 11:31:29

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

Сообщение Xrust »

Нет.
Аватара пользователя
vek
Вымогатель припоя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

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

Сообщение vek »

А дизасм что показывает?Пробуй симулятор2 в симулятор1 (или наоборот) переключить

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

P.P.S. у меня 4-я версия
Последний раз редактировалось vek Пт окт 25, 2013 21:27:22, всего редактировалось 1 раз.
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Аватара пользователя
Xrust
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Чт сен 26, 2013 11:31:29

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

Сообщение Xrust »

А у меня только один - не из чего выбирать.
Поставил в обработчик прерываний точку останова - и стало все работать. :music:
Аватара пользователя
vek
Вымогатель припоя
Сообщения: 563
Зарегистрирован: Чт апр 16, 2009 04:53:41

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

Сообщение vek »

А теперь убери её и перекомпилируй. Починился симулятор?Нет? А если НОП-ов штук 10 в обработчик вставить?

Я не знаю как симулятор работает:может он думает что в сишном варианте счетчик сразу на несколько тактов прибавляется за строчку,а обработчик пустой,то и нефиг системные ресурсы попусту транжирить:)
или просто из лени :)
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.
Аватара пользователя
Xrust
Первый раз сказал Мяу!
Сообщения: 38
Зарегистрирован: Чт сен 26, 2013 11:31:29

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

Сообщение Xrust »

Мой первый пример так и не заработал. Даже с точкой останова. :(
Сейчас стало доходить понемногу. Отладчик "проскакивает" первую команду в обработчике прерываний. И если там только одна строка, как у меня в примере, то он "пролетает со свистом". Даже если поставить точку останова. Глюк отладчика, короче.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15553
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

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

Вернуться в «AVR»