mongoose/examples/nxp/frdm-mcxn947-xpresso-baremetal-builtin/drivers/fsl_lpflexcomm.h
2024-06-13 13:43:53 -03:00

89 lines
3.2 KiB
C

/*
* Copyright 2022 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef FSL_LP_FLEXCOMM_H_
#define FSL_LP_FLEXCOMM_H_
#include "fsl_common.h"
/*!
* @addtogroup lpflexcomm_driver
* @{
*/
/*! @name Driver version */
/*@{*/
/*! @brief FlexCOMM driver version. */
#define FSL_LP_FLEXCOMM_DRIVER_VERSION (MAKE_VERSION(2, 2, 1))
/*@}*/
/*! @brief LP_FLEXCOMM peripheral modes. */
typedef enum
{
LP_FLEXCOMM_PERIPH_NONE, /*!< No peripheral */
LP_FLEXCOMM_PERIPH_LPUART, /*!< LPUART peripheral */
LP_FLEXCOMM_PERIPH_LPSPI, /*!< LPSPI Peripheral */
LP_FLEXCOMM_PERIPH_LPI2C, /*!< LPI2C Peripheral */
LP_FLEXCOMM_PERIPH_LPI2CAndLPUART = 7, /*!< LPI2C and LPUART Peripheral */
} LP_FLEXCOMM_PERIPH_T;
/*! @brief LP_FLEXCOMM interrupt source flags. */
enum _lpflexcomm_interrupt_flag
{
kLPFLEXCOMM_I2cSlaveInterruptFlag = LP_FLEXCOMM_ISTAT_I2CS_MASK, /* LPI2C slave interrupt. */
kLPFLEXCOMM_I2cMasterInterruptFlag = LP_FLEXCOMM_ISTAT_I2CM_MASK, /* LPI2C master interrupt. */
kLPFLEXCOMM_SpiInterruptFlag = LP_FLEXCOMM_ISTAT_SPI_MASK, /* LPSPI interrupt. */
kLPFLEXCOMM_UartRxInterruptFlag = LP_FLEXCOMM_ISTAT_UARTRX_MASK, /* LPUART RX interrupt. */
kLPFLEXCOMM_UartTxInterruptFlag = LP_FLEXCOMM_ISTAT_UARTTX_MASK, /* LPUART TX interrupt. */
kLPFLEXCOMM_AllInterruptFlag = kLPFLEXCOMM_I2cSlaveInterruptFlag | kLPFLEXCOMM_I2cMasterInterruptFlag |
kLPFLEXCOMM_SpiInterruptFlag | kLPFLEXCOMM_UartRxInterruptFlag |
kLPFLEXCOMM_UartTxInterruptFlag,
};
/*! @brief Typedef for interrupt handler. */
typedef void (*lpflexcomm_irq_handler_t)(uint32_t instance, void *handle);
/*! @brief Array with IRQ number for each LP_FLEXCOMM module. */
extern IRQn_Type const kFlexcommIrqs[];
/*******************************************************************************
* API
******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif
/*! @brief Returns instance number for LP_FLEXCOMM module with given base address. */
uint32_t LP_FLEXCOMM_GetInstance(void *base);
/*! @brief Returns for LP_FLEXCOMM base address. */
uint32_t LP_FLEXCOMM_GetBaseAddress(uint32_t instance);
/*! brief Returns for LP_FLEXCOMM interrupt source,see #_lpflexcomm_interrupt_flag. */
uint32_t LP_FLEXCOMM_GetInterruptStatus(uint32_t instance);
/*! @brief Initializes LP_FLEXCOMM and selects peripheral mode according to the second parameter. */
status_t LP_FLEXCOMM_Init(uint32_t instance, LP_FLEXCOMM_PERIPH_T periph);
/*! @brief Deinitializes LP_FLEXCOMM. */
void LP_FLEXCOMM_Deinit(uint32_t instance);
/*! @brief Sets IRQ handler for given LP_FLEXCOMM module. It is used by drivers register IRQ handler according to
* LP_FLEXCOMM mode */
void LP_FLEXCOMM_SetIRQHandler(uint32_t instance,
lpflexcomm_irq_handler_t handler,
void *lpflexcommHandle,
LP_FLEXCOMM_PERIPH_T periph);
#if defined(__cplusplus)
}
#endif
/*@}*/
#endif /* FSL_LP_FLEXCOMM_H_*/