|
|
Бит 7 в SREG аппаратно устанавливается обратно в 1 командой RETI при выходе из обработчика, разумеется, тут же произойдет и разрешенное/взведенное прерывание (например, от UART). Этот бит из обработчика сбрасывают лишь в том случае, когда необходимо разрешить прерывание текущего обработчика другим, а в нормальном случае нехрен его трогать - сбрасывай из основной программы на здоровье.
Для того, чтобы не мешались неиспользуемые прерывания, следует их индивидуально запретить. Для этого есть соответствующие "маскирующие" биты в управляющих регистрах периферии - таймеров, SPI, UART и т.д. Для UART классических AVR это биты RXCIE, TXCIE и UDRIE в регистре UCR (в Мегах регистр/биты называются немного по-другому) - НЕ ПУТАЙ С БИТАМИ ЗАПРОСОВ - RXC, TXC и UDRE в регистре USR. Биты xxxIE при установке в 0 запретят соответствующие прерывания.
И учти еще один момент. Биты запросов прерываний в USR (RXC/TXC/UDRE) сбрасываются в неактивное состояние автоматически при вызове соответствующего обработчика, но если такового обработчика нет - сбросить их можно/нужно руками, но... в единицу, а не в ноль - такова особенность АВРской архитектуры.
E-mail: info@telesys.ru