|
Код прерывания такой:
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