Guten Tag,
aktuell versuche ich UART auf einem EFM8BB1 zum laufen zu bekommen, nun
funktioniert es auch allerdings nicht mit der von mir erwarteten
BAUD-Rate, mein aktueller Code sieht so aus:
1 | void setLowSysFreq(){
|
2 | CLKSEL = 0x02; //Set internal low frequency (80KHz) oscillator
|
3 | }
|
4 |
|
5 | void initUART(){
|
6 | XBR0 |= (1<<0); //UART TX&RX routed to P0.4 & P0.5
|
7 | CKCON0 |= (1<<3); //Timer 1 uses system clock
|
8 | TMOD = 0x20; //Timer1 8-bit with Auto-Reload
|
9 | TH1 = 252; //Reload value for Timer 1
|
10 | TL1 = 252; //Set reload value
|
11 | TCON |= (1<<6); //Timer1 enable
|
12 | }
|
13 |
|
14 | void sendByte(uint8_t byte){
|
15 | SBUF0 = byte;
|
16 | }
|
Timer1 hat also einen Reload-Wert von 252. Nach der Formel auf S. 195
des Reference Manuals
(http://www.silabs.com/documents/public/reference-manuals/EFM8BB1-RM.pdf)
ergibt sich damit ein F_timer1 von:
1 | 80.000 / (256 - 252) = 20.000
|
Auf S. 214 des selbigen Manuals steht, dass die BAUD-Rate die
Overflow-Rate / 2 ist, demnach würde sich eine BAUD-Rate von 10.000
ergeben. Ich sende permanent 0x5A über die Leitung, die
"Auto-Baud"-Funktion von Saleae Logic hat eine BAUD-Rate von 1258
erkannt, das konnte ich auch mit einem Terminal-Programm verifizieren,
hier wird durchgehend 0x5A angezeigt (passt also). Ich frag mich nun,
wie man auf diese Baud-Rate kommt?
Grüße