PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grad zu doof für ATMega32 UART (Sendet nur 0x00)



Jaecko
01.03.2009, 14:32
Moin.

Für ein Projekt sollen mit einem ATMega32 Daten ausgegeben werden.
Bisher hatte ich mit den UARTs eigentlich nie Probleme; nur dieses Mal seh ich anscheinend den Fehler nicht.

Wenn ich ein Testprogramm mit Bascom erstelle, erscheinen die gesendeten Daten fehlerfrei am Terminal. Versuch ich das ganze nun in C, erhalte ich am Terminal nur Unmengen 0x00.

Da es in Bascom geht, schliesse ich einen Hardwarefehler aus => Irgendwo ein Fehler im Code.

Hab die Teile hier mal angehängt. Sieht dort jemand nen Fehler?

F_CPU: 8 MHz
Baud: 9600/8/n/1

Initialisierung:


void USART_Init(ui32_t baud)
{
ui8_t sreg = SREG;
ui16_t ubrr = (ui16_t) ((ui32_t) F_CPU / (16 * baud) - 1);
UBRRH = (ui8_t) (ubrr>>8);
UBRRL = (ui8_t) (ubrr);
cli();
UCSRB = (1 << RXEN) | (1 << TXEN);
UCSRC = (1 << UMSEL) | (1 << UCSZ1) | (1 << UCSZ0);
do
{
UDR;
} while (UCSRA & (1 << RXC));
UCSRA = (1 << RXC) | (1 << TXC);
SREG = sreg;
}


Schreibfunktionen:


void USART_PutC_Sync(const ui8_t c)
{
while (!(UCSRA & (1 << UDRE)))
{;}
UDR = c;
}

void USART_PutS_Sync(const char *s)
{
do
{
USART_PutC_Sync(*s);
} while (*s++);
}



Testprogramm:



USART_Init(9600);
while(1)
{
USART_PutS_Sync("Test\r\n");
_delay_ms(1000);
}



mfG

oberallgeier
01.03.2009, 15:02
Sorry, bin grad auf dem Sprung ins Dorf - aber was soll das "cli();" - das ja nicht wieder freigegeben wird. Ist die Übertragung interruptgesteuert?

Jaecko
01.03.2009, 15:07
Die durch cli() abgeschalteten Interrupts werden durch die Anweisung "SREG = sreg" wieder aktiviert (sofern sie davor aktiviert waren).
Das Senden soll synchron, also ohne Interrupts erfolgen.

Ein Test, in dem das Senden aus einem FIFO-Puffer heraus per Interrupts gesteuert wird, bringt ebenfalls nur 0x00.
(Hier wird das zu sendende Datenbyte auch nur in UDR geschrieben.)

Das Problem ist also unabhängig von der Art, wie gesendet wird.

McJenso
01.03.2009, 18:44
Hallo,

hast du im Simulator mal ubrr geprüft?
Mir fällt es schwer deinen Code zu kompilieren :wink:

Gruß

Jens