Страница 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");
}
}
}
Флаг прерывания срабатывает, а вызов обработчика не происходит
Сначала просто пытался настроить, потом пример рабочий из ютуба скопировал - не работает
???
Re: AtmelStudio - проблема с прерыванием по таймеру.
Добавлено: Пт окт 25, 2013 09:08:23
ibiza11
микроконтроллер какой?
Re: AtmelStudio - проблема с прерыванием по таймеру.
Добавлено: Пт окт 25, 2013 10:56:13
Xrust
Atmega16 специально выбрал как в
примере из ютуба.
Сначала я на Attiny 13 тренировался. Естественно, там идентификаторы регистров свои. Когда понял, что ничего не получается, взял готовый пример -

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 писал(а):Прерывание по сравнению у Вас работает, а по переполнению забыли включить.
Совершенно верно, по сравнению
должно работать, но
не работает. Счетчик считает правильно, флаг сравнения срабатывает, а управление обработчику прерываний не передается, стрелка так и остается в главном цикле. Ваш пример тоже проверил - результат тот же. Счетчик считает, флаги срабатывают, подпрограмма обработчика прерываний
не запускается , указатель так и остается в главном цикле. Может какие-то настройки компилятора или отладчика надо проверить? Вроде не трогал ничего. Пару дней назад установил студию и потихоньку разбираюсь, что не знаю - не трогаю. Что-ж за засада такая?

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
А у меня только один - не из чего выбирать.
Поставил в обработчик прерываний точку останова - и стало все работать.

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