внешнее инт2 на авр пущается не совсем тогда, когда надо
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Pashka2k 08 августа 2004 г. 21:01

Что-то я уже голову сломал, не понимаю где ошибаюсь, может подскажете критическое место?
используя мегу16, инт2 пытаюсь приспособить для запуска процедуры считывания состояния "клавиатуры". Дли примера возьмём кнопку, одной стороной на PORTC (вход с подтяжкой), другой стороной на 3 ногу PORTB, т.е. на вход int2.
в начале работы программы инициализирую так:

void prepINT2(void){
DDRC=0xF0; // 11110000 - 4 выхода, 4 входа
PORTC=0x0F; // 00001111 - на выходах 0, на входах подтяжка
DDRB=0xFF; // инт2 на выход (даташит говорит, что это разрешено)
PORTB=0; // с 0 на выводе
cli();
GICR|=0x20;// 00100000 разрешение инт2
MCUCSR|=0x40; // 01000000 по нарастающему фронту
sei();
}

Как я понимаю, при такой инициализации происходит вызов обработчика, что описано в даташите, однако не понимаю почему - прерывания то запрещены cli(), это подтверждает тот факт, что если при подаче питания или ресете удерживать кнопку нажатой - на лцд рисуется хелло_ворлд.

А в дальнейшей работе, по нажатию на кнопку, обработчик нифига не вызывается. В чём тут собака порылась? Куда смотреть, где прочесть?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru