diff options
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/uart.c | 22 | 
1 files changed, 22 insertions, 0 deletions
diff --git a/src/drivers/uart.c b/src/drivers/uart.c index 86fd4b0..41ce10e 100644 --- a/src/drivers/uart.c +++ b/src/drivers/uart.c @@ -1,7 +1,9 @@  #include <drivers/uart.h>  #include <lib/kmem.h>  #include <lib/strings.h> +#include <sys/core.h>  #include <sys/schedule.h> +#include <symbols.h>  #define UART_BUFFER_SIZE 0x100  struct UartBuffer { @@ -14,6 +16,26 @@ void uart_init(void)  {  	ubuffer.roffset = 0;  	ubuffer.woffset = 0; + +	// Disable UART0 +	store32(0x0, UART0_CR); +	// Setup GPIO on pin 14 and 15 +	store32(0x0, GPPUD); +	delay(150); +	store32((1 << 14) | (1 << 15), GPPUDCLK0); +	delay(150); +	store32(0x0, GPPUDCLK0); +	// Clear pending interrupts +	store32(0x7FF, UART0_ICR); +	// Set to 3Mhz +	store32(1, UART0_IBRD); +	store32(40, UART0_FBRD); +	// Enable FIFO and 8 bit transmission +	store32((1<<4)|(1<<5)|(1<<6), UART0_LCRH); +	// Mask all interrupts +	store32((1<<1)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)|(1<<10), UART0_IMSC); +	// Enable UART0 +	store32((1<<0)|(1<<8)|(1<<9), UART0_CR);  }  // s = zero-terminated string  | 
