Как избавится от зацикливания?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено MaximK 04 июля 2005 г. 11:35

Проблема в следующем.. В программе на Си (ВинАВР) должно обрабатываться прерывание по окончанию приема по UART. Пишу так:

INTERRUPT(SIG_USART0_RX) //для attiny2313
{ …..код }

Прерывание выполняется при установке флага USCRA.RXC, а очищается этот флаг только при чтении из UDR.
А компилятор вставляет код такого вида:

rjmp метка_1 ;вектор прерывания по окончанию приема

Метка_1: ;обработчик прерывания
sei ; РАЗРЕШАЕТ ВСЕ ПРЕРЫВАНИЯ!
….
чтение UDR
reti
Т.е. команду sei он вставляет до того как произойдет сброс RXC. И получается, что дойдя до команды sei программа «прыгает» опять на адрес вектора прерывания, т.к. бит RXC установлен.
Как компилятору «сказать», чтоб он не разрешал прерывания в обработчике прерывания?

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

Ответы



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

E-mail: info@telesys.ru