Страница 1 из 1
Проблемы с прерываниями(AVR)
Добавлено: Пн янв 03, 2011 16:44:17
Фантомас
Решил вот на днях сваять хронограф для личных нужд. Написал прошивку, собрал схему в симуляторе - сразу полезли баги. Оно то как раз вполне ожидаемо. Но ТАКИХ я не ожидал! Сразу после запуска симуляции флаги прерываний INT1..2 стоят в 1, пытался сбросить вручную до выставления флага глобального разрешения прерываний - не реагирует. После sei(); уходит в обработчики, второй ра з не взодит в них ни под каким предлогом.
WinAvr gcc;
Симуляция в Proteus
ATmega16;
LCD HD44780;
прошивка и файл симуляции в архиве:
http://fantomasavia.ucoz.ru/tpr/Chrono.tar
Подскажите, в чём грабли?
ЗЫ
За вывод на ЖКИ не пинать, было лень.
Re: Проблемы с прерываниями(AVR)
Добавлено: Пн янв 03, 2011 23:06:41
md5sum
Фантомас писал(а):пытался сбросить вручную
Код: Выделить всё
InitLcd();
GIFR=(1<<INTF1)|(1<<INTF0)|(1<<INTF2); // Сброс флагов прерываний
sei(); //разрешаем все прерывания
Таким образом пытался?
Re: Проблемы с прерываниями(AVR)
Добавлено: Пн янв 03, 2011 23:17:14
Meteor
Скорее проблема в том что реагируете на уровень (высокий или низкий) при этом получается такая картина.
Заходя в прерывание идет обработка.
Затем выходя из обработки, смотрится на установленный уровень и вновь уходит в обработку.
Настройте на фронты - должно помочь.
Re: Проблемы с прерываниями(AVR)
Добавлено: Вт янв 04, 2011 01:47:56
Фантомас
md5sum писал(а):Фантомас писал(а):пытался сбросить вручную
Код: Выделить всё
InitLcd();
GIFR=(1<<INTF1)|(1<<INTF0)|(1<<INTF2); // Сброс флагов прерываний
sei(); //разрешаем все прерывания
Таким образом пытался?
И так тоже.
Meteor писал(а):Скорее проблема в том что реагируете на уровень (высокий или низкий) при этом получается такая картина.
Заходя в прерывание идет обработка.
Затем выходя из обработки, смотрится на установленный уровень и вновь уходит в обработку.
Настройте на фронты - должно помочь.
Будем пробовать. Хотя, если я не забыл всё к чертям, реагирую на срез.