pw_stream_uart_mcuxpresso#
pw_stream_uart_mcuxpresso
implements the pw_stream
interface for reading
and writing to a UART using the NXP MCUXpresso SDK. UartStreamMcuxpresso
version uses the CPU to read and write to the UART, while UartDmaStreamMcuxpresso
uses DMA transfers to read and write to the UART minimizing the CPU utilization.
Note
This module will likely be superseded by a future pw_uart
interface.
Setup#
This module requires a little setup:
Use
pw_build_mcuxpresso
to create apw_source_set
for an MCUXpresso SDK.Include the debug console component in this SDK definition.
Specify the
pw_third_party_mcuxpresso_SDK
GN global variable to specify the name of this source set.Use a target that calls
pw_sys_io_mcuxpresso_Init
inpw_boot_PreMainInit
or similar.
The name of the SDK source set must be set in the “pw_third_party_mcuxpresso_SDK” GN arg
Usage#
UartStreamMcuxpresso
example:
constexpr uint32_t kFlexcomm = 0;
constexpr uint32_t kBaudRate = 115200;
std::array<std::byte, 20> kBuffer = {};
auto stream = UartStreamMcuxpresso{USART0,
kBaudRate,
kUSART_ParityDisabled,
kUSART_OneStopBit,
kBuffer};
PW_TRY(stream.Init(CLOCK_GetFlexcommClkFreq(kFlexcomm)));
std::array<std::byte, 10> to_write = {};
PW_TRY(stream.Write(to_write));
UartDmaStreamMcuxpresso
example:
constexpr uint32_t kFlexcomm = 0;
const auto kUartBase = USART0;
constexpr uint32_t kBaudRate = 115200;
std::array<std::byte, 65536> ring_buffer = {};
constexpr uint32_t kUartRxDmaCh = 0;
constexpr uint32_t kUartTxDmaCh = 1;
const UartDmaStreamMcuxpresso::Config kConfig = {
.usart_base = kUartBase,
.baud_rate = kBaudRate,
.parity = kUSART_ParityDisabled,
.stop_bits = kUSART_OneStopBit,
.dma_base = DMA0,
.rx_dma_ch = kUartRxDmaCh,
.tx_dma_ch = kUartTxDmaCh,
.rx_input_mux_dmac_ch_request_en = kINPUTMUX_Flexcomm0RxToDmac0Ch0RequestEna,
.tx_input_mux_dmac_ch_request_en = kINPUTMUX_Flexcomm0TxToDmac0Ch1RequestEna,
.buffer = ByteSpan(ring_buffer)};
auto stream = UartDmaStreamMcuxpresso{kConfig};
PW_TRY(stream.Init(CLOCK_GetFlexcommClkFreq(kFlexcomm)));