//example_uart_rcvIqr.c

include "example.h"

// test uart1 rcv irq
volatile char isRecv = 0;
char rxbuf[32];
void UART1_isr()
{
if (UART_IsRawIntActive(UART1, UART_INT_RX)) {
UART_ClearInt(UART1, UART_INT_RX);
UART_Receive(UART1, rxbuf, 8, 0); //half: 16/2=8
isRecv = 1;
}
}
void TestUart_rcvIrq(void)
{
const char txbuf[] = "uart1 rx INT\n";

GPIO_AF_ENABLE(UART1_UARTRXD)
GPIO_AF_ENABLE(UART1_UARTTXD);
SYS_EnableAPBClock(APB_MASK_UART1);

UART_Init(UART1, 115200, UART_LCR_DATABITS_8, UART_LCR_STOPBITS_1,
UART_LCR_PARITY_NONE, UART_LCR_FIFO_16);

UART_EnableInt(UART1, UART_INT_RX);
UART_SetRxIntFifoLevel(UART1, UART_INT_FIFO_HALF);
INT_EnableIRQ(UART1_IRQn, UART_PRIORITY);

UART_Send(UART1, txbuf, strlen(txbuf));
while (1)
{
if (isRecv > 0)
{
UART_Send(UART1, rxbuf, 8);
isRecv = 0;
}
}
}

// test uart1 simple tx and rx
void TestUart_simple(void)
{
char txbuf[] = "simple uart1\n";
char rxbuf[32];

GPIO_AF_ENABLE(UART1_UARTRXD)
GPIO_AF_ENABLE(UART1_UARTTXD);
SYS_EnableAPBClock(APB_MASK_UART1);

UART_Init(UART1, 115200, UART_LCR_DATABITS_8, UART_LCR_STOPBITS_1,
UART_LCR_PARITY_NONE, UART_LCR_FIFO_16);

UART_Send(UART1, txbuf, strlen(txbuf));
while (1)
{
int rLen = UART_Receive(UART1, rxbuf, 12, 0);
if (rLen > 0)
{
UART_Send(UART1, rxbuf, rLen);
}
}
}