Столкнулся с примитивнейшей проблемой. Заблудиться в трёх соснах намного сложнее, чем в трёх регистрах.
Есть ATMEGA128A и кусок кода, разрешающий внешнее прерывание INT2 (PINC:2) по низкому уровню:
Код
OUT EIMSK,ZERO ; ZERO у меня всегда в нуле. Просто запрещаем все внешние прерывания
LDI BUF,0X00 ; Этой командой настраиваем выработку всех прерываний
STS EICRA,BUF ; (INT0...7) низким уровнем
LDI BUF,0XFF ; Записью лог. 1 во все разряды сбрасываем все флаги прерываний
OUT EIFR,BUF ; во флаговом регистре EIFR (если они вдруг были)
LDI BUF,(1<<INT2) ; Этой командой
OUT EIMSK,BUF ; разрешаем прерывание INT2
SEI ; Глобально разрешаем прерывания
NOP
NOP
NOP
NOP
NOP
Вот и всё. Проще некуда. И не работает, программа продолжает выполняться с нулём в разряде PINC:2 как будто так и должно бытьLDI BUF,0X00 ; Этой командой настраиваем выработку всех прерываний
STS EICRA,BUF ; (INT0...7) низким уровнем
LDI BUF,0XFF ; Записью лог. 1 во все разряды сбрасываем все флаги прерываний
OUT EIFR,BUF ; во флаговом регистре EIFR (если они вдруг были)
LDI BUF,(1<<INT2) ; Этой командой
OUT EIMSK,BUF ; разрешаем прерывание INT2
SEI ; Глобально разрешаем прерывания
NOP
NOP
NOP
NOP
NOP
Не понимаю в чём тут дело. Может, кто-то уже сталкивался с такой проблемой?
https://vk.com/video142452557_456239045
Спасибо!