static int imxrt_getc(struct rt_serial_device *serial) { int ch; struct imxrt_uart *uart; RT_ASSERT(serial != RT_NULL); uart = (struct imxrt_uart *)serial->parent.user_data; ch = -1; if (LPUART_GetStatusFlags(uart->uart_base) & kLPUART_RxDataRegFullFlag) ch = LPUART_ReadByte(uart->uart_base); return ch; }
static int mcux_lpuart_poll_in(struct device *dev, unsigned char *c) { const struct mcux_lpuart_config *config = dev->config->config_info; u32_t flags = LPUART_GetStatusFlags(config->base); int ret = -1; if (flags & kLPUART_RxDataRegFullFlag) { *c = LPUART_ReadByte(config->base); ret = 0; } return ret; }
static int mcux_lpuart_fifo_read(struct device *dev, u8_t *rx_data, const int len) { const struct mcux_lpuart_config *config = dev->config->config_info; u8_t num_rx = 0; while ((len - num_rx > 0) && (LPUART_GetStatusFlags(config->base) & kLPUART_RxDataRegFullFlag)) { rx_data[num_rx++] = LPUART_ReadByte(config->base); } return num_rx; }
void BOARD_CELL_UART_IRQ_HANDLER(void) { if ((kLPUART_RxDataRegFullFlag) & LPUART_GetStatusFlags(BOARD_CELL_UART)) { uint8_t data = LPUART_ReadByte(BOARD_CELL_UART); // it may be necessary to create a critical section here, but // right now it didn't hurt us to not disable interrupts // __disable_irq(); /* If ring buffer is not full, add data to ring buffer. */ if (((gsmRxIndex + 1) % GSM_RINGBUFFER_SIZE) != gsmRxHead) { gsmUartRingBuffer[gsmRxIndex++] = data; gsmRxIndex %= GSM_RINGBUFFER_SIZE; } // __enable_irq(); } }
void DEMO_LPUART_IRQHandler(void) { uint8_t data; /* If new data arrived. */ if ((kLPUART_RxDataRegFullFlag)&LPUART_GetStatusFlags(DEMO_LPUART)) { data = LPUART_ReadByte(DEMO_LPUART); /* If ring buffer is not full, add data to ring buffer. */ if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) { demoRingBuffer[rxIndex] = data; rxIndex++; rxIndex %= DEMO_RING_BUFFER_SIZE; } } }