Столкнулся с проблемой. Долго мучался и ветаки поборол, но как-то странно!
Опишу кратко. Используется два прерывания:
1:0x01A Timer/Counter1 Compare Match A - режим CLC (частота 44100 Hz) 2:0x020 Timer/Counter0 Compare Match - режим CLC ( частота 500 Hz)
У второго прерывания приоритет ниже и первая команда его обработчика SEI. Все регистры и флаги сохраняются в каждом обработчике. Проблема в том что во втором прерывании необходимо читать состояние PIND.4 Состояние пина иногда считывается 0-м в то время как он в 1-це.
В таком виде глючило:
CBI PORTB,7 SBI PORTB,7 ROL RTMP SBIC PIND.4 ANDI RTMP,$01
добавил запрет и разрешение прерываний и глюк ПОЛНОСТЬЮ пропал:
CLI CBI PORTB,7 SBI PORTB,7 ROL RTMP SBIC PIND.4 ANDI RTMP,$01 SEI
Что это, глюк меги или я чегото не понимаю? Ктонибудь сталкивался с подобным?
|