Hallo,
ich habe hier ein STK600 mit Mega64 in passendem Adapter samt
aktiviertem Baudraten-Quarz. Baudrate ist 9600.
Empfang vom USART ist Interrupt-gesteuert und funktioniert. Gesendet
wird wartend mit dem üblichen Code à la:
1 | void UartPutc(unsigned char c)
|
2 | {
|
3 | while(!(UCSRxA & (1 << UDREx))) // warte, bis UDR bereit
|
4 | {
|
5 | asm volatile("nop"::);
|
6 | ;
|
7 | }
|
8 | UDRx = c; // sende
|
9 | }
|
Wenn ich beim Senden jedes einzelnen Zeichens einen Breakpoint auf dem
AVR habe kommen die Daten auch sauber auf der Windows-Gegenseite an.
Wenn ich mein 17-Byte-Telegramm allerdings frei laufend sende kommen auf
der Gegenseite idR nur 16 Bytes an und außer dem ersten ist es Rubbish.
Ich hatte jetzt zuerst meine Windows-Empfangsroutine in Verdacht, in
meiner Verzweiflung habe ich mal alle UART-Relevanten Register in
Defines gepackt, so daß ich leicht von UART0 auf UART1 umstellen konnte
und:
Siehe da, mit UART1 geht's.
Hat jemand eine Idee, was da schief gelaufen ist?
Dirk