|
Проблема в следующем.. В программе на Си (ВинАВР) должно обрабатываться прерывание по окончанию приема по UART. Пишу так:
INTERRUPT(SIG_USART0_RX) //для attiny2313
{ …..код }
Прерывание выполняется при установке флага USCRA.RXC, а очищается этот флаг только при чтении из UDR.
А компилятор вставляет код такого вида:
rjmp метка_1 ;вектор прерывания по окончанию приема
Метка_1: ;обработчик прерывания
sei ; РАЗРЕШАЕТ ВСЕ ПРЕРЫВАНИЯ!
….
чтение UDR
reti
Т.е. команду sei он вставляет до того как произойдет сброс RXC. И получается, что дойдя до команды sei программа «прыгает» опять на адрес вектора прерывания, т.к. бит RXC установлен.
Как компилятору «сказать», чтоб он не разрешал прерывания в обработчике прерывания?
E-mail: info@telesys.ru