RTV forum PL | NewsGroups PL

Zawieszający się ATMEGA128 przy transmisji UART z użyciem przerwań - jak rozwiązać?

[AVRGCC] Problem UART na przerwaniach

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Zawieszający się ATMEGA128 przy transmisji UART z użyciem przerwań - jak rozwiązać?

Pawel K
Guest

Thu Apr 12, 2007 5:24 pm   



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

Jurek Szczesiul
Guest

Thu Apr 12, 2007 6:11 pm   



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

Quote:
UCSR0B |= _BV(UDRIE0);

SIGNAL(SIG_UART0_TRANS){

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.

--
Pozdrowienia
Jurek Szczesiul

Pawel K
Guest

Fri Apr 13, 2007 3:17 pm   



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

UCSR0B |= _BV(UDRIE0);

SIGNAL(SIG_UART0_TRANS){

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.

Dzieki pomoglo.

Wstyd przyznac, ale pisalem to majac przed oczami Panski
artykul w EP Smile nie ma to jak kontakt "bezposredni"


pozdrawiam
Pawel K

elektroda NewsGroups Forum Index - Elektronika Polska - Zawieszający się ATMEGA128 przy transmisji UART z użyciem przerwań - jak rozwiązać?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map