Hallo Ich versuche seit Tagen die Asynchrone Schnittstelle des AVR32 UC3A0512 zu Initialisieren. Kann mir vielleicht jemand sagen was Ich falsch mache und wieso ich die Bits RXEN TXEN im Control Register nicht setzen kann?? Die Baudrate ist für mich erst mal unwichtig. Ich will zuerst überhaupt irgendwelche Zeichen mit Oszilloskop am Transmitter messen können. #include <uc3a0512.h> #include <asf.h> int main (void) { board_init(); int clock = 24; int clockh = (clock/6) - 1; AVR32_PM.oscctrl0 = (AVR32_PM.oscctrl0 | 0x00000407); AVR32_PM.mcctrl = AVR32_PM_OSC0EN_MASK; while((AVR32_PM.poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK)== 0); AVR32_PM.pll[0] = 0 << AVR32_PM_PLLOSC_OFFSET | 1 << AVR32_PM_PLLDIV_OFFSET | clockh << AVR32_PM_PLLMUL_OFFSET | 5 << AVR32_PM_PLLOPT_OFFSET; AVR32_PM.cksel = 0x00000000; AVR32_PM.pll[0] |= AVR32_PM_PLLEN_MASK; while(!(AVR32_PM.poscsr & AVR32_PM_POSCSR_LOCK0_MASK)); AVR32_FLASHC.fcr |= 1 << AVR32_FLASHC_FWS_OFFSET; AVR32_PM.mcctrl |= 2 << AVR32_PM_MCSEL_OFFSET; AVR32_USART1.idr = 0xFF0FFFFF; AVR32_USART1.mr = 0; AVR32_USART1.rtor = 0; AVR32_USART1.ttgr = 0; AVR32_USART1.CR.rstrx |= AVR32_USART_CR_RSTRX_MASK; AVR32_USART1.CR.rsttx |= AVR32_USART_CR_RSTTX_MASK; AVR32_USART1.CR.rststa |= AVR32_USART_CR_RSTSTA_MASK; AVR32_USART1.CR.rstit |= AVR32_USART_CR_RSTIT_MASK; AVR32_USART1.CR.rstnack |= AVR32_USART_CR_RSTNACK_MASK; AVR32_USART1.CR.dtrdis |= AVR32_USART_CR_DTRDIS_MASK; AVR32_USART1.CR.rtsdis |= AVR32_USART_CR_RTSDIS_MASK; AVR32_USART1.BRGR.cd |= 26; AVR32_USART1.MR.chrl |= AVR32_USART_CHRL_8; AVR32_USART1.MR.chmode |= AVR32_USART_MR_CHMODE_NORMAL; AVR32_USART1.MR.nbstop |= AVR32_USART_MR_NBSTOP_2; AVR32_USART1.MR.par |= AVR32_USART_MR_PAR_NONE; AVR32_USART1.MR.over |= AVR32_USART_OVER_MASK; AVR32_USART1.CR.rxen |= AVR32_USART_CR_RXEN_MASK; AVR32_USART1.CR.txen |= AVR32_USART_CR_TXEN_MASK; AVR32_GPIO.port[0].oderc |= 0b01100000; // Ausgang ausschalten AVR32_GPIO.port[0].puers |= 0b01000000; // Pull-up Einschalten für TX AVR32_GPIO.port[0].gpers |= 0b01100000; // GPIO Ein AVR32_GPIO.port[0].pmr0c |= 0b01100000; // Funktion A AVR32_GPIO.port[0].pmr1c |= 0b01100000; // Funktion A AVR32_GPIO.port[0].gperc |= 0b01100000; // Perepherie Ein while(1){ AVR32_USART1.thr |= 0b10101010; while ((AVR32_USART1.csr & AVR32_USART_CSR_TXEMPTY_MASK) == 0){} } }
Stefan schrieb: > AVR32_GPIO.port[0].oderc |= 0b01100000; // Ausgang ausschalten > > AVR32_GPIO.port[0].puers |= 0b01000000; // Pull-up Einschalten > > für TX > > AVR32_GPIO.port[0].gpers |= 0b01100000; // GPIO Ein > > AVR32_GPIO.port[0].pmr0c |= 0b01100000; // Funktion A > > AVR32_GPIO.port[0].pmr1c |= 0b01100000; // Funktion A > > AVR32_GPIO.port[0].gperc |= 0b01100000; // Perepherie Ein die Portregister sind 32 Bit breit. Also PC-Lint bzw. eine MIRSRA-Checker würde das monieren, auch wenn es syntaktisch nicht zu beanstanden wäre. Besser ist es mit 32-Bit-masken zu verordern. Aber warum benutzt Du das ASF nicht. Auch wenn es nicht der Hit ist, zum schnell an den Start kommen, ist es recht brauchbar. Da gibt es dann auch genügend funktionieren Beispiele für die UART.
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.