17#ifndef FSL_COMPONENT_ID
18#define FSL_COMPONENT_ID "platform.drivers.lpuart"
82#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
88#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
92#if defined(LPUART_PERIPH_CLOCKS)
179 for (i = 0; i < length; i++)
181 base->DATA = data[i];
190#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
191 uint32_t ctrl = base->CTRL;
192 bool isSevenDataBits =
193 ((ctrl & LPUART_CTRL_M7_MASK) || ((!(ctrl & LPUART_CTRL_M_MASK)) && (ctrl & LPUART_CTRL_PE_MASK)));
198 for (i = 0; i < length; i++)
200#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
203 data[i] = (base->DATA & 0x7F);
207 data[i] = base->DATA;
210 data[i] = base->DATA;
242 assert(
config->baudRate_Bps);
243#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
244 assert(FSL_FEATURE_LPUART_FIFO_SIZEn(base) >=
config->txFifoWatermark);
245 assert(FSL_FEATURE_LPUART_FIFO_SIZEn(base) >=
config->rxFifoWatermark);
249 uint16_t sbr, sbrTemp;
250 uint32_t osr, osrTemp, tempDiff, calculatedBaud, baudDiff;
258 baudDiff =
config->baudRate_Bps;
261 for (osrTemp = 4; osrTemp <= 32; osrTemp++)
264 sbrTemp = (srcClock_Hz / (
config->baudRate_Bps * osrTemp));
271 calculatedBaud = (srcClock_Hz / (osrTemp * sbrTemp));
273 tempDiff = calculatedBaud -
config->baudRate_Bps;
276 if (tempDiff > (
config->baudRate_Bps - (srcClock_Hz / (osrTemp * (sbrTemp + 1)))))
278 tempDiff =
config->baudRate_Bps - (srcClock_Hz / (osrTemp * (sbrTemp + 1)));
282 if (tempDiff <= baudDiff)
292 if (baudDiff > ((
config->baudRate_Bps / 100) * 3))
298#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
304#if defined(LPUART_PERIPH_CLOCKS)
310#if defined(FSL_FEATURE_LPUART_HAS_GLOBAL) && FSL_FEATURE_LPUART_HAS_GLOBAL
315 base->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK);
322 if ((osr > 3) && (osr < 8))
324 temp |= LPUART_BAUD_BOTHEDGE_MASK;
328 temp &= ~LPUART_BAUD_OSR_MASK;
329 temp |= LPUART_BAUD_OSR(osr - 1);
332 temp &= ~LPUART_BAUD_SBR_MASK;
333 base->BAUD = temp | LPUART_BAUD_SBR(sbr);
336 base->BAUD &= ~LPUART_BAUD_M10_MASK;
339 ~(LPUART_CTRL_PE_MASK | LPUART_CTRL_PT_MASK | LPUART_CTRL_M_MASK | LPUART_CTRL_ILT_MASK |
340 LPUART_CTRL_IDLECFG_MASK);
343 (uint8_t)
config->parityMode | LPUART_CTRL_IDLECFG(
config->rxIdleConfig) | LPUART_CTRL_ILT(
config->rxIdleType);
345#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
350 temp &= ~LPUART_CTRL_M7_MASK;
354 temp |= LPUART_CTRL_M7_MASK;
362 temp |= LPUART_CTRL_M_MASK;
368#if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT
370 temp = base->BAUD & ~LPUART_BAUD_SBNS_MASK;
371 base->BAUD = temp | LPUART_BAUD_SBNS((uint8_t)
config->stopBitCount);
374#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
384 base->WATER = (((uint32_t)(
config->rxFifoWatermark) << 16) |
config->txFifoWatermark);
387 base->FIFO |= (LPUART_FIFO_TXFE_MASK | LPUART_FIFO_RXFE_MASK);
390 base->FIFO |= (LPUART_FIFO_TXFLUSH_MASK | LPUART_FIFO_RXFLUSH_MASK);
394 temp = (LPUART_STAT_RXEDGIF_MASK | LPUART_STAT_IDLE_MASK | LPUART_STAT_OR_MASK | LPUART_STAT_NF_MASK |
395 LPUART_STAT_FE_MASK | LPUART_STAT_PF_MASK);
397#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT
398 temp |= LPUART_STAT_LBKDIF_MASK;
401#if defined(FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING) && FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING
402 temp |= (LPUART_STAT_MA1F_MASK | LPUART_STAT_MA2F_MASK);
405#if defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) && FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT
407 base->MODIR |= LPUART_MODIR_TXCTSC(
config->txCtsConfig) | LPUART_MODIR_TXCTSSRC(
config->txCtsSource);
411 base->MODIR |= LPUART_MODIR_RXRTSE_MASK;
416 base->MODIR |= LPUART_MODIR_TXCTSE_MASK;
423 temp |= LPUART_STAT_MSBF_MASK;
427 temp &= ~LPUART_STAT_MSBF_MASK;
436 temp |= LPUART_CTRL_TE_MASK;
441 temp |= LPUART_CTRL_RE_MASK;
459#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
461 while (0 != ((base->WATER & LPUART_WATER_TXCOUNT_MASK) >> LPUART_WATER_TXWATER_SHIFT))
466 while (0 == (base->STAT & LPUART_STAT_TC_MASK))
471 temp = (LPUART_STAT_RXEDGIF_MASK | LPUART_STAT_IDLE_MASK | LPUART_STAT_OR_MASK | LPUART_STAT_NF_MASK |
472 LPUART_STAT_FE_MASK | LPUART_STAT_PF_MASK);
474#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT
475 temp |= LPUART_STAT_LBKDIF_MASK;
478#if defined(FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING) && FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING
479 temp |= (LPUART_STAT_MA1F_MASK | LPUART_STAT_MA2F_MASK);
487#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
493#if defined(LPUART_PERIPH_CLOCKS)
526 config->baudRate_Bps = 115200U;
530#if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT
533#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
534 config->txFifoWatermark = 0;
535 config->rxFifoWatermark = 0;
537#if defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) && FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT
538 config->enableRxRTS =
false;
539 config->enableTxCTS =
false;
566 assert(baudRate_Bps);
568 uint32_t temp, oldCtrl;
569 uint16_t sbr, sbrTemp;
570 uint32_t osr, osrTemp, tempDiff, calculatedBaud, baudDiff;
578 baudDiff = baudRate_Bps;
581 for (osrTemp = 4; osrTemp <= 32; osrTemp++)
584 sbrTemp = (srcClock_Hz / (baudRate_Bps * osrTemp));
591 calculatedBaud = (srcClock_Hz / (osrTemp * sbrTemp));
593 tempDiff = calculatedBaud - baudRate_Bps;
596 if (tempDiff > (baudRate_Bps - (srcClock_Hz / (osrTemp * (sbrTemp + 1)))))
598 tempDiff = baudRate_Bps - (srcClock_Hz / (osrTemp * (sbrTemp + 1)));
602 if (tempDiff <= baudDiff)
612 if (baudDiff < ((baudRate_Bps / 100) * 3))
615 oldCtrl = base->CTRL;
618 base->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK);
624 if ((osr > 3) && (osr < 8))
626 temp |= LPUART_BAUD_BOTHEDGE_MASK;
630 temp &= ~LPUART_BAUD_OSR_MASK;
631 temp |= LPUART_BAUD_OSR(osr - 1);
634 temp &= ~LPUART_BAUD_SBR_MASK;
635 base->BAUD = temp | LPUART_BAUD_SBR(sbr);
638 base->CTRL = oldCtrl;
664 base->BAUD |= ((mask << 8) & (LPUART_BAUD_LBKDIE_MASK | LPUART_BAUD_RXEDGIE_MASK));
665#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
666 base->FIFO = (base->FIFO & ~(LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK)) |
667 ((mask << 8) & (LPUART_FIFO_TXOFE_MASK | LPUART_FIFO_RXUFE_MASK));
688 base->BAUD &= ~((mask << 8) & (LPUART_BAUD_LBKDIE_MASK | LPUART_BAUD_RXEDGIE_MASK));
689#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
690 base->FIFO = (base->FIFO & ~(LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK)) &
691 ~((mask << 8) & (LPUART_FIFO_TXOFE_MASK | LPUART_FIFO_RXUFE_MASK));
720 temp = (base->BAUD & (LPUART_BAUD_LBKDIE_MASK | LPUART_BAUD_RXEDGIE_MASK)) >> 8;
721#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
722 temp |= (base->FIFO & (LPUART_FIFO_TXOFE_MASK | LPUART_FIFO_RXUFE_MASK)) >> 8;
724 temp |= (base->CTRL & 0xFF0C000);
750#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
751 temp |= (base->FIFO &
752 (LPUART_FIFO_TXEMPT_MASK | LPUART_FIFO_RXEMPT_MASK | LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK)) >>
781#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
782 temp = (uint32_t)base->FIFO;
783 temp &= (uint32_t)(~(LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK));
784 temp |= (mask << 16) & (LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK);
787 temp = (uint32_t)base->STAT;
788#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT
789 temp &= (uint32_t)(~(LPUART_STAT_LBKDIF_MASK));
790 temp |= mask & LPUART_STAT_LBKDIF_MASK;
792 temp &= (uint32_t)(~(LPUART_STAT_RXEDGIF_MASK | LPUART_STAT_IDLE_MASK | LPUART_STAT_OR_MASK | LPUART_STAT_NF_MASK |
793 LPUART_STAT_FE_MASK | LPUART_STAT_PF_MASK));
794 temp |= mask & (LPUART_STAT_RXEDGIF_MASK | LPUART_STAT_IDLE_MASK | LPUART_STAT_OR_MASK | LPUART_STAT_NF_MASK |
795 LPUART_STAT_FE_MASK | LPUART_STAT_PF_MASK);
796#if defined(FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING) && FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING
797 temp &= (uint32_t)(~(LPUART_STAT_MA2F_MASK | LPUART_STAT_MA1F_MASK));
798 temp |= mask & (LPUART_STAT_MA2F_MASK | LPUART_STAT_MA1F_MASK);
840 while (!(base->STAT & LPUART_STAT_TDRE_MASK))
843 base->DATA = *(data++);
867#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
868 uint32_t ctrl = base->CTRL;
869 bool isSevenDataBits =
870 ((ctrl & LPUART_CTRL_M7_MASK) || ((!(ctrl & LPUART_CTRL_M_MASK)) && (ctrl & LPUART_CTRL_PE_MASK)));
875#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
876 while (0 == ((base->WATER & LPUART_WATER_RXCOUNT_MASK) >> LPUART_WATER_RXCOUNT_SHIFT))
878 while (!(base->STAT & LPUART_STAT_RDRF_MASK))
907#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
910 *(data++) = (base->DATA & 0x7F);
914 *(data++) = base->DATA;
917 *(data++) = base->DATA;
950#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
951 uint32_t ctrl = base->CTRL;
952 bool isSevenDataBits =
953 ((ctrl & LPUART_CTRL_M7_MASK) || ((!(ctrl & LPUART_CTRL_M_MASK)) && (ctrl & LPUART_CTRL_PE_MASK)));
967#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
981#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1008 uint8_t *ringBuffer,
1009 size_t ringBufferSize)
1172 size_t *receivedBytes)
1182 size_t bytesToCopy = 0U;
1184 size_t bytesToReceive;
1186 size_t bytesCurrentReceived;
1205 bytesCurrentReceived = 0;
1218 bytesToCopy = MIN(bytesToReceive, bytesToCopy);
1220 bytesToReceive -= bytesToCopy;
1223 for (i = 0U; i < bytesToCopy; i++)
1243 handle->
rxData = xfer->
data + bytesCurrentReceived;
1252 if (0 == bytesToReceive)
1263 handle->
rxData = xfer->
data + bytesCurrentReceived;
1276 *receivedBytes = bytesCurrentReceived;
1356 if (LPUART_STAT_RXINV_MASK & status)
1358 base->STAT &= ~LPUART_STAT_RXINV_MASK;
1370 base->STAT = ((base->STAT & 0x3FE00000U) | LPUART_STAT_OR_MASK);
1382#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
1383 count = ((uint8_t)((base->WATER & LPUART_WATER_RXCOUNT_MASK) >> LPUART_WATER_RXCOUNT_SHIFT));
1391 handle->
rxData += tempCount;
1409 base->STAT |= LPUART_STAT_IDLE_MASK;
1426#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
1427 count = ((uint8_t)((base->WATER & LPUART_WATER_RXCOUNT_MASK) >> LPUART_WATER_RXCOUNT_SHIFT));
1435#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
1443 handle->
rxData += tempCount;
1488#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT
1526#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
1527 count = FSL_FEATURE_LPUART_FIFO_SIZEn(base) -
1528 ((base->WATER & LPUART_WATER_TXCOUNT_MASK) >> LPUART_WATER_TXCOUNT_SHIFT);
1535#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
1543 handle->
txData += tempCount;
1553 base->CTRL = (base->CTRL & ~LPUART_CTRL_TIE_MASK);
1577#if defined(FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1) && FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1
1578#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1583 if ((LPUART_STAT_OR_MASK & LPUART0->STAT) ||
1584 ((LPUART_STAT_RDRF_MASK & LPUART0->STAT) && (LPUART_CTRL_RIE_MASK & LPUART0->CTRL)))
1591 if ((LPUART_STAT_OR_MASK & LPUART1->STAT) ||
1592 ((LPUART_STAT_RDRF_MASK & LPUART1->STAT) && (LPUART_CTRL_RIE_MASK & LPUART1->CTRL)))
1599#if defined __CORTEX_M && (__CORTEX_M == 4U)
1607 if ((LPUART_STAT_OR_MASK & LPUART0->STAT) ||
1608 ((LPUART0->STAT & LPUART_STAT_TDRE_MASK) && (LPUART0->CTRL & LPUART_CTRL_TIE_MASK)))
1615 if ((LPUART_STAT_OR_MASK & LPUART1->STAT) ||
1616 ((LPUART1->STAT & LPUART_STAT_TDRE_MASK) && (LPUART1->CTRL & LPUART_CTRL_TIE_MASK)))
1623#if defined __CORTEX_M && (__CORTEX_M == 4U)
1632 if ((LPUART_STAT_OR_MASK & LPUART0->STAT) ||
1633 ((LPUART_STAT_RDRF_MASK & LPUART0->STAT) && (LPUART_CTRL_RIE_MASK & LPUART0->CTRL)) ||
1634 ((LPUART0->STAT & LPUART_STAT_TDRE_MASK) && (LPUART0->CTRL & LPUART_CTRL_TIE_MASK)))
1641 if ((LPUART_STAT_OR_MASK & LPUART1->STAT) ||
1642 ((LPUART_STAT_RDRF_MASK & LPUART1->STAT) && (LPUART_CTRL_RIE_MASK & LPUART1->CTRL)) ||
1643 ((LPUART1->STAT & LPUART_STAT_TDRE_MASK) && (LPUART1->CTRL & LPUART_CTRL_TIE_MASK)))
1650#if defined __CORTEX_M && (__CORTEX_M == 4U)
1658#if !(defined(FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1) && FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1)
1659#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1665#if defined __CORTEX_M && (__CORTEX_M == 4U)
1674#if defined __CORTEX_M && (__CORTEX_M == 4U)
1684#if defined __CORTEX_M && (__CORTEX_M == 4U)
1693#if !(defined(FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1) && FSL_FEATURE_LPUART_HAS_SHARED_IRQ0_IRQ1)
1694#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1700#if defined __CORTEX_M && (__CORTEX_M == 4U)
1709#if defined __CORTEX_M && (__CORTEX_M == 4U)
1719#if defined __CORTEX_M && (__CORTEX_M == 4U)
1728#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1734#if defined __CORTEX_M && (__CORTEX_M == 4U)
1743#if defined __CORTEX_M && (__CORTEX_M == 4U)
1753#if defined __CORTEX_M && (__CORTEX_M == 4U)
1761#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1767#if defined __CORTEX_M && (__CORTEX_M == 4U)
1776#if defined __CORTEX_M && (__CORTEX_M == 4U)
1786#if defined __CORTEX_M && (__CORTEX_M == 4U)
1794#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1800#if defined __CORTEX_M && (__CORTEX_M == 4U)
1809#if defined __CORTEX_M && (__CORTEX_M == 4U)
1819#if defined __CORTEX_M && (__CORTEX_M == 4U)
1827#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1833#if defined __CORTEX_M && (__CORTEX_M == 4U)
1842#if defined __CORTEX_M && (__CORTEX_M == 4U)
1852#if defined __CORTEX_M && (__CORTEX_M == 4U)
1860#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1866#if defined __CORTEX_M && (__CORTEX_M == 4U)
1875#if defined __CORTEX_M && (__CORTEX_M == 4U)
1885#if defined __CORTEX_M && (__CORTEX_M == 4U)
1893#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1899#if defined __CORTEX_M && (__CORTEX_M == 4U)
1908#if defined __CORTEX_M && (__CORTEX_M == 4U)
1918#if defined __CORTEX_M && (__CORTEX_M == 4U)
1926#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ
1932#if defined __CORTEX_M && (__CORTEX_M == 4U)
1941#if defined __CORTEX_M && (__CORTEX_M == 4U)
1951#if defined __CORTEX_M && (__CORTEX_M == 4U)
1958#if defined(CM4_0__LPUART)
1964#if defined __CORTEX_M && (__CORTEX_M == 4U)
1970#if defined(CM4_1__LPUART)
1976#if defined __CORTEX_M && (__CORTEX_M == 4U)
1982#if defined(CM4__LPUART)
1988#if defined __CORTEX_M && (__CORTEX_M == 4U)
1994#if defined(DMA__LPUART0)
2000#if defined __CORTEX_M && (__CORTEX_M == 4U)
2006#if defined(DMA__LPUART1)
2012#if defined __CORTEX_M && (__CORTEX_M == 4U)
2018#if defined(DMA__LPUART2)
2024#if defined __CORTEX_M && (__CORTEX_M == 4U)
2030#if defined(DMA__LPUART3)
2036#if defined __CORTEX_M && (__CORTEX_M == 4U)
2042#if defined(DMA__LPUART4)
2048#if defined __CORTEX_M && (__CORTEX_M == 4U)
2054#if defined(ADMA__LPUART0)
2060#if defined __CORTEX_M && (__CORTEX_M == 4U)
2066#if defined(ADMA__LPUART1)
2072#if defined __CORTEX_M && (__CORTEX_M == 4U)
2078#if defined(ADMA__LPUART2)
2084#if defined __CORTEX_M && (__CORTEX_M == 4U)
2090#if defined(ADMA__LPUART3)
2096#if defined __CORTEX_M && (__CORTEX_M == 4U)
static BenchController instance
static constexpr persistent_config_s * config
void LPUART8_TX_DriverIRQHandler(void)
void LPUART3_DriverIRQHandler(void)
void LPUART7_RX_DriverIRQHandler(void)
void LPUART_WriteNonBlocking(LPUART_Type *base, const uint8_t *data, size_t length)
Write to TX register using non-blocking method.
void(* lpuart_isr_t)(LPUART_Type *base, lpuart_handle_t *handle)
void LPUART0_LPUART1_TX_DriverIRQHandler(void)
void LPUART4_DriverIRQHandler(void)
void LPUART0_TX_DriverIRQHandler(void)
static lpuart_handle_t * s_lpuartHandle[ARRAY_SIZE(s_lpuartBases)]
void M4_LPUART_DriverIRQHandler(void)
void DMA_UART4_INT_DriverIRQHandler(void)
void M4_0_LPUART_DriverIRQHandler(void)
void LPUART3_RX_DriverIRQHandler(void)
void LPUART6_DriverIRQHandler(void)
void ADMA_UART2_INT_DriverIRQHandler(void)
void ADMA_UART0_INT_DriverIRQHandler(void)
void M4_1_LPUART_DriverIRQHandler(void)
void LPUART2_RX_DriverIRQHandler(void)
void LPUART2_TX_DriverIRQHandler(void)
static LPUART_Type *const s_lpuartBases[]
void LPUART7_DriverIRQHandler(void)
void LPUART0_RX_DriverIRQHandler(void)
void LPUART4_RX_DriverIRQHandler(void)
void ADMA_UART3_INT_DriverIRQHandler(void)
void LPUART1_RX_DriverIRQHandler(void)
static const clock_ip_name_t s_lpuartClock[]
void LPUART5_TX_DriverIRQHandler(void)
static const IRQn_Type s_lpuartTxIRQ[]
void LPUART0_DriverIRQHandler(void)
void LPUART8_DriverIRQHandler(void)
void LPUART0_LPUART1_DriverIRQHandler(void)
static bool LPUART_TransferIsRxRingBufferFull(LPUART_Type *base, lpuart_handle_t *handle)
Check whether the RX ring buffer is full.
void LPUART8_RX_DriverIRQHandler(void)
void LPUART6_RX_DriverIRQHandler(void)
void DMA_UART2_INT_DriverIRQHandler(void)
void ADMA_UART1_INT_DriverIRQHandler(void)
void LPUART1_DriverIRQHandler(void)
static lpuart_isr_t s_lpuartIsr
static const clock_ip_name_t s_lpuartPeriphClocks[]
void DMA_UART3_INT_DriverIRQHandler(void)
void LPUART0_LPUART1_RX_DriverIRQHandler(void)
void LPUART3_TX_DriverIRQHandler(void)
void LPUART5_RX_DriverIRQHandler(void)
void LPUART1_TX_DriverIRQHandler(void)
static const IRQn_Type s_lpuartIRQ[]
void DMA_UART1_INT_DriverIRQHandler(void)
void DMA_UART0_INT_DriverIRQHandler(void)
void LPUART7_TX_DriverIRQHandler(void)
void LPUART5_DriverIRQHandler(void)
void LPUART2_DriverIRQHandler(void)
static const IRQn_Type s_lpuartRxIRQ[]
void LPUART6_TX_DriverIRQHandler(void)
static void LPUART_ReadNonBlocking(LPUART_Type *base, uint8_t *data, size_t length)
Read RX register using non-blocking method.
void LPUART4_TX_DriverIRQHandler(void)
enum _clock_ip_name clock_ip_name_t
Peripheral clock name difinition used for clock gate, clock source and clock divider setting....
static void CLOCK_DisableClock(clock_ip_name_t name)
Disable the clock for specific IP.
static void CLOCK_EnableClock(clock_ip_name_t name)
Enable the clock for specific IP.
int32_t status_t
Type used for all status and error return values.
@ kStatus_NoTransferInProgress
void LPUART_TransferCreateHandle(LPUART_Type *base, lpuart_handle_t *handle, lpuart_transfer_callback_t callback, void *userData)
Initializes the LPUART handle.
uint32_t LPUART_GetEnabledInterrupts(LPUART_Type *base)
Gets enabled LPUART interrupts.
volatile uint16_t rxRingBufferHead
void LPUART_TransferHandleErrorIRQ(LPUART_Type *base, lpuart_handle_t *handle)
LPUART Error IRQ handle function.
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.
void LPUART_TransferAbortReceive(LPUART_Type *base, lpuart_handle_t *handle)
Aborts the interrupt-driven data receiving.
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.
static void LPUART_SoftwareReset(LPUART_Type *base)
Resets the LPUART using software.
void LPUART_TransferAbortSend(LPUART_Type *base, lpuart_handle_t *handle)
Aborts the interrupt-driven data transmit.
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.
void LPUART_GetDefaultConfig(lpuart_config_t *config)
Gets the default configuration structure.
volatile size_t txDataSize
uint32_t LPUART_GetInstance(LPUART_Type *base)
Get the LPUART instance from peripheral base address.
lpuart_transfer_callback_t callback
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
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.
status_t LPUART_ReadBlocking(LPUART_Type *base, uint8_t *data, size_t length)
Reads the receiver data register using a blocking method.
status_t LPUART_SetBaudRate(LPUART_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz)
Sets the LPUART instance baudrate.
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_TransmissionCompleteInterruptEnable
@ kLPUART_TxDataRegEmptyInterruptEnable
@ kLPUART_RxDataRegFullInterruptEnable
@ kLPUART_RxOverrunInterruptEnable
@ kLPUART_IdleLineInterruptEnable
@ kLPUART_ParityErrorFlag
@ kLPUART_RxDataRegFullFlag
@ kLPUART_TxDataRegEmptyFlag
@ kLPUART_FramingErrorFlag
@ kLPUART_IdleTypeStartBit
@ kStatus_LPUART_FlagCannotClearManually
@ kStatus_LPUART_FramingError
@ kStatus_LPUART_IdleLineDetected
@ kStatus_LPUART_RxRingBufferOverrun
@ kStatus_LPUART_NoiseError
@ kStatus_LPUART_BaudrateNotSupport
@ kStatus_LPUART_ParityError
@ kStatus_LPUART_RxHardwareOverrun
@ kLPUART_CtsSampleAtStart
LPUART configuration structure.
LPUART transfer structure.