/*---------------------------------------------------------------------------- @ File Name : seriell.c @ Object : Grundfunktionen der seriellen Schnittstelle @ int init_ser(); char putch(char); char getch(); @ @ Autor : M.Pester @ Datum : 04.12.2007 @ @----------------------------------------------------------------------------*/ #include "../h/pmc.h" #include "../h/pio.h" #include "../h/usart.h" #include int init_ser(void); char putch(char); char getch(void); #define DEFAULT_BAUD = 38400 #define CLOCK_SPEED = 25000000 //US_BAUD = (CLOCK_SPEED / (16*(DEFAULT_BAUD)) // 25MHz / ( 16 * 38400) = 40.69 -> 41 -> 0x29 #define US_BAUD = 0x29 // Initialisiert die serielle Schnittstelle USART0 int init_ser() { StructPIO* piobaseA = PIOA_BASE; StructPMC* pmcbase = PMC_BASE; StructUSART* usartbase0 = USART0; pmcbase->PMC_PCER = 0x4; // Clock für US0 einschalten piobaseA->PIO_PDR = 0x18000; // US0 TxD und RxD usartbase0->US_CR = 0xa0; // TxD und RxD disable usartbase0->US_BRGR = 0x29; // Baud Rate Generator Register usartbase0->US_MR = 0x8c0; // Keine Parität, 8 Bit, MCKI usartbase0->US_CR = 0x50; // TxD und RxD enable return 0; } // Gibt wenn möglich ein Zeichen auf die serielle Schnittstelle aus // und liefert das Zeichen wieder zurück // wenn eine Ausgabe nicht möglich war wird eine 0 zurück geliefert char putch(char Zeichen) { StructUSART* usartbase0 = USART0; if( usartbase0->US_CSR & US_TXRDY ) { usartbase0->US_THR = Zeichen; return Zeichen; } else { return 0; } } // Gibt entweder ein empfangenes Zeichen oder eine 0 zurück char getch(void) { StructUSART* usartbase0 = USART0; char Zeichen; if( usartbase0->US_CSR & US_RXRDY ) return usartbase0->US_RHR; else return 0; }