diff options
author | Ingo Albrecht <prom@berlin.ccc.de> | 2010-02-24 02:37:04 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-03-07 11:47:10 +0100 |
commit | 2fc7d9d001f470022c86edfa069c31c189c6d5c4 (patch) | |
tree | 5f7569d27a2b062eeceda70073f628fbee6e8ddd | |
parent | 842dbc31d1e1203a0cf133a17ceef5a89d495d69 (diff) |
Allow use of uart driver without interrupts.
-rw-r--r-- | src/target/firmware/board/compal_e88/init.c | 4 | ||||
-rw-r--r-- | src/target/firmware/calypso/uart.c | 26 | ||||
-rw-r--r-- | src/target/firmware/include/calypso/uart.h | 4 |
3 files changed, 24 insertions, 10 deletions
diff --git a/src/target/firmware/board/compal_e88/init.c b/src/target/firmware/board/compal_e88/init.c index 38045682..36563360 100644 --- a/src/target/firmware/board/compal_e88/init.c +++ b/src/target/firmware/board/compal_e88/init.c @@ -104,12 +104,12 @@ void board_init(void) irq_init(); /* initialize MODEM UART to be used for sercomm*/ - uart_init(SERCOMM_UART_NR); + uart_init(SERCOMM_UART_NR, 1); uart_baudrate(SERCOMM_UART_NR, UART_115200); /* initialize IRDA UART to be used for old-school console code. * note: IRDA uart only accessible on C115 and C117 PCB */ - uart_init(CONS_UART_NR); + uart_init(CONS_UART_NR, 1); uart_baudrate(CONS_UART_NR, UART_115200); hwtimer_init(); diff --git a/src/target/firmware/calypso/uart.c b/src/target/firmware/calypso/uart.c index 7e68edc3..70e50c15 100644 --- a/src/target/firmware/calypso/uart.c +++ b/src/target/firmware/calypso/uart.c @@ -272,21 +272,25 @@ static const uint8_t uart2irq[] = { [1] = IRQ_UART_MODEM, }; -void uart_init(uint8_t uart) +void uart_init(uint8_t uart, uint8_t interrupts) { uint8_t irq = uart2irq[uart]; uart_reg_write(uart, IER, 0x00); if (uart == CONS_UART_NR) { cons_init(); - irq_register_handler(irq, &uart_irq_handler_cons); - irq_config(irq, 0, 0, 0xff); - irq_enable(irq); + if(interrupts) { + irq_register_handler(irq, &uart_irq_handler_cons); + irq_config(irq, 0, 0, 0xff); + irq_enable(irq); + } } else { sercomm_init(); - irq_register_handler(irq, &uart_irq_handler_sercomm); - irq_config(irq, 0, 0, 0xff); - irq_enable(irq); + if(interrupts) { + irq_register_handler(irq, &uart_irq_handler_sercomm); + irq_config(irq, 0, 0, 0xff); + irq_enable(irq); + } uart_irq_enable(uart, UART_IRQ_RX_CHAR, 1); } #if 0 @@ -312,6 +316,14 @@ void uart_init(uint8_t uart) uart_set_lcr7bit(uart, 0); } +void uart_poll(uint8_t uart) { + if(uart == CONS_UART_NR) { + uart_irq_handler_cons(0); + } else { + uart_irq_handler_sercomm(0); + } +} + void uart_irq_enable(uint8_t uart, enum uart_irq irq, int on) { uint8_t ier = uart_reg_read(uart, IER); diff --git a/src/target/firmware/include/calypso/uart.h b/src/target/firmware/include/calypso/uart.h index 845612f0..7eb925ed 100644 --- a/src/target/firmware/include/calypso/uart.h +++ b/src/target/firmware/include/calypso/uart.h @@ -13,7 +13,7 @@ enum uart_baudrate { UART_921600, }; -void uart_init(uint8_t uart); +void uart_init(uint8_t uart, uint8_t interrupts); void uart_putchar_wait(uint8_t uart, int c); int uart_putchar_nb(uint8_t uart, int c); int uart_getchar_nb(uint8_t uart, uint8_t *ch); @@ -27,4 +27,6 @@ enum uart_irq { void uart_irq_enable(uint8_t uart, enum uart_irq irq, int on); +void uart_poll(uint8_t uart); + #endif /* _CAL_UART_H */ |