static int imxrt_putc(struct rt_serial_device *serial, char ch) { struct imxrt_uart *uart; RT_ASSERT(serial != RT_NULL); uart = (struct imxrt_uart *)serial->parent.user_data; LPUART_WriteByte(uart->uart_base, ch); while (!(LPUART_GetStatusFlags(uart->uart_base) & kLPUART_TxDataRegEmptyFlag)); return 1; }
static unsigned char mcux_lpuart_poll_out(struct device *dev, unsigned char c) { const struct mcux_lpuart_config *config = dev->config->config_info; while (!(LPUART_GetStatusFlags(config->base) & kLPUART_TxDataRegEmptyFlag)) ; LPUART_WriteByte(config->base, c); return c; }
static int mcux_lpuart_fifo_fill(struct device *dev, const u8_t *tx_data, int len) { const struct mcux_lpuart_config *config = dev->config->config_info; u8_t num_tx = 0; while ((len - num_tx > 0) && (LPUART_GetStatusFlags(config->base) & kLPUART_TxDataRegEmptyFlag)) { LPUART_WriteByte(config->base, tx_data[num_tx++]); } return num_tx; }
/*! * @brief Main function */ int main(void) { lpuart_config_t config; BOARD_InitPins(); BOARD_BootClockRUN(); CLOCK_SetLpuart1Clock(1U); /* * config.baudRate_Bps = 115200U; * config.parityMode = kLPUART_ParityDisabled; * config.stopBitCount = kLPUART_OneStopBit; * config.txFifoWatermark = 0; * config.rxFifoWatermark = 0; * config.enableTx = false; * config.enableRx = false; */ LPUART_GetDefaultConfig(&config); config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; config.enableTx = true; config.enableRx = true; LPUART_Init(DEMO_LPUART, &config, CLOCK_GetFreq(DEMO_LPUART_CLKSRC)); /* Send g_tipString out. */ LPUART_WriteBlocking(DEMO_LPUART, g_tipString, sizeof(g_tipString) / sizeof(g_tipString[0])); /* Enable RX interrupt. */ LPUART_EnableInterrupts(DEMO_LPUART, kLPUART_RxDataRegFullInterruptEnable); EnableIRQ(DEMO_LPUART_IRQn); while (1) { /* Send data only when LPUART TX register is empty and ring buffer has data to send out. */ while ((kLPUART_TxDataRegEmptyFlag & LPUART_GetStatusFlags(DEMO_LPUART)) && (rxIndex != txIndex)) { LPUART_WriteByte(DEMO_LPUART, demoRingBuffer[txIndex]); txIndex++; txIndex %= DEMO_RING_BUFFER_SIZE; } } }
void serial_putc(serial_t *obj, int c) { while (!serial_writable(obj)); LPUART_WriteByte(uart_addrs[obj->index], (uint8_t)c); }