{
/* Enable Tx and Rx */
US0_CR = BV(US_RXEN) | BV(US_TXEN);
+ /* Enable Rx interrupt */
+ US0_IER = BV(US_RXRDY);
+ /* Disable Tx interrupt */
+ US0_IDR = BV(US_TXRDY);
}
else
{
char c = fifo_pop(txfifo);
+ kprintf("Tx char: %c\n", c);
/* Send one char */
US0_THR = c;
}
{
SER_STROBE_ON;
- /* Should be read before UDR */
+ /* Should be read before US_CRS */
ser_uart0->status |= US0_CSR & (SERRF_RXSROVERRUN | SERRF_FRAMEERROR);
char c = US0_RHR;
ser_uart0->status |= SERRF_RXFIFOOVERRUN;
else
{
+ kprintf("Recv char: %c\n", c);
fifo_push(rxfifo, c);
}
IRQ_ENTRY();
if (US0_IMR & BV(US_RXRDY))
+ {
+ kprintf("IRQ RX\n");
serirq_rx();
-
+ }
if (US0_IMR & BV(US_TXRDY))
+ {
+ kprintf("IRQ TX\n");
serirq_tx();
-
+ }
IRQ_EXIT();
}
/* Disable GPIO on UART tx/rx pins. */
PIOA_PDR = BV(5) | BV(6);
- /* Set serial param: mode Normal, 8bit data, 1bit stop */
- US0_MR = US_CHMODE_NORMAL | US_CHRL_8 | US_NBSTOP_1;
-
/* Reset UART. */
US0_CR = BV(US_RSTRX) | BV(US_RSTTX);
+ /* Set serial param: mode Normal, 8bit data, 1bit stop */
+ US0_MR = US_CHMODE_NORMAL | US_CHRL_8 | US_NBSTOP_1;
+
/* Enable Tx and Rx */
US0_CR = BV(US_RXEN) | BV(US_TXEN);
- /* Enable Tx and Rx interrupt*/
- US0_IER = BV(US_RXRDY) | BV(US_TXRDY);
+ /* Enable Rx interrupt*/
+ US0_IER = BV(US_RXRDY);
}
hw->sending = true;
/* Enable Tx and Rx */
US0_CR = BV(US_RXEN) | BV(US_TXEN);
+ /* Enable Tx and Rx interrupt*/
+ US0_IER = BV(US_TXRDY) | BV(US_RXRDY);
}
}