X-Git-Url: https://git.sur5r.net/?p=freertos;a=blobdiff_plain;f=FreeRTOS%2FDemo%2FCORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso%2FNXP_Code%2Fcomponent%2Fuart%2Fuart.h;fp=FreeRTOS%2FDemo%2FCORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso%2FNXP_Code%2Fcomponent%2Fuart%2Fuart.h;h=6961883aae445a7c5a9f178b982efe9a02ae952b;hp=62dde338b3d36435e2b0e41cf74c2e9ae26ad909;hb=584c29e09cf7a95184b0e32718e8f711b781ffea;hpb=c5efd011e8c638d413ac395419119a451a0cb169 diff --git a/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/component/uart/uart.h b/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/component/uart/uart.h index 62dde338b..6961883aa 100644 --- a/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/component/uart/uart.h +++ b/FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/component/uart/uart.h @@ -9,67 +9,92 @@ #ifndef __HAL_UART_ADAPTER_H__ #define __HAL_UART_ADAPTER_H__ +#if defined(FSL_RTOS_FREE_RTOS) +#include "FreeRTOS.h" +#endif + +/*! + * @addtogroup UART_Adapter + * @{ + */ + /******************************************************************************* * Definitions ******************************************************************************/ +/*! @brief Enable or disable UART adapter non-blocking mode (1 - enable, 0 - disable) */ #ifdef DEBUG_CONSOLE_TRANSFER_NON_BLOCKING -#define UART_ADAPTER_NON_BLOCKING_MODE \ - (1U) /* Enable or disable Uart adapter non-blocking mode (1 - enable, 0 - disable) */ +#define UART_ADAPTER_NON_BLOCKING_MODE (1U) #else #ifndef SERIAL_MANAGER_NON_BLOCKING_MODE -#define UART_ADAPTER_NON_BLOCKING_MODE \ - (0U) /* Enable or disable Uart adapter non-blocking mode (1 - enable, 0 - disable) */ +#define UART_ADAPTER_NON_BLOCKING_MODE (0U) #else #define UART_ADAPTER_NON_BLOCKING_MODE SERIAL_MANAGER_NON_BLOCKING_MODE #endif #endif +#if defined(__GIC_PRIO_BITS) +#define HAL_UART_ISR_PRIORITY (25U) +#else +#if defined(configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY) +#define HAL_UART_ISR_PRIORITY (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY) +#else +/* The default value 3 is used to support different ARM Core, such as CM0P, CM4, CM7, and CM33, etc. + * The minimum number of priority bits implemented in the NVIC is 2 on these SOCs. The value of mininum + * priority is 3 (2^2 - 1). So, the default value is 3. + */ +#define HAL_UART_ISR_PRIORITY (3U) +#endif +#endif + +#ifndef HAL_UART_ADAPTER_LOWPOWER +#define HAL_UART_ADAPTER_LOWPOWER (0U) +#endif /* HAL_UART_ADAPTER_LOWPOWER */ + #if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) -#define HAL_UART_HANDLE_SIZE (90U) +#define HAL_UART_HANDLE_SIZE (90U + HAL_UART_ADAPTER_LOWPOWER * 16U) #else -#define HAL_UART_HANDLE_SIZE (4U) +#define HAL_UART_HANDLE_SIZE (4U + HAL_UART_ADAPTER_LOWPOWER * 16U) #endif -#define HAL_UART_TRANSFER_MODE \ - (0U) /*!< Whether enable transactional function of the uart. (0 - disable, 1 - enable) \ \ - */ +/*! @brief Whether enable transactional function of the UART. (0 - disable, 1 - enable) */ +#define HAL_UART_TRANSFER_MODE (0U) typedef void *hal_uart_handle_t; -/*! @brief uart status */ +/*! @brief UART status */ typedef enum _hal_uart_status { - kStatus_HAL_UartSuccess = kStatus_Success, /*!< Successfully */ - kStatus_HAL_UartTxBusy = MAKE_STATUS(kStatusGroup_HAL_UART, 1), /*!< TX busy */ - kStatus_HAL_UartRxBusy = MAKE_STATUS(kStatusGroup_HAL_UART, 2), /*!< RX busy */ - kStatus_HAL_UartTxIdle = MAKE_STATUS(kStatusGroup_HAL_UART, 3), /*!< HAL uart transmitter is idle. */ - kStatus_HAL_UartRxIdle = MAKE_STATUS(kStatusGroup_HAL_UART, 4), /*!< HAL uart receiver is idle */ + kStatus_HAL_UartSuccess = kStatus_Success, /*!< Successfully */ + kStatus_HAL_UartTxBusy = MAKE_STATUS(kStatusGroup_HAL_UART, 1), /*!< TX busy */ + kStatus_HAL_UartRxBusy = MAKE_STATUS(kStatusGroup_HAL_UART, 2), /*!< RX busy */ + kStatus_HAL_UartTxIdle = MAKE_STATUS(kStatusGroup_HAL_UART, 3), /*!< HAL UART transmitter is idle. */ + kStatus_HAL_UartRxIdle = MAKE_STATUS(kStatusGroup_HAL_UART, 4), /*!< HAL UART receiver is idle */ kStatus_HAL_UartBaudrateNotSupport = MAKE_STATUS(kStatusGroup_HAL_UART, 5), /*!< Baudrate is not support in current clock source */ kStatus_HAL_UartProtocolError = MAKE_STATUS( kStatusGroup_HAL_UART, 6), /*!< Error occurs for Noise, Framing, Parity, etc. - For transcational transfer, The up layer needs to abort the transfer and then starts again */ - kStatus_HAL_UartError = MAKE_STATUS(kStatusGroup_HAL_UART, 7), /*!< Error occurs on HAL uart */ + For transactional transfer, The up layer needs to abort the transfer and then starts again */ + kStatus_HAL_UartError = MAKE_STATUS(kStatusGroup_HAL_UART, 7), /*!< Error occurs on HAL UART */ } hal_uart_status_t; -/*! @brief uart parity mode. */ +/*! @brief UART parity mode. */ typedef enum _hal_uart_parity_mode { kHAL_UartParityDisabled = 0x0U, /*!< Parity disabled */ - kHAL_UartParityEven = 0x1U, /*!< Parity even enabled */ - kHAL_UartParityOdd = 0x2U, /*!< Parity odd enabled */ + kHAL_UartParityEven = 0x1U, /*!< Parity even enabled */ + kHAL_UartParityOdd = 0x2U, /*!< Parity odd enabled */ } hal_uart_parity_mode_t; -/*! @brief uart stop bit count. */ +/*! @brief UART stop bit count. */ typedef enum _hal_uart_stop_bit_count { kHAL_UartOneStopBit = 0U, /*!< One stop bit */ kHAL_UartTwoStopBit = 1U, /*!< Two stop bits */ } hal_uart_stop_bit_count_t; -/*! @brief uart configuration structure. */ +/*! @brief UART configuration structure. */ typedef struct _hal_uart_config { uint32_t srcClock_Hz; /*!< Source clock */ @@ -83,10 +108,10 @@ typedef struct _hal_uart_config Invalid instance value will cause initialization failure. */ } hal_uart_config_t; -/*! @brief uart transfer callback function. */ +/*! @brief UART transfer callback function. */ typedef void (*hal_uart_transfer_callback_t)(hal_uart_handle_t handle, hal_uart_status_t status, void *callbackParam); -/*! @brief uart transfer structure. */ +/*! @brief UART transfer structure. */ typedef struct _hal_uart_transfer { uint8_t *data; /*!< The buffer of data to be transfer.*/ @@ -107,44 +132,44 @@ extern "C" { */ /*! -* @brief Initializes a uart instance with the uart handle and the user configuration structure. -* -* This function configures the uart module with user-defined settings. The user can configure the configuration -* structure. The parameter handle is a pointer to point to a memory space of size #HAL_UART_HANDLE_SIZE allocated by the -* caller. -* Example below shows how to use this API to configure the uart. -* @code -* uint8_t g_UartHandleBuffer[HAL_UART_HANDLE_SIZE]; -* hal_uart_handle_t g_UartHandle = &g_UartHandleBuffer[0]; -* hal_uart_config_t config; -* config.srcClock_Hz = 48000000; -* config.baudRate_Bps = 115200U; -* config.parityMode = kHAL_UartParityDisabled; -* config.stopBitCount = kHAL_UartOneStopBit; -* config.enableRx = 1; -* config.enableTx = 1; -* config.instance = 0; -* HAL_UartInit(g_UartHandle, &config); -* @endcode -* -* @param handle Pointer to point to a memory space of size #HAL_UART_HANDLE_SIZE allocated by the caller. -* @param config Pointer to user-defined configuration structure. -* @retval kStatus_HAL_UartBaudrateNotSupport Baudrate is not support in current clock source. -* @retval kStatus_HAL_UartSuccess uart initialization succeed -*/ + * @brief Initializes a UART instance with the UART handle and the user configuration structure. + * + * This function configures the UART module with user-defined settings. The user can configure the configuration + * structure. The parameter handle is a pointer to point to a memory space of size #HAL_UART_HANDLE_SIZE allocated by + * the caller. Example below shows how to use this API to configure the UART. + * @code + * uint32_t g_UartHandleBuffer[((HAL_UART_HANDLE_SIZE + sizeof(uint32_t) - 1) / sizeof(uitn32_t))]; + * hal_uart_handle_t g_UartHandle = (hal_uart_handle_t)&g_UartHandleBuffer[0]; + * hal_uart_config_t config; + * config.srcClock_Hz = 48000000; + * config.baudRate_Bps = 115200U; + * config.parityMode = kHAL_UartParityDisabled; + * config.stopBitCount = kHAL_UartOneStopBit; + * config.enableRx = 1; + * config.enableTx = 1; + * config.instance = 0; + * HAL_UartInit(g_UartHandle, &config); + * @endcode + * + * @param handle Pointer to point to a memory space of size #HAL_UART_HANDLE_SIZE allocated by the caller. + * The handle should be 4 byte aligned, because unaligned access does not support on some devices. + * @param config Pointer to user-defined configuration structure. + * @retval kStatus_HAL_UartBaudrateNotSupport Baudrate is not support in current clock source. + * @retval kStatus_HAL_UartSuccess UART initialization succeed + */ hal_uart_status_t HAL_UartInit(hal_uart_handle_t handle, hal_uart_config_t *config); /*! - * @brief Deinitializes a uart instance. + * @brief Deinitializes a UART instance. * - * This function waits for TX complete, disables TX and RX, and disables the uart clock. + * This function waits for TX complete, disables TX and RX, and disables the UART clock. * - * @param handle uart handle pointer. - * @retval kStatus_HAL_UartSuccess uart de-initialization succeed + * @param handle UART handle pointer. + * @retval kStatus_HAL_UartSuccess UART de-initialization succeed */ hal_uart_status_t HAL_UartDeinit(hal_uart_handle_t handle); -/* @} */ +/*! @}*/ /*! * @name Blocking bus Operations @@ -161,7 +186,7 @@ hal_uart_status_t HAL_UartDeinit(hal_uart_handle_t handle); * cannot be used at the same time. * And, the function #HAL_UartTransferAbortReceive cannot be used to abort the transmission of this function. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param data Start address of the buffer to store the received data. * @param length Size of the buffer. * @retval kStatus_HAL_UartError An error occurred while receiving data. @@ -180,15 +205,16 @@ hal_uart_status_t HAL_UartReceiveBlocking(hal_uart_handle_t handle, uint8_t *dat * cannot be used at the same time. * And, the function #HAL_UartTransferAbortSend cannot be used to abort the transmission of this function. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param data Start address of the data to write. * @param length Size of the data to write. * @retval kStatus_HAL_UartSuccess Successfully sent all data. */ hal_uart_status_t HAL_UartSendBlocking(hal_uart_handle_t handle, const uint8_t *data, size_t length); -/* @} */ +/*! @}*/ +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) #if (defined(HAL_UART_TRANSFER_MODE) && (HAL_UART_TRANSFER_MODE > 0U)) /*! @@ -202,11 +228,11 @@ hal_uart_status_t HAL_UartSendBlocking(hal_uart_handle_t handle, const uint8_t * /*! * @brief Installs a callback and callback parameter. * - * This function is used to install the callback and callback parameter for uart module. - * When any status of the uart changed, the driver will notify the upper layer by the installed callback + * This function is used to install the callback and callback parameter for UART module. + * When any status of the UART changed, the driver will notify the upper layer by the installed callback * function. And the status is also passed as status parameter when the callback is called. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param callback The callback function. * @param callbackParam The parameter of the callback function. * @retval kStatus_HAL_UartSuccess Successfully install the callback. @@ -220,16 +246,16 @@ hal_uart_status_t HAL_UartTransferInstallCallback(hal_uart_handle_t handle, * * This function receives data using an interrupt method. This is a non-blocking function, which * returns directly without waiting for all data to be received. - * The receive request is saved by the uart driver. + * The receive request is saved by the UART driver. * When the new data arrives, the receive request is serviced first. - * When all data is received, the uart driver notifies the upper layer + * When all data is received, the UART driver notifies the upper layer * through a callback function and passes the status parameter @ref kStatus_UART_RxIdle. * * @note The function #HAL_UartReceiveBlocking and the function #HAL_UartTransferReceiveNonBlocking * cannot be used at the same time. * - * @param handle uart handle pointer. - * @param transfer uart transfer structure, see #hal_uart_transfer_t. + * @param handle UART handle pointer. + * @param transfer UART transfer structure, see #hal_uart_transfer_t. * @retval kStatus_HAL_UartSuccess Successfully queue the transfer into transmit queue. * @retval kStatus_HAL_UartRxBusy Previous receive request is not finished. * @retval kStatus_HAL_UartError An error occurred. @@ -241,14 +267,14 @@ hal_uart_status_t HAL_UartTransferReceiveNonBlocking(hal_uart_handle_t handle, h * * This function sends data using an interrupt method. This is a non-blocking function, which * returns directly without waiting for all data to be written to the TX register. When - * all data is written to the TX register in the ISR, the uart driver calls the callback + * all data is written to the TX register in the ISR, the UART driver calls the callback * function and passes the @ref kStatus_UART_TxIdle as status parameter. * * @note The function #HAL_UartSendBlocking and the function #HAL_UartTransferSendNonBlocking * cannot be used at the same time. * - * @param handle uart handle pointer. - * @param transfer uart transfer structure. See #hal_uart_transfer_t. + * @param handle UART handle pointer. + * @param transfer UART transfer structure. See #hal_uart_transfer_t. * @retval kStatus_HAL_UartSuccess Successfully start the data transmission. * @retval kStatus_HAL_UartTxBusy Previous transmission still not finished; data not all written to TX register yet. * @retval kStatus_HAL_UartError An error occurred. @@ -260,7 +286,7 @@ hal_uart_status_t HAL_UartTransferSendNonBlocking(hal_uart_handle_t handle, hal_ * * This function gets the number of bytes that have been received. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param count Receive bytes count. * @retval kStatus_HAL_UartError An error occurred. * @retval kStatus_Success Get successfully through the parameter \p count. @@ -268,12 +294,12 @@ hal_uart_status_t HAL_UartTransferSendNonBlocking(hal_uart_handle_t handle, hal_ hal_uart_status_t HAL_UartTransferGetReceiveCount(hal_uart_handle_t handle, uint32_t *count); /*! - * @brief Gets the number of bytes written to the uart TX register. + * @brief Gets the number of bytes written to the UART TX register. * - * This function gets the number of bytes written to the uart TX + * This function gets the number of bytes written to the UART TX * register by using the interrupt method. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param count Send bytes count. * @retval kStatus_HAL_UartError An error occurred. * @retval kStatus_Success Get successfully through the parameter \p count. @@ -289,7 +315,7 @@ hal_uart_status_t HAL_UartTransferGetSendCount(hal_uart_handle_t handle, uint32_ * @note The function #HAL_UartTransferAbortReceive cannot be used to abort the transmission of * the function #HAL_UartReceiveBlocking. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @retval kStatus_Success Get successfully abort the receiving. */ hal_uart_status_t HAL_UartTransferAbortReceive(hal_uart_handle_t handle); @@ -303,12 +329,12 @@ hal_uart_status_t HAL_UartTransferAbortReceive(hal_uart_handle_t handle); * @note The function #HAL_UartTransferAbortSend cannot be used to abort the transmission of * the function #HAL_UartSendBlocking. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @retval kStatus_Success Get successfully abort the sending. */ hal_uart_status_t HAL_UartTransferAbortSend(hal_uart_handle_t handle); -/* @} */ +/*! @}*/ #else @@ -323,11 +349,11 @@ hal_uart_status_t HAL_UartTransferAbortSend(hal_uart_handle_t handle); /*! * @brief Installs a callback and callback parameter. * - * This function is used to install the callback and callback parameter for uart module. + * This function is used to install the callback and callback parameter for UART module. * When non-blocking sending or receiving finished, the adapter will notify the upper layer by the installed callback * function. And the status is also passed as status parameter when the callback is called. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param callback The callback function. * @param callbackParam The parameter of the callback function. * @retval kStatus_HAL_UartSuccess Successfully install the callback. @@ -341,15 +367,15 @@ hal_uart_status_t HAL_UartInstallCallback(hal_uart_handle_t handle, * * This function receives data using an interrupt method. This is a non-blocking function, which * returns directly without waiting for all data to be received. - * The receive request is saved by the uart adapter. + * The receive request is saved by the UART adapter. * When the new data arrives, the receive request is serviced first. - * When all data is received, the uart adapter notifies the upper layer + * When all data is received, the UART adapter notifies the upper layer * through a callback function and passes the status parameter @ref kStatus_UART_RxIdle. * * @note The function #HAL_UartReceiveBlocking and the function #HAL_UartReceiveNonBlocking * cannot be used at the same time. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param data Start address of the data to write. * @param length Size of the data to write. * @retval kStatus_HAL_UartSuccess Successfully queue the transfer into transmit queue. @@ -363,45 +389,45 @@ hal_uart_status_t HAL_UartReceiveNonBlocking(hal_uart_handle_t handle, uint8_t * * * This function sends data using an interrupt method. This is a non-blocking function, which * returns directly without waiting for all data to be written to the TX register. When - * all data is written to the TX register in the ISR, the uart driver calls the callback + * all data is written to the TX register in the ISR, the UART driver calls the callback * function and passes the @ref kStatus_UART_TxIdle as status parameter. * * @note The function #HAL_UartSendBlocking and the function #HAL_UartSendNonBlocking * cannot be used at the same time. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param data Start address of the data to write. * @param length Size of the data to write. * @retval kStatus_HAL_UartSuccess Successfully start the data transmission. * @retval kStatus_HAL_UartTxBusy Previous transmission still not finished; data not all written to TX register yet. * @retval kStatus_HAL_UartError An error occurred. */ -hal_uart_status_t HAL_UartSendNonBlocking(hal_uart_handle_t handle, const uint8_t *data, size_t length); +hal_uart_status_t HAL_UartSendNonBlocking(hal_uart_handle_t handle, uint8_t *data, size_t length); /*! * @brief Gets the number of bytes that have been received. * * This function gets the number of bytes that have been received. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param count Receive bytes count. * @retval kStatus_HAL_UartError An error occurred. * @retval kStatus_Success Get successfully through the parameter \p count. */ -hal_uart_status_t HAL_UartGetReceiveCount(hal_uart_handle_t handle, uint32_t *count); +hal_uart_status_t HAL_UartGetReceiveCount(hal_uart_handle_t handle, uint32_t *reCount); /*! - * @brief Gets the number of bytes written to the uart TX register. + * @brief Gets the number of bytes written to the UART TX register. * - * This function gets the number of bytes written to the uart TX + * This function gets the number of bytes written to the UART TX * register by using the interrupt method. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @param count Send bytes count. * @retval kStatus_HAL_UartError An error occurred. * @retval kStatus_Success Get successfully through the parameter \p count. */ -hal_uart_status_t HAL_UartGetSendCount(hal_uart_handle_t handle, uint32_t *count); +hal_uart_status_t HAL_UartGetSendCount(hal_uart_handle_t handle, uint32_t *seCount); /*! * @brief Aborts the interrupt-driven data receiving. @@ -412,7 +438,7 @@ hal_uart_status_t HAL_UartGetSendCount(hal_uart_handle_t handle, uint32_t *count * @note The function #HAL_UartAbortReceive cannot be used to abort the transmission of * the function #HAL_UartReceiveBlocking. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @retval kStatus_Success Get successfully abort the receiving. */ hal_uart_status_t HAL_UartAbortReceive(hal_uart_handle_t handle); @@ -426,26 +452,51 @@ hal_uart_status_t HAL_UartAbortReceive(hal_uart_handle_t handle); * @note The function #HAL_UartAbortSend cannot be used to abort the transmission of * the function #HAL_UartSendBlocking. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. * @retval kStatus_Success Get successfully abort the sending. */ hal_uart_status_t HAL_UartAbortSend(hal_uart_handle_t handle); -/* @} */ +/*! @}*/ +#endif #endif /*! - * @brief uart IRQ handle function. + * @brief Prepares to enter low power consumption. * - * This function handles the uart transmit and receive IRQ request. + * This function is used to prepare to enter low power consumption. * - * @param handle uart handle pointer. + * @param handle UART handle pointer. + * @retval kStatus_HAL_UartSuccess Successful operation. + * @retval kStatus_HAL_UartError An error occurred. + */ +hal_uart_status_t HAL_UartEnterLowpower(hal_uart_handle_t handle); + +/*! + * @brief Restores from low power consumption. + * + * This function is used to restore from low power consumption. + * + * @param handle UART handle pointer. + * @retval kStatus_HAL_UartSuccess Successful operation. + * @retval kStatus_HAL_UartError An error occurred. + */ +hal_uart_status_t HAL_UartExitLowpower(hal_uart_handle_t handle); + +#if (defined(UART_ADAPTER_NON_BLOCKING_MODE) && (UART_ADAPTER_NON_BLOCKING_MODE > 0U)) +/*! + * @brief UART IRQ handle function. + * + * This function handles the UART transmit and receive IRQ request. + * + * @param handle UART handle pointer. */ void HAL_UartIsrFunction(hal_uart_handle_t handle); +#endif #if defined(__cplusplus) } #endif - +/*! @}*/ #endif /* __HAL_UART_ADAPTER_H__ */