winavr + mega128 + глюк при обработке INTERRUPT (SIG_UART0_RECV)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено tilin 29 сентября 2004 г. 15:31

Код прерывания такой:
INTERRUPT (SIG_UART0_RECV) {}
В кодах это выглядит так:
00000bde <__vector_18>:

INTERRUPT (SIG_UART0_RECV)
{
bde: 78 94 sei
be0: 1f 92 push r1
be2: 0f 92 push r0
be4: 0f b6 in r0, 0x3f ; 63
be6: 0f 92 push r0
be8: 11 24 eor r1, r1
bea: cf 93 push r28
bec: df 93 push r29
bee: cd b7 in r28, 0x3d ; 61
bf0: de b7 in r29, 0x3e ; 62
bf2: df 91 pop r29
bf4: cf 91 pop r28
bf6: 0f 90 pop r0
bf8: 0f be out 0x3f, r0 ; 63
bfa: 0f 90 pop r0
bfc: 1f 90 pop r1
bfe: 18 95 reti


На железе программа при включенном прерывании в регистре UCSR0B работать отказывается. В отладчике видится,что присработке прерывания
и переходе на обработчик по адресу 0xbde флаг прерывание в регистре UCSRA0 не очищается, а по адресу 0xbde стоит команда SEI - естественно сразу же новое прерывание и до бесконечности.

Все это делает WinAVR 20040720.

Поможите подскажите...

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

Ответы



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

E-mail: info@telesys.ru