Hallo,
ich bin gerade dabei für den ATxmega128A1 eine UART-Bibliothek zu
schreiben, dabei habe ich allerdings ein Problem mit dem DATA-Register,
da sich dieses nicht beschreiben lässt. Ebenso kann ich kein DATA
Register der USART's im Simulator anklicken, wie es bei anderen Register
ja normalerweise
funktioniert um dort Bits zu setzen. Ein Test auf dem realen MC
funktionierte ebenfalls nicht.
Als Software verwende ich bzw. habe ich ausprobiert:
AVRStudio 4.18 build 684 und 700 getestet
WINAVR vom 10.01.2010 und 13.03.2010 getestet
Die Initialisierung müsste dabei richtig sein, zumindest werden im
Simulator 2 die richtigen Einstellungen angezeigt bei USARTE1. Kennt
jemand zufällig eine Lösung für das Problem? Liegt es eventuell an
AVRStudio?
1 | void uart_init()
|
2 | {
|
3 | //Interrupts deaktivieren
|
4 | cli();
|
5 |
|
6 | //Ein- und Ausgänge festlegen
|
7 | PORTE.DIR|=UART_PORT_DIRECTION;
|
8 |
|
9 | //Modus einstellen
|
10 | USARTE1.CTRLC=UART_CTRLC_ASYNCMODE|UART_CTRLC_NOPARITY|UART_CTRLC_1STOPBIT|UART_CTRLC_8BIT;
|
11 |
|
12 | //Baudrate einstellen
|
13 | USARTE1.BAUDCTRLA=UART_BSEL_19200BAUDL;
|
14 | USARTE1.BAUDCTRLB=UART_BSEL_19200BAUDH;
|
15 |
|
16 | //Interrupts aktivieren
|
17 | USARTE1.CTRLA=UART_CTRLA_RX_HIGHINTLEVEL|UART_CTRLA_TX_HIGHINTLEVEL;
|
18 |
|
19 | //Uart aktivieren
|
20 | USARTE1.CTRLB=UART_CTRLB_RX_ENABLE|UART_CTRLB_TX_ENABLE;
|
21 |
|
22 | //interrupts wieder freigeben
|
23 | sei();
|
24 | }
|
25 |
|
26 | void uart_send_singlebyte(u08 byte)
|
27 | {
|
28 | //schauen, ob Sendebuffer bereit ist
|
29 | if ((USARTE1.STATUS&UART_STATUS_TRANSMITBUFFEREMPTY)!=0)
|
30 | {
|
31 | USARTE1.DATA=byte;
|
32 | }
|
33 | }
|
Gruß,
Alex