[AVRGCC] Problem UART na przerwaniach

Apr 12, 2007 2 Replies

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


Thu, 12 Apr 2007 18:24:10 +0200, na pl.misc.elektronika, Pawel K napisał(a):

Włączasz przerwanie "data register empty interrupt" a obsługujesz "transmit complete interrupt"

- to dwie oddzielne rzeczy. Brak obsługi SIG_UART_DATA powoduje ciągły przeskok ( avrgcc) do obsługi bad interrupt - czyli w praktyce do ciągłego resetu tak jak u siebie obserwujesz.

Jurek Szczesiul napisał(a):

Dzieki pomoglo. Wstyd przyznac, ale pisalem to majac przed oczami Panski artykul w EP :) nie ma to jak kontakt "bezposredni"

pozdrawiam Pawel K

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required