25#define FSL_LPUART_DRIVER_VERSION (MAKE_VERSION(2, 2, 6))
62#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
74#if defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) && FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT
120#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT
132#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
146 (LPUART_STAT_TDRE_MASK),
148 (LPUART_STAT_TC_MASK),
150 (LPUART_STAT_RDRF_MASK),
157 (LPUART_STAT_FE_MASK),
159#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT
161 (int)(LPUART_STAT_LBKDIF_MASK),
165 (LPUART_STAT_RXEDGIF_MASK),
167 (LPUART_STAT_RAF_MASK),
168#if defined(FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING) && FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING
172#if defined(FSL_FEATURE_LPUART_HAS_EXTENDED_DATA_REGISTER_FLAGS) && FSL_FEATURE_LPUART_HAS_EXTENDED_DATA_REGISTER_FLAGS
174 (LPUART_DATA_NOISY_MASK >> 10),
176 (LPUART_DATA_PARITYE_MASK >> 10),
178#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
182 (LPUART_FIFO_TXOF_MASK >> 16),
184 (LPUART_FIFO_RXUF_MASK >> 16),
195#if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT
198#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
202#if defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) && FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT
248#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
257#if defined(__cplusplus)
261#if defined(FSL_FEATURE_LPUART_HAS_GLOBAL) && FSL_FEATURE_LPUART_HAS_GLOBAL
278 base->GLOBAL |= LPUART_GLOBAL_RST_MASK;
279 base->GLOBAL &= ~LPUART_GLOBAL_RST_MASK;
468#if defined(FSL_FEATURE_LPUART_HAS_DMA_ENABLE) && FSL_FEATURE_LPUART_HAS_DMA_ENABLE
479 return (uint32_t) & (base->DATA);
494 base->BAUD |= LPUART_BAUD_TDMAE_MASK;
498 base->BAUD &= ~LPUART_BAUD_TDMAE_MASK;
514 base->BAUD |= LPUART_BAUD_RDMAE_MASK;
518 base->BAUD &= ~LPUART_BAUD_RDMAE_MASK;
550 base->CTRL |= LPUART_CTRL_TE_MASK;
554 base->CTRL &= ~LPUART_CTRL_TE_MASK;
570 base->CTRL |= LPUART_CTRL_RE_MASK;
574 base->CTRL &= ~LPUART_CTRL_RE_MASK;
603#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
604 uint32_t ctrl = base->CTRL;
605 bool isSevenDataBits =
606 ((ctrl & LPUART_CTRL_M7_MASK) ||
607 ((!(ctrl & LPUART_CTRL_M7_MASK)) && (!(ctrl & LPUART_CTRL_M_MASK)) && (ctrl & LPUART_CTRL_PE_MASK)));
611 return (base->DATA & 0x7F);
725 size_t ringBufferSize);
800 size_t *receivedBytes);
849#if defined(__cplusplus)
static constexpr persistent_config_s * config
int32_t status_t
Type used for all status and error return values.
lpuart_transmit_cts_config_t txCtsConfig
static uint8_t LPUART_ReadByte(LPUART_Type *base)
Reads the receiver register.
void LPUART_TransferCreateHandle(LPUART_Type *base, lpuart_handle_t *handle, lpuart_transfer_callback_t callback, void *userData)
Initializes the LPUART handle.
_lpuart_idle_config
LPUART idle detected configuration. This structure defines the number of idle characters that must be...
uint32_t LPUART_GetEnabledInterrupts(LPUART_Type *base)
Gets enabled LPUART interrupts.
enum _lpuart_transmit_cts_source lpuart_transmit_cts_source_t
LPUART transmit CTS source.
_lpuart_interrupt_enable
LPUART interrupt configuration structure, default settings all disabled.
volatile uint16_t rxRingBufferHead
void LPUART_TransferHandleErrorIRQ(LPUART_Type *base, lpuart_handle_t *handle)
LPUART Error IRQ handle function.
_lpuart_parity_mode
LPUART parity mode.
lpuart_transmit_cts_source_t txCtsSource
_lpuart_flags
LPUART status flags.
void LPUART_DisableInterrupts(LPUART_Type *base, uint32_t mask)
Disables LPUART interrupts according to a provided mask.
status_t LPUART_Init(LPUART_Type *base, const lpuart_config_t *config, uint32_t srcClock_Hz)
Initializes an LPUART instance with the user configuration structure and the peripheral clock.
volatile uint16_t rxRingBufferTail
void LPUART_Deinit(LPUART_Type *base)
Deinitializes a LPUART instance.
struct _lpuart_transfer lpuart_transfer_t
LPUART transfer structure.
enum _lpuart_idle_type_select lpuart_idle_type_select_t
LPUART idle flag type defines when the receiver starts counting.
lpuart_parity_mode_t parityMode
lpuart_idle_type_select_t rxIdleType
void LPUART_TransferAbortReceive(LPUART_Type *base, lpuart_handle_t *handle)
Aborts the interrupt-driven data receiving.
static void LPUART_EnableTx(LPUART_Type *base, bool enable)
Enables or disables the LPUART transmitter.
void LPUART_TransferStartRingBuffer(LPUART_Type *base, lpuart_handle_t *handle, uint8_t *ringBuffer, size_t ringBufferSize)
Sets up the RX ring buffer.
size_t LPUART_TransferGetRxRingBufferLength(LPUART_Type *base, lpuart_handle_t *handle)
Get the length of received data in RX ring buffer.
void(* lpuart_transfer_callback_t)(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData)
LPUART transfer callback function.
_lpuart_data_bits
LPUART data bits count.
static void LPUART_SoftwareReset(LPUART_Type *base)
Resets the LPUART using software.
_lpuart_idle_type_select
LPUART idle flag type defines when the receiver starts counting.
enum _lpuart_transmit_cts_config lpuart_transmit_cts_config_t
LPUART transmit CTS configure.
enum _lpuart_data_bits lpuart_data_bits_t
LPUART data bits count.
void LPUART_TransferAbortSend(LPUART_Type *base, lpuart_handle_t *handle)
Aborts the interrupt-driven data transmit.
struct _lpuart_config lpuart_config_t
LPUART configuration structure.
status_t LPUART_TransferReceiveNonBlocking(LPUART_Type *base, lpuart_handle_t *handle, lpuart_transfer_t *xfer, size_t *receivedBytes)
Receives a buffer of data using the interrupt method.
_lpuart_status
Error codes for the LPUART driver.
lpuart_stop_bit_count_t stopBitCount
void LPUART_GetDefaultConfig(lpuart_config_t *config)
Gets the default configuration structure.
static void LPUART_WriteByte(LPUART_Type *base, uint8_t data)
Writes to the transmitter register.
volatile size_t txDataSize
enum _lpuart_stop_bit_count lpuart_stop_bit_count_t
LPUART stop bit count.
static void LPUART_EnableTxDMA(LPUART_Type *base, bool enable)
Enables or disables the LPUART transmitter DMA request.
static void LPUART_EnableRx(LPUART_Type *base, bool enable)
Enables or disables the LPUART receiver.
enum _lpuart_parity_mode lpuart_parity_mode_t
LPUART parity mode.
uint32_t LPUART_GetInstance(LPUART_Type *base)
Get the LPUART instance from peripheral base address.
enum _lpuart_idle_config lpuart_idle_config_t
LPUART idle detected configuration. This structure defines the number of idle characters that must be...
lpuart_transfer_callback_t callback
lpuart_idle_config_t rxIdleConfig
void LPUART_EnableInterrupts(LPUART_Type *base, uint32_t mask)
Enables LPUART interrupts according to a provided mask.
uint32_t LPUART_GetStatusFlags(LPUART_Type *base)
Gets LPUART status flags.
status_t LPUART_TransferGetReceiveCount(LPUART_Type *base, lpuart_handle_t *handle, uint32_t *count)
Gets the number of bytes that have been received.
void LPUART_WriteBlocking(LPUART_Type *base, const uint8_t *data, size_t length)
Writes to the transmitter register using a blocking method.
status_t LPUART_ClearStatusFlags(LPUART_Type *base, uint32_t mask)
Clears status flags with a provided mask.
void LPUART_TransferHandleIRQ(LPUART_Type *base, lpuart_handle_t *handle)
LPUART IRQ handle function.
volatile size_t rxDataSize
_lpuart_stop_bit_count
LPUART stop bit count.
void LPUART_TransferStopRingBuffer(LPUART_Type *base, lpuart_handle_t *handle)
Aborts the background transfer and uninstalls the ring buffer.
status_t LPUART_TransferGetSendCount(LPUART_Type *base, lpuart_handle_t *handle, uint32_t *count)
Gets the number of bytes that have been written to the LPUART transmitter register.
static void LPUART_EnableRxDMA(LPUART_Type *base, bool enable)
Enables or disables the LPUART receiver DMA.
status_t LPUART_ReadBlocking(LPUART_Type *base, uint8_t *data, size_t length)
Reads the receiver data register using a blocking method.
_lpuart_transmit_cts_config
LPUART transmit CTS configure.
status_t LPUART_SetBaudRate(LPUART_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz)
Sets the LPUART instance baudrate.
static uint32_t LPUART_GetDataRegisterAddress(LPUART_Type *base)
Gets the LPUART data register address.
_lpuart_transmit_cts_source
LPUART transmit CTS source.
lpuart_data_bits_t dataBitsCount
status_t LPUART_TransferSendNonBlocking(LPUART_Type *base, lpuart_handle_t *handle, lpuart_transfer_t *xfer)
Transmits a buffer of data using the interrupt method.
@ kLPUART_IdleCharacter32
@ kLPUART_IdleCharacter128
@ kLPUART_IdleCharacter64
@ kLPUART_IdleCharacter16
@ kLPUART_TransmissionCompleteInterruptEnable
@ kLPUART_TxDataRegEmptyInterruptEnable
@ kLPUART_ParityErrorInterruptEnable
@ kLPUART_FramingErrorInterruptEnable
@ kLPUART_TxFifoOverflowInterruptEnable
@ kLPUART_RxActiveEdgeInterruptEnable
@ kLPUART_RxDataRegFullInterruptEnable
@ kLPUART_RxOverrunInterruptEnable
@ kLPUART_RxFifoUnderflowInterruptEnable
@ kLPUART_NoiseErrorInterruptEnable
@ kLPUART_LinBreakInterruptEnable
@ kLPUART_IdleLineInterruptEnable
@ kLPUART_RxFifoUnderflowFlag
@ kLPUART_NoiseErrorInRxDataRegFlag
@ kLPUART_ParityErrorInRxDataRegFlag
@ kLPUART_ParityErrorFlag
@ kLPUART_TxFifoOverflowFlag
@ kLPUART_RxFifoEmptyFlag
@ kLPUART_RxDataRegFullFlag
@ kLPUART_TxDataRegEmptyFlag
@ kLPUART_FramingErrorFlag
@ kLPUART_TxFifoEmptyFlag
@ kLPUART_TransmissionCompleteFlag
@ kLPUART_RxActiveEdgeFlag
@ kLPUART_IdleTypeStartBit
@ kLPUART_IdleTypeStopBit
@ kStatus_LPUART_FlagCannotClearManually
@ kStatus_LPUART_FramingError
@ kStatus_LPUART_IdleLineDetected
@ kStatus_LPUART_RxRingBufferOverrun
@ kStatus_LPUART_NoiseError
@ kStatus_LPUART_BaudrateNotSupport
@ kStatus_LPUART_TxWatermarkTooLarge
@ kStatus_LPUART_RxWatermarkTooLarge
@ kStatus_LPUART_ParityError
@ kStatus_LPUART_RxHardwareOverrun
@ kLPUART_CtsSampleAtStart
@ kLPUART_CtsSampleAtIdle
@ kLPUART_CtsSourceMatchResult
static void enable(const char *param)
LPUART configuration structure.
LPUART transfer structure.