*/
#include <cfg/macros.h> /* for BV() */
-#include <drv/clock_lm3s.h> /* lm3s_busyWait() */
#include <drv/gpio_lm3s.h>
#include <drv/ser_p.h>
#include <drv/ser.h>
/* GPIO descriptor for UART pins */
struct gpio_uart_info
{
+ /* Sysctl */
+ uint32_t sysctl;
/* GPIO base address register */
uint32_t base;
/* Pin(s) bitmask */
{
.base = GPIO_PORTA_BASE,
.pins = BV(1) | BV(0),
+ .sysctl = SYSCTL_RCGC2_GPIOA,
},
/* UART1 */
{
.base = GPIO_PORTD_BASE,
.pins = BV(3) | BV(2),
+ .sysctl = SYSCTL_RCGC2_GPIOD,
},
/* UART2 */
{
.base = GPIO_PORTG_BASE,
.pins = BV(1) | BV(0),
+ .sysctl = SYSCTL_RCGC2_GPIOG,
},
};
-/* Clear the flags register */
-INLINE void lm3s_uartClear(uint32_t base)
-{
- HWREG(base + UART_O_FR) = 0;
-}
-
void lm3s_uartSetBaudRate(uint32_t base, unsigned long baud)
{
unsigned long div;
/* Enable the peripheral clock */
SYSCTL_RCGC1_R |= reg_clock;
- SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOA;
+ SYSCTL_RCGC2_R |= gpio_uart[port].sysctl;
lm3s_busyWait(512);
/* Configure GPIO pins to work as UART pins */
while (lm3s_uartTxReady(base))
{
- if (fifo_isempty(txfifo)) {
+ if (fifo_isempty(txfifo))
+ {
/*
* Disable TX empty interrupts if there're no more
* characters to transmit.
uart_irq_tx(port);
}
-static void
-lm3s_uartIRQEnable(int port, sysirq_handler_t handler)
+static void lm3s_uartIRQEnable(int port, sysirq_handler_t handler)
{
uint32_t base = UARTDesc[port].base;
sysirq_t irq = UARTDesc[port].irq;