int serial_writable(serial_t *obj) { uint32_t uart_address[] = UART_BASE_ADDRS; if (UART_HAL_GetStatusFlag(uart_address[obj->index], kUartRxOverrun)) UART_HAL_ClearStatusFlag(uart_address[obj->index], kUartRxOverrun); return UART_HAL_IsTxDataRegEmpty(uart_address[obj->index]); }
/* Function below will be removed when the UART PD driver support the poll mode later. */ static uint32_t UART_DRV_SendPollBlocking( uint32_t instance, const uint8_t *buf, uint32_t count, uint32_t timeout) { uint32_t size = count; uint32_t baseAddr = g_uartBaseAddr[s_debugConsole.instance]; /* No timeout mechanism now. */ while (size--) { while (!UART_HAL_IsTxDataRegEmpty(baseAddr)) {} UART_HAL_Putchar(baseAddr, *buf++); } return count; }
void uart4_irq() { uart_irq(UART_HAL_IsTxDataRegEmpty(UART4_BASE), UART_HAL_IsRxDataRegFull(UART4_BASE), 4); }
void uart3_irq() { uart_irq(UART_HAL_IsTxDataRegEmpty(UART3_BASE), UART_HAL_IsRxDataRegFull(UART3_BASE), 3); }
void uart2_irq() { uart_irq(UART_HAL_IsTxDataRegEmpty(UART2_BASE), UART_HAL_IsRxDataRegFull(UART2_BASE), 2); }
void uart1_irq() { uart_irq(UART_HAL_IsTxDataRegEmpty(UART1_BASE), UART_HAL_IsRxDataRegFull(UART1_BASE), 1); }
void uart0_irq() { uart_irq(UART_HAL_IsTxDataRegEmpty(UART0_BASE), UART_HAL_IsRxDataRegFull(UART0_BASE), 0); if (UART_HAL_GetStatusFlag(UART0_BASE, kUartRxOverrun)) UART_HAL_ClearStatusFlag(UART0_BASE, kUartRxOverrun); }