1 /* 2 * Copyright 2022 NXP 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 #ifndef FSL_LP_FLEXCOMM_H_ 8 #define FSL_LP_FLEXCOMM_H_ 9 10 #include "fsl_common.h" 11 12 /*! 13 * @addtogroup lpflexcomm_driver 14 * @{ 15 */ 16 17 /*! @name Driver version */ 18 /*! @{ */ 19 /*! @brief FlexCOMM driver version. */ 20 #define FSL_LP_FLEXCOMM_DRIVER_VERSION (MAKE_VERSION(2, 2, 1)) 21 /*! @} */ 22 23 /*! @brief LP_FLEXCOMM peripheral modes. */ 24 typedef enum 25 { 26 LP_FLEXCOMM_PERIPH_NONE, /*!< No peripheral */ 27 LP_FLEXCOMM_PERIPH_LPUART, /*!< LPUART peripheral */ 28 LP_FLEXCOMM_PERIPH_LPSPI, /*!< LPSPI Peripheral */ 29 LP_FLEXCOMM_PERIPH_LPI2C, /*!< LPI2C Peripheral */ 30 LP_FLEXCOMM_PERIPH_LPI2CAndLPUART = 7, /*!< LPI2C and LPUART Peripheral */ 31 } LP_FLEXCOMM_PERIPH_T; 32 33 /*! @brief LP_FLEXCOMM interrupt source flags. */ 34 enum _lpflexcomm_interrupt_flag 35 { 36 kLPFLEXCOMM_I2cSlaveInterruptFlag = LP_FLEXCOMM_ISTAT_I2CS_MASK, /* LPI2C slave interrupt. */ 37 kLPFLEXCOMM_I2cMasterInterruptFlag = LP_FLEXCOMM_ISTAT_I2CM_MASK, /* LPI2C master interrupt. */ 38 kLPFLEXCOMM_SpiInterruptFlag = LP_FLEXCOMM_ISTAT_SPI_MASK, /* LPSPI interrupt. */ 39 kLPFLEXCOMM_UartRxInterruptFlag = LP_FLEXCOMM_ISTAT_UARTRX_MASK, /* LPUART RX interrupt. */ 40 kLPFLEXCOMM_UartTxInterruptFlag = LP_FLEXCOMM_ISTAT_UARTTX_MASK, /* LPUART TX interrupt. */ 41 42 kLPFLEXCOMM_AllInterruptFlag = kLPFLEXCOMM_I2cSlaveInterruptFlag | kLPFLEXCOMM_I2cMasterInterruptFlag | 43 kLPFLEXCOMM_SpiInterruptFlag | kLPFLEXCOMM_UartRxInterruptFlag | 44 kLPFLEXCOMM_UartTxInterruptFlag, 45 }; 46 47 /*! @brief Typedef for interrupt handler. */ 48 typedef void (*lpflexcomm_irq_handler_t)(uint32_t instance, void *handle); 49 50 /*! @brief Array with IRQ number for each LP_FLEXCOMM module. */ 51 extern IRQn_Type const kFlexcommIrqs[]; 52 53 /******************************************************************************* 54 * API 55 ******************************************************************************/ 56 #if defined(__cplusplus) 57 extern "C" { 58 #endif 59 60 /*! @brief Returns instance number for LP_FLEXCOMM module with given base address. */ 61 uint32_t LP_FLEXCOMM_GetInstance(void *base); 62 63 /*! @brief Returns for LP_FLEXCOMM base address. */ 64 uint32_t LP_FLEXCOMM_GetBaseAddress(uint32_t instance); 65 66 /*! brief Returns for LP_FLEXCOMM interrupt source,see #_lpflexcomm_interrupt_flag. */ 67 uint32_t LP_FLEXCOMM_GetInterruptStatus(uint32_t instance); 68 69 /*! @brief Initializes LP_FLEXCOMM and selects peripheral mode according to the second parameter. */ 70 status_t LP_FLEXCOMM_Init(uint32_t instance, LP_FLEXCOMM_PERIPH_T periph); 71 72 /*! @brief Deinitializes LP_FLEXCOMM. */ 73 void LP_FLEXCOMM_Deinit(uint32_t instance); 74 75 /*! @brief Sets IRQ handler for given LP_FLEXCOMM module. It is used by drivers register IRQ handler according to 76 * LP_FLEXCOMM mode */ 77 void LP_FLEXCOMM_SetIRQHandler(uint32_t instance, 78 lpflexcomm_irq_handler_t handler, 79 void *lpflexcommHandle, 80 LP_FLEXCOMM_PERIPH_T periph); 81 82 #if defined(__cplusplus) 83 } 84 #endif 85 86 /*! @} */ 87 88 #endif /* FSL_LP_FLEXCOMM_H_*/ 89