Witam, chcialem wykozystac dobrodziejstwo transmisji szeregowoj wykozystyjacej przerwania i zaczynaja sie schody. ATMEGA128 na 100% wylaczony tryb 103ki !! Przejzalem wiele przykladow i nic mi to nie rozjasnilo mojego problemu. Stowrzylem bufor, zapisalem do niego dane, zainicjowalem transmisje:
if (Uart0Status == Tx_Busy || data == NULL) return false; else { TxPtr = data; TxPPtr = (uint8_t *)data; TxLen = 0; Uart0Status = Tx_Busy; UCSR0B |= _BV(UDRIE0); }
w przerwaniu juz wycialem wszystko zeby wyeliminowac wszelkie bledy i wyglada tak:
SIGNAL(SIG_UART0_TRANS){ UCSR0B &= ~_BV(UDRIE0); Uart0Status = Tx_Ready; }
kozystam jeszcze z 3ech przerwan: zewnetrzengo generowanego przez RTC co 1 sek, TIMERA0 do odczytu klawiatury oraz TIMERA1 w trybie PWM.
Dodam ze mam wachdoga ustawionego na 2 sek. Resetowany jest w przerwaniu wywolywanym przez RTC co 1 sek. Problem z uartem polega na tym ze zawiesza mi caly uklad. Watchdog resetuje uklad po 2 sek po czym znowu zwisa .... i tak w kolko. Prosze o jakies sugestie ...
pozdrawiam Pawel K