Hallo an alle ich versuche geade an einem xmega den USART zum laufen zu bringen um einen GPS Empfänger auszulesen. Leider funst das aber nicht. Was mache ich da falsch? CPU 32000000 Baudrate 9600 8 Datenbits 1 Stoppbit No Parity // Initialisierung der Seriellen Schnittstelle PORTF.DIRSET = PIN3_bm; // PORTF3 (TXD0) PORTF.DIRCLR = PIN2_bm; // PORTF2 (RXD0) USARTF0.BAUDCTRLA = 0x7B; F_CPU 32000000 9600 bps 0x7B / 0xD6 USARTF0.BAUDCTRLB = 0xD6; USARTF0.CTRLA = 0x30; //RX high level interrupt 0x30 USARTF0.CTRLC = 0x03; // Async, No Parity, 1 stop bit, 8 data bits USARTF0.CTRLB = 0x10; // Enable RX and TX Disable // kein CLK2X // Initialisierung der Seriellen Schnittstelle ende Danke Egon
BAUDCTRLB ist in den oberen 4Bit ein fraktionaler Teiler. Ich bin mir nicht sicher, ob Du den wirklich nutzen willst. Für den Baudratenteiler bekomme ich 207dez // CFhex heraus. BAUDCTRLH ist also $CF und BAUDCTRLB ist $00 Fcpu/(Baud*16)-1 war glaub ich die Formel. Musst Du nochmal überprüfen.
Mahlzeit, ohne es ausprobiert zu haben würde ich in etwa so anfangen:
1 | #define BAUD 9600
|
2 | #define BSEL 3317 // mit der xls aus AVR1307.zip
|
3 | #define BSCALE -4 // berechnet
|
4 | |
5 | PORTC.DIRSET = PIN3_bm; // TX = OUT |
6 | PORTC.DIRCLR = PIN2_bm; // RX = IN |
7 | |
8 | USARTC0.BAUDCTRLA = (uint8_t)BSEL; |
9 | USARTC0.BAUDCTRLB = (BSCALE << USART_BSCALE0_bp)|(BSEL >> 8); |
10 | USARTC0.CTRLA = USART_RXCINTLVL0_bm; |
11 | USARTC0.CTRLC = USART_CMODE_ASYNCHRONOUS_gc |USART_PMODE_DISABLED_gc | |
12 | USART_CHSIZE_8BIT_gc; |
13 | |
14 | USARTC0.CTRLB = USART_RXEN_bm | USART_TXEN_bm; |
15 | PMIC.CTRL |= PMIC_LOLVLEX_bm; |
und den Interrupthandler nicht vergessen! MfG
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.