summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/target/firmware/board/compal_e88/init.c4
-rw-r--r--src/target/firmware/calypso/uart.c26
-rw-r--r--src/target/firmware/include/calypso/uart.h4
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 */