Haben wir da tatsächlich ein Fehler in einer viel genutzten
UART-Libraries gefunden? Wie kann es sein das der Fehler über 10 Jahre
unentdeckt war. Kann ich mir fast nicht vorstellen.
1 | UART0_UBRRH = (unsigned char)((baudrate>>8)&0x80) ;
|
muss natürlich in:
1 | UART0_UBRRH = (unsigned char)((baudrate>>8)&(~0x80)) ;
|
geändert werden. Das 16te Bit in "baudrate" ist als Flag genutzt, um
festzustellen, ob Double Rate aktiviert ist. Bei der Übertragung in das
upper byte muss dieses Flag wieder gelöscht werden, jedoch wurde alles
andere gelöscht.
Kann mir nur so erklären dass es nie auffiel, da nur langsame und selten
genutzte Baudraten das upper byte benutzen.