Hi MechMac!
Das Problem ist, dass die bei Atmel die Namen einiger Register und Bits geändert haben beim 644 um mehrere UART in einem Controller adressieren zu können.
Der 644p z.B. hat zwei davon. Daher auch die 0 am Ende oder mittendrin für die 1. Schnittstelle. Im Datenblatt sind die Register der einzelnen UART vollständig benannt.
Es gibt auch einen "migration guide" vom ATmega32 zum ATmega644.
Der ist allerdings auch nicht wirklich eindeutig an ein paar Stellen:
http://www.atmel.com/dyn/resources/p...ts/doc8001.pdf
edit:
Die Schnittstelle muss in den asynchronen mode initialisert werden, weiß nicht mehr genau, ob der meg32 das auch so wollte.
Tabellen für die Baudraten bei diversen Taktfrequenzen, inkl. Fehler:
http://www.wormfood.net/avrbaudcalc.php
Code:
// ****** init debug serial output
void initDBGser(void) {
// --- set UART baud rate to 115200 @ 14,7456 MHz
unsigned int baud = 7;
UBRR0H = (unsigned char) (baud>>8);
UBRR0L = (unsigned char) baud;
// --- init
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
return;
}
// ****** send byte
void DBGsertxbyte(uint8_t btmp) {
// --- wait for empty tx buffer
while ( !(UCSR0A & (1<<UDRE0)) );
// --- put data into UDR, starts transmission too
UDR0 = btmp;
return;
}
Lesezeichen