Hallo !
Ich hatte ein Problem mit der seriellen Schnittstelle. In Abhängigkeit
der Reihenfolge bei der Initialisierung werden falsche Daten gesendet.
Wenn ich folgende Reihenfolge bei der Initialisierung verwende,
dann kommen nur 0-Byte am Comport raus:
Code:
* *uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU / (16 * BAUDRATE) - 1);
* *UBRRH * * * * = (uint8_t) (ubrr >> 8);
* *UBRRL * * * * = (uint8_t) (ubrr);
* *UCSRB * * * *|= (1 << RXEN) *| (1 << TXEN) *| (1 << RXCIE);
* *UCSRC * * * *|= (1 << USBS) *| (1 << UCSZ1) | (1 << UCSZ0); // asyncron 8N1
Wenn ich die Reihenfolge umdrehe, ist alles wie es sein sollte
Code:
* *UCSRB * * * *|= (1 << RXEN) *| (1 << TXEN) *| (1 << RXCIE);
* *UCSRC * * * *|= (1 << USBS) *| (1 << UCSZ1) | (1 << UCSZ0); // asyncron 8N1
* *uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU / (16 * BAUDRATE) - 1);
* *UBRRH * * * * = (uint8_t) (ubrr >> 8);
* *UBRRL * * * * = (uint8_t) (ubrr);
Anmerkung - die Codeschnipsel sind Bestandteil der Anfangsinitialisierung des atmega32, die Interrupts werden am Ende dieser mit sei(); aktiviert.
Ich hefte das unter "Bug || unloesbares Raetsel" und "Info für alle" ab.
Vy 73
Vajk
Lesezeichen