123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815 |
- /*
- * The Clear BSD License
- * Copyright 2017 NXP
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted (subject to the limitations in the disclaimer below) provided
- * that the following conditions are met:
- *
- * o Redistributions of source code must retain the above copyright notice, this list
- * of conditions and the following disclaimer.
- *
- * o Redistributions in binary form must reproduce the above copyright notice, this
- * list of conditions and the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- #include "fsl_io.h"
- #include "fsl_debug_console_conf.h"
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- /* check avaliable device */
- #if (defined(FSL_FEATURE_SOC_UART_COUNT) && (FSL_FEATURE_SOC_UART_COUNT != 0))
- #define DEBUG_CONSOLE_IO_UART
- #endif
- #if (defined(FSL_FEATURE_SOC_IUART_COUNT) && (FSL_FEATURE_SOC_IUART_COUNT != 0))
- #define DEBUG_CONSOLE_IO_IUART
- #endif
- #if (defined(FSL_FEATURE_SOC_LPUART_COUNT) && (FSL_FEATURE_SOC_LPUART_COUNT != 0))
- #define DEBUG_CONSOLE_IO_LPUART
- #endif
- #if (defined(FSL_FEATURE_SOC_LPSCI_COUNT) && (FSL_FEATURE_SOC_LPSCI_COUNT != 0))
- #define DEBUG_CONSOLE_IO_LPSCI
- #endif
- #if ((defined(FSL_FEATURE_SOC_USB_COUNT) && (FSL_FEATURE_SOC_USB_COUNT != 0)) && \
- (defined(BOARD_USE_VIRTUALCOM) && (BOARD_USE_VIRTUALCOM != 0)))
- #define DEBUG_CONSOLE_IO_USBCDC
- #endif
- #if (defined(FSL_FEATURE_SOC_FLEXCOMM_COUNT) && (FSL_FEATURE_SOC_FLEXCOMM_COUNT != 0))
- #define DEBUG_CONSOLE_IO_FLEXCOMM
- #endif
- #if (defined(FSL_FEATURE_SOC_VFIFO_COUNT) && (FSL_FEATURE_SOC_VFIFO_COUNT != 0))
- #define DEBUG_CONSOLE_IO_VUSART
- #endif
- /* If none of above io is supported, enable the swo for debug console, or swo can be enabled by define
- * DEBUG_CONSOLE_IO_SWO directly */
- #if (!defined(DEBUG_CONSOLE_IO_SWO) && !defined(DEBUG_CONSOLE_IO_UART) && !defined(DEBUG_CONSOLE_IO_IUART) && \
- !defined(DEBUG_CONSOLE_IO_LPUART) && \
- !defined(DEBUG_CONSOLE_IO_LPSCI) && !defined(DEBUG_CONSOLE_IO_USBCDC) && \
- !defined(DEBUG_CONSOLE_IO_FLEXCOMM) && \
- !defined(DEBUG_CONSOLE_IO_VUSART))
- #define DEBUG_CONSOLE_IO_SWO
- #endif
- /* configuration for debug console device */
- /* If new device is required as the low level device for debug console,
- * Add the #elif branch and add the preprocessor macro to judge whether
- * this kind of device exist in this SOC. */
- #if (defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART)
- #include "fsl_uart.h"
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- static uart_handle_t s_ioUartHandler;
- #endif /* DEBUG_CONSOLE_TRANSFER_NON_BLOCKING */
- #endif /* defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART */
- #if defined DEBUG_CONSOLE_IO_LPUART
- #include "fsl_lpuart.h"
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- static lpuart_handle_t s_ioLpuartHandler;
- #endif /* DEBUG_CONSOLE_TRANSFER_NON_BLOCKING */
- #endif /* DEBUG_CONSOLE_IO_LPUART */
- #if defined DEBUG_CONSOLE_IO_LPSCI
- #include "fsl_lpsci.h"
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- static lpsci_handle_t s_ioLpsciHandler;
- #endif /* DEBUG_CONSOLE_TRANSFER_NON_BLOCKING */
- #endif /* DEBUG_CONSOLE_IO_LPSCI */
- #if defined DEBUG_CONSOLE_IO_USBCDC
- #include "usb_device_config.h"
- #include "usb.h"
- #include "usb_device_cdc_acm.h"
- #include "usb_device_ch9.h"
- #include "virtual_com.h"
- #endif /* DEBUG_CONSOLE_IO_USBCDC */
- #if (defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART)
- #include "fsl_usart.h"
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- static usart_handle_t s_ioUsartHandler;
- #endif /* DEBUG_CONSOLE_TRANSFER_NON_BLOCKING */
- #endif /* defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART */
- #if defined DEBUG_CONSOLE_IO_SWO
- #include "fsl_swo.h"
- #endif
- /*******************************************************************************
- * Variables
- ******************************************************************************/
- /*! @brief Debug console IO state information. */
- static io_state_t s_debugConsoleIO = {
- .ioBase = NULL,
- .ioType = DEBUG_CONSOLE_DEVICE_TYPE_NONE,
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- .callBack = NULL,
- #endif /* DEBUG_CONSOLE_TRANSFER_NON_BLOCKING */
- };
- /*******************************************************************************
- * Code
- ******************************************************************************/
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- #if (defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART)
- static void UART_Callback(UART_Type *base, uart_handle_t *handle, status_t status, void *userData)
- {
- bool tx = false, rx = false;
- size_t size = 0U;
- if (status == kStatus_UART_RxIdle)
- {
- rx = true;
- size = handle->txDataSizeAll;
- }
- if (status == kStatus_UART_TxIdle)
- {
- tx = true;
- size = handle->txDataSizeAll;
- }
- /* inform the buffer layer that transfer is complete */
- if (s_debugConsoleIO.callBack != NULL)
- {
- /* call buffer callback function */
- s_debugConsoleIO.callBack(&size, rx, tx);
- }
- }
- #endif /* defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART */
- #if defined DEBUG_CONSOLE_IO_LPSCI
- static void LPSCI_Callback(UART0_Type *base, lpsci_handle_t *handle, status_t status, void *userData)
- {
- bool tx = false, rx = false;
- size_t size = 0U;
- if (status == kStatus_LPSCI_RxIdle)
- {
- rx = true;
- size = handle->txDataSizeAll;
- }
- if (status == kStatus_LPSCI_TxIdle)
- {
- tx = true;
- size = handle->txDataSizeAll;
- }
- /* inform the buffer layer that transfer is complete */
- if (s_debugConsoleIO.callBack != NULL)
- {
- /* call buffer callback function */
- s_debugConsoleIO.callBack(&size, rx, tx);
- }
- }
- #endif /* DEBUG_CONSOLE_IO_LPSCI */
- #if defined DEBUG_CONSOLE_IO_LPUART
- static void LPUART_Callback(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData)
- {
- bool tx = false, rx = false;
- size_t size = 0U;
- if (status == kStatus_LPUART_RxIdle)
- {
- rx = true;
- size = handle->txDataSizeAll;
- }
- if (status == kStatus_LPUART_TxIdle)
- {
- tx = true;
- size = handle->txDataSizeAll;
- }
- /* inform the buffer layer that transfer is complete */
- if (s_debugConsoleIO.callBack != NULL)
- {
- /* call buffer callback function */
- s_debugConsoleIO.callBack(&size, rx, tx);
- }
- }
- #endif /* DEBUG_CONSOLE_IO_LPUART */
- #if (defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART)
- static void USART_Callback(USART_Type *base, usart_handle_t *handle, status_t status, void *userData)
- {
- bool tx = false, rx = false;
- size_t size = 0U;
- if (status == kStatus_USART_RxIdle)
- {
- rx = true;
- size = handle->txDataSizeAll;
- }
- if (status == kStatus_USART_TxIdle)
- {
- tx = true;
- size = handle->txDataSizeAll;
- }
- /* inform the buffer layer that transfer is complete */
- if (s_debugConsoleIO.callBack != NULL)
- {
- /* call buffer callback function */
- s_debugConsoleIO.callBack(&size, rx, tx);
- }
- }
- #endif /* defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART */
- #endif /* DEBUG_CONSOLE_TRANSFER_NON_BLOCKING */
- void IO_Init(io_state_t *io, uint32_t baudRate, uint32_t clkSrcFreq, uint8_t *ringBuffer)
- {
- assert(NULL != io);
- /* record device type/base */
- s_debugConsoleIO.ioType = io->ioType;
- s_debugConsoleIO.ioBase = (void *)(io->ioBase);
- switch (s_debugConsoleIO.ioType)
- {
- #if (defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART)
- case DEBUG_CONSOLE_DEVICE_TYPE_UART:
- case DEBUG_CONSOLE_DEVICE_TYPE_IUART:
- {
- uart_config_t uart_config;
- UART_GetDefaultConfig(&uart_config);
- uart_config.baudRate_Bps = baudRate;
- /* Enable clock and initial UART module follow user configure structure. */
- UART_Init((UART_Type *)s_debugConsoleIO.ioBase, &uart_config, clkSrcFreq);
- UART_EnableTx(s_debugConsoleIO.ioBase, true);
- UART_EnableRx(s_debugConsoleIO.ioBase, true);
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- s_debugConsoleIO.callBack = io->callBack;
- /* create handler for interrupt transfer */
- UART_TransferCreateHandle(s_debugConsoleIO.ioBase, &s_ioUartHandler, UART_Callback, NULL);
- /* start ring buffer */
- UART_TransferStartRingBuffer(s_debugConsoleIO.ioBase, &s_ioUartHandler, ringBuffer,
- DEBUG_CONSOLE_RECEIVE_BUFFER_LEN);
- #endif
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPUART
- case DEBUG_CONSOLE_DEVICE_TYPE_LPUART:
- {
- lpuart_config_t lpuart_config;
- LPUART_GetDefaultConfig(&lpuart_config);
- lpuart_config.baudRate_Bps = baudRate;
- /* Enable clock and initial UART module follow user configure structure. */
- LPUART_Init((LPUART_Type *)s_debugConsoleIO.ioBase, &lpuart_config, clkSrcFreq);
- LPUART_EnableTx(s_debugConsoleIO.ioBase, true);
- LPUART_EnableRx(s_debugConsoleIO.ioBase, true);
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- s_debugConsoleIO.callBack = io->callBack;
- /* create handler for interrupt transfer */
- LPUART_TransferCreateHandle(s_debugConsoleIO.ioBase, &s_ioLpuartHandler, LPUART_Callback, NULL);
- /* start ring buffer */
- LPUART_TransferStartRingBuffer(s_debugConsoleIO.ioBase, &s_ioLpuartHandler, ringBuffer,
- DEBUG_CONSOLE_RECEIVE_BUFFER_LEN);
- #endif
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPSCI
- case DEBUG_CONSOLE_DEVICE_TYPE_LPSCI:
- {
- lpsci_config_t lpsci_config;
- LPSCI_GetDefaultConfig(&lpsci_config);
- lpsci_config.baudRate_Bps = baudRate;
- /* Enable clock and initial UART module follow user configure structure. */
- LPSCI_Init((UART0_Type *)s_debugConsoleIO.ioBase, &lpsci_config, clkSrcFreq);
- LPSCI_EnableTx(s_debugConsoleIO.ioBase, true);
- LPSCI_EnableRx(s_debugConsoleIO.ioBase, true);
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- s_debugConsoleIO.callBack = io->callBack;
- /* create handler for interrupt transfer */
- LPSCI_TransferCreateHandle(s_debugConsoleIO.ioBase, &s_ioLpsciHandler, LPSCI_Callback, NULL);
- /* start ring buffer */
- LPSCI_TransferStartRingBuffer(s_debugConsoleIO.ioBase, &s_ioLpsciHandler, ringBuffer,
- DEBUG_CONSOLE_RECEIVE_BUFFER_LEN);
- #endif
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_USBCDC
- case DEBUG_CONSOLE_DEVICE_TYPE_USBCDC:
- {
- s_debugConsoleIO.ioBase = USB_VcomInit();
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_FLEXCOMM
- case DEBUG_CONSOLE_DEVICE_TYPE_FLEXCOMM:
- {
- usart_config_t usart_config;
- USART_GetDefaultConfig(&usart_config);
- usart_config.baudRate_Bps = baudRate;
- /* Enable clock and initial UART module follow user configure structure. */
- USART_Init((USART_Type *)s_debugConsoleIO.ioBase, &usart_config, clkSrcFreq);
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- s_debugConsoleIO.callBack = io->callBack;
- /* create handler for interrupt transfer */
- USART_TransferCreateHandle(s_debugConsoleIO.ioBase, &s_ioUsartHandler, USART_Callback, NULL);
- /* start ring buffer */
- USART_TransferStartRingBuffer(s_debugConsoleIO.ioBase, &s_ioUsartHandler, ringBuffer,
- DEBUG_CONSOLE_RECEIVE_BUFFER_LEN);
- #endif
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_VUSART
- case DEBUG_CONSOLE_DEVICE_TYPE_VUSART:
- {
- usart_config_t usart_config;
- USART_GetDefaultConfig(&usart_config);
- usart_config.baudRate_Bps = baudRate;
- usart_config.enableRx = true;
- usart_config.enableTx = true;
- /* Enable rx fifo for user's continously input */
- usart_config.fifoConfig.enableRxFifo = true;
- usart_config.fifoConfig.rxFifoSize = 8;
- /* Enable clock and initial UART module follow user configure structure. */
- USART_Init((USART_Type *)s_debugConsoleIO.ioBase, &usart_config, clkSrcFreq);
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- s_debugConsoleIO.callBack = io->callBack;
- /* create handler for interrupt transfer */
- USART_TransferCreateHandle(s_debugConsoleIO.ioBase, &s_ioUsartHandler, USART_Callback, NULL);
- /* start ring buffer */
- USART_TransferStartRingBuffer(s_debugConsoleIO.ioBase, &s_ioUsartHandler, ringBuffer,
- DEBUG_CONSOLE_RECEIVE_BUFFER_LEN);
- #endif
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_SWO
- case DEBUG_CONSOLE_DEVICE_TYPE_SWO:
- SWO_Init((uint32_t)s_debugConsoleIO.ioBase, baudRate, clkSrcFreq);
- break;
- #endif
- default:
- break;
- }
- }
- status_t IO_Deinit(void)
- {
- if (s_debugConsoleIO.ioType == DEBUG_CONSOLE_DEVICE_TYPE_NONE)
- {
- return kStatus_Success;
- }
- switch (s_debugConsoleIO.ioType)
- {
- #if (defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART)
- case DEBUG_CONSOLE_DEVICE_TYPE_UART:
- case DEBUG_CONSOLE_DEVICE_TYPE_IUART:
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- /* stop ring buffer */
- UART_TransferStopRingBuffer(s_debugConsoleIO.ioBase, &s_ioUartHandler);
- #endif
- /* Disable UART module. */
- UART_Deinit((UART_Type *)s_debugConsoleIO.ioBase);
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPSCI
- case DEBUG_CONSOLE_DEVICE_TYPE_LPSCI:
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- /* stop ring buffer */
- LPSCI_TransferStopRingBuffer(s_debugConsoleIO.ioBase, &s_ioLpsciHandler);
- #endif
- /* Disable LPSCI module. */
- LPSCI_Deinit((UART0_Type *)s_debugConsoleIO.ioBase);
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPUART
- case DEBUG_CONSOLE_DEVICE_TYPE_LPUART:
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- /* stop ring buffer */
- LPUART_TransferStopRingBuffer(s_debugConsoleIO.ioBase, &s_ioLpuartHandler);
- #endif
- /* Disable LPUART module. */
- LPUART_Deinit((LPUART_Type *)s_debugConsoleIO.ioBase);
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_USBCDC
- case DEBUG_CONSOLE_DEVICE_TYPE_USBCDC:
- /* Disable USBCDC module. */
- USB_VcomDeinit(s_debugConsoleIO.ioBase);
- break;
- #endif
- #if (defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART)
- case DEBUG_CONSOLE_DEVICE_TYPE_FLEXCOMM:
- case DEBUG_CONSOLE_DEVICE_TYPE_VUSART:
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- /* stop ring buffer */
- USART_TransferStopRingBuffer(s_debugConsoleIO.ioBase, &s_ioUsartHandler);
- #endif
- /* deinit IO */
- USART_Deinit((USART_Type *)s_debugConsoleIO.ioBase);
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_SWO
- case DEBUG_CONSOLE_DEVICE_TYPE_SWO:
- SWO_Deinit((uint32_t)s_debugConsoleIO.ioBase);
- break;
- #endif
- default:
- s_debugConsoleIO.ioType = DEBUG_CONSOLE_DEVICE_TYPE_NONE;
- break;
- }
- s_debugConsoleIO.ioType = DEBUG_CONSOLE_DEVICE_TYPE_NONE;
- return kStatus_Success;
- }
- status_t IO_WaitIdle(void)
- {
- switch (s_debugConsoleIO.ioType)
- {
- #if (defined DEBUG_CONSOLE_IO_UART)
- case DEBUG_CONSOLE_DEVICE_TYPE_UART:
- /* wait transfer complete flag */
- while (!(UART_GetStatusFlags(s_debugConsoleIO.ioBase) & kUART_TransmissionCompleteFlag))
- {
- }
- break;
- #endif
- #if (defined DEBUG_CONSOLE_IO_IUART)
- case DEBUG_CONSOLE_DEVICE_TYPE_IUART:
- /* wait transfer complete flag */
- while (!(UART_GetStatusFlag(s_debugConsoleIO.ioBase, kUART_TxCompleteFlag)))
- {
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPSCI
- case DEBUG_CONSOLE_DEVICE_TYPE_LPSCI:
- /* wait transfer complete flag */
- while (!(LPSCI_GetStatusFlags(s_debugConsoleIO.ioBase) & kLPSCI_TransmissionCompleteFlag))
- {
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPUART
- case DEBUG_CONSOLE_DEVICE_TYPE_LPUART:
- /* wait transfer complete flag */
- while (!(LPUART_GetStatusFlags(s_debugConsoleIO.ioBase) & kLPUART_TransmissionCompleteFlag))
- {
- }
- break;
- #endif
- #if (defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART)
- case DEBUG_CONSOLE_DEVICE_TYPE_FLEXCOMM:
- case DEBUG_CONSOLE_DEVICE_TYPE_VUSART:
- /* wait transfer complete flag */
- while (!(USART_GetStatusFlags(s_debugConsoleIO.ioBase) & kUSART_TxFifoEmptyFlag))
- {
- }
- break;
- #endif
- default:
- break;
- }
- return kStatus_Success;
- }
- #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING
- status_t IO_Transfer(uint8_t *ch, size_t size, bool tx)
- {
- status_t status = kStatus_Fail;
- switch (s_debugConsoleIO.ioType)
- {
- #if (defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART)
- case DEBUG_CONSOLE_DEVICE_TYPE_UART:
- case DEBUG_CONSOLE_DEVICE_TYPE_IUART:
- {
- uart_transfer_t transfer = {0U};
- transfer.data = ch;
- transfer.dataSize = size;
- /* transfer data */
- if (tx)
- {
- status = UART_TransferSendNonBlocking(s_debugConsoleIO.ioBase, &s_ioUartHandler, &transfer);
- }
- else
- {
- status = UART_TransferReceiveNonBlocking(s_debugConsoleIO.ioBase, &s_ioUartHandler, &transfer, NULL);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPSCI
- case DEBUG_CONSOLE_DEVICE_TYPE_LPSCI:
- {
- lpsci_transfer_t transfer = {0U};
- transfer.data = ch;
- transfer.dataSize = size;
- /* transfer data */
- if (tx)
- {
- status = LPSCI_TransferSendNonBlocking(s_debugConsoleIO.ioBase, &s_ioLpsciHandler, &transfer);
- }
- else
- {
- status = LPSCI_TransferReceiveNonBlocking(s_debugConsoleIO.ioBase, &s_ioLpsciHandler, &transfer, NULL);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPUART
- case DEBUG_CONSOLE_DEVICE_TYPE_LPUART:
- {
- lpuart_transfer_t transfer = {0U};
- transfer.data = ch;
- transfer.dataSize = size;
- /* transfer data */
- if (tx)
- {
- status = LPUART_TransferSendNonBlocking(s_debugConsoleIO.ioBase, &s_ioLpuartHandler, &transfer);
- }
- else
- {
- status =
- LPUART_TransferReceiveNonBlocking(s_debugConsoleIO.ioBase, &s_ioLpuartHandler, &transfer, NULL);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_USBCDC
- case DEBUG_CONSOLE_DEVICE_TYPE_USBCDC:
- {
- if (tx)
- {
- USB_VcomWriteBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- else
- {
- USB_VcomReadBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- }
- break;
- #endif
- #if (defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART)
- case DEBUG_CONSOLE_DEVICE_TYPE_FLEXCOMM:
- case DEBUG_CONSOLE_DEVICE_TYPE_VUSART:
- {
- usart_transfer_t transfer = {0U};
- transfer.data = ch;
- transfer.dataSize = size;
- /* transfer data */
- if (tx)
- {
- status = USART_TransferSendNonBlocking(s_debugConsoleIO.ioBase, &s_ioUsartHandler, &transfer);
- }
- else
- {
- status = USART_TransferReceiveNonBlocking(s_debugConsoleIO.ioBase, &s_ioUsartHandler, &transfer, NULL);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_SWO
- case DEBUG_CONSOLE_DEVICE_TYPE_SWO:
- status = SWO_SendBlocking((uint32_t)s_debugConsoleIO.ioBase, ch, size);
- break;
- #endif
- default:
- break;
- }
- return status;
- }
- status_t IO_TryReceiveCharacter(uint8_t *ch)
- {
- status_t status = kStatus_Fail;
- uint32_t size = 1U;
- switch (s_debugConsoleIO.ioType)
- {
- #if (defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART)
- case DEBUG_CONSOLE_DEVICE_TYPE_UART:
- case DEBUG_CONSOLE_DEVICE_TYPE_IUART:
- {
- uart_transfer_t transfer = {0U};
- transfer.data = ch;
- transfer.dataSize = size;
- if (UART_TransferGetRxRingBufferLength(&s_ioUartHandler) >= size)
- {
- /* transfer data */
- status = UART_TransferReceiveNonBlocking(s_debugConsoleIO.ioBase, &s_ioUartHandler, &transfer, NULL);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPSCI
- case DEBUG_CONSOLE_DEVICE_TYPE_LPSCI:
- {
- lpsci_transfer_t transfer = {0U};
- transfer.data = ch;
- transfer.dataSize = size;
- if (LPSCI_TransferGetRxRingBufferLength(&s_ioLpsciHandler) >= size)
- {
- /* transfer data */
- status = LPSCI_TransferReceiveNonBlocking(s_debugConsoleIO.ioBase, &s_ioLpsciHandler, &transfer, NULL);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPUART
- case DEBUG_CONSOLE_DEVICE_TYPE_LPUART:
- {
- lpuart_transfer_t transfer = {0U};
- transfer.data = ch;
- transfer.dataSize = size;
- if (LPUART_TransferGetRxRingBufferLength(s_debugConsoleIO.ioBase, &s_ioLpuartHandler) >= size)
- {
- /* transfer data */
- status =
- LPUART_TransferReceiveNonBlocking(s_debugConsoleIO.ioBase, &s_ioLpuartHandler, &transfer, NULL);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_USBCDC
- case DEBUG_CONSOLE_DEVICE_TYPE_USBCDC:
- break;
- #endif
- #if (defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART)
- case DEBUG_CONSOLE_DEVICE_TYPE_FLEXCOMM:
- case DEBUG_CONSOLE_DEVICE_TYPE_VUSART:
- {
- usart_transfer_t transfer = {0U};
- transfer.data = ch;
- transfer.dataSize = size;
- if (USART_TransferGetRxRingBufferLength(&s_ioUsartHandler) >= size)
- {
- /* transfer data */
- status = USART_TransferReceiveNonBlocking(s_debugConsoleIO.ioBase, &s_ioUsartHandler, &transfer, NULL);
- }
- }
- break;
- #endif
- default:
- break;
- }
- return status;
- }
- #else
- status_t IO_Transfer(uint8_t *ch, size_t size, bool tx)
- {
- status_t status = kStatus_Success;
- switch (s_debugConsoleIO.ioType)
- {
- #if (defined DEBUG_CONSOLE_IO_UART) || (defined DEBUG_CONSOLE_IO_IUART)
- case DEBUG_CONSOLE_DEVICE_TYPE_UART:
- case DEBUG_CONSOLE_DEVICE_TYPE_IUART:
- {
- if (tx)
- {
- UART_WriteBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- else
- {
- status = UART_ReadBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPSCI
- case DEBUG_CONSOLE_DEVICE_TYPE_LPSCI:
- {
- if (tx)
- {
- LPSCI_WriteBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- else
- {
- status = LPSCI_ReadBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_LPUART
- case DEBUG_CONSOLE_DEVICE_TYPE_LPUART:
- {
- if (tx)
- {
- LPUART_WriteBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- else
- {
- status = LPUART_ReadBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_USBCDC
- case DEBUG_CONSOLE_DEVICE_TYPE_USBCDC:
- {
- if (tx)
- {
- USB_VcomWriteBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- else
- {
- status = USB_VcomReadBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- }
- break;
- #endif
- #if (defined DEBUG_CONSOLE_IO_FLEXCOMM) || (defined DEBUG_CONSOLE_IO_VUSART)
- case DEBUG_CONSOLE_DEVICE_TYPE_FLEXCOMM:
- case DEBUG_CONSOLE_DEVICE_TYPE_VUSART:
- {
- if (tx)
- {
- USART_WriteBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- else
- {
- status = USART_ReadBlocking(s_debugConsoleIO.ioBase, ch, size);
- }
- }
- break;
- #endif
- #if defined DEBUG_CONSOLE_IO_SWO
- case DEBUG_CONSOLE_DEVICE_TYPE_SWO:
- status = SWO_SendBlocking((uint32_t)s_debugConsoleIO.ioBase, ch, size);
- break;
- #endif
- default:
- status = kStatus_Fail;
- break;
- }
- return status;
- }
- #endif /* DEBUG_CONSOLE_TRANSFER_NON_BLOCKING */
|