123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- /******************************************************************************
- **
- * @brief header file for KBI.
- *
- *******************************************************************************
- *
- * provide APIs for accessing KBI
- ******************************************************************************/
- #ifndef _KBI_H_
- #define _KBI_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- /******************************************************************************
- * Includes
- ******************************************************************************/
- /******************************************************************************
- * Constants
- ******************************************************************************/
- /*!
- * @brief KBI MODE select enum.
- *
- */
- typedef enum
- {
- KBI_MODE_EDGE_ONLY = 0, /*!< select edge only mode */
- KBI_MODE_EDGE_LEVEL /*!< select both edge and level mode */
- }KBI_ModeType;
- /*!
- * @brief KBI Edge select enum.
- *
- */
- typedef enum
- {
- KBI_FALLING_EDGE_LOW_LEVEL = 0, /*!< select falling edge and/or low level */
- KBI_RISING_EDGE_HIGH_LEVEL /*!< select rising edge and/or high level */
- }KBI_EdgeType;
- /******************************************************************************
- * Macros
- ******************************************************************************/
- /******************************************************************************
- * KBI module max number and port pins definition
- *
- *//*! @addtogroup kbi_macro
- * @{
- *******************************************************************************/
- #define KBI_MAX_NO 2 /*!< max number of modules */
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- #define KBI_MAX_PINS_PER_PORT 8 /*!< max number of pins */
- #elif defined(CPU_NV32M4)
- #define KBI_MAX_PINS_PER_PORT 32 /*!< max number of pins */
- #endif
- /*! @} End of kbi_macro */
- /******************************************************************************
- * Types
- ******************************************************************************/
- /*! @brief KBI_CALLBACK function declaration */
- typedef void (*KBI_CallbackType)(void);
- /*! @} End of kbi_callback */
- /******************************************************************************
- * KBI pin config struct
- *
- *//*! @addtogroup kbi_pinconfigstruct
- * @{
- *******************************************************************************/
- /*!
- * @brief KBI pin enable and edge select struct.
- *
- */
- typedef struct
- {
- uint8_t bEdge : 1; /*!< edge/level select bit */
- uint8_t bEn : 1; /*!< pin enable bit */
- uint8_t bRsvd : 6; /*!< reserved */
- } KBI_PinConfigType;
- /*! @} End of kbi_pinconfigstruct */
- /******************************************************************************
- * KBI config struct
- *
- *//*! @addtogroup kbi_configstruct
- * @{
- *******************************************************************************/
- /*!
- * @brief KBI status and control struct.
- *
- */
- typedef struct
- {
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- struct
- {
- uint8_t bMode : 1; /*!< KBI detection mode select */
- uint8_t bIntEn : 1; /*!< KBI interrupt enable bit */
- uint8_t bRsvd : 6; /*!< reserved */
- } sBits;
- #elif defined(CPU_NV32M4)
- struct
- {
- uint32_t bMode : 1; /*!< KBI detection mode select */
- uint32_t bIntEn : 1; /*!< KBI interrupt enable bit */
- uint32_t bRsvd2 : 2; /*!< reserved */
- uint32_t bKbspEn : 1; /*!<Real KBI_SP register enable*/
- uint32_t bRstKbsp: 1; /*!<Reset KBI_SP register*/
- uint32_t bRsvd26 : 26; /*!< reserved */
- } sBits;
- #endif
- KBI_PinConfigType sPin[KBI_MAX_PINS_PER_PORT];
- } KBI_ConfigType, *KBI_ConfigTypePtr;
- /*! @} End of kbi_configstruct */
- /******************************************************************************
- * Global variables
- ******************************************************************************/
- /*!
- * inline functions
- */
- /******************************************************************************
- * KBI api list
- *
- *//*! @addtogroup kbi_api_list
- * @{
- *******************************************************************************/
- /*****************************************************************************//*!
- *
- * @brief set detect falling edge only.
- *
- * @param[in] pKBI pointer to KBI module.
- * @param[in] PinMasks indicate pin numbers.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_DetectRisingEdge.
- *
- *****************************************************************************/
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- __STATIC_INLINE void KBI_DetectFallingEdge(KBI_Type *pKBI, uint8_t PinMasks)
- #elif defined(CPU_NV32M4)
- __STATIC_INLINE void KBI_DetectFallingEdge(KBI_Type *pKBI, uint32_t PinMasks)
- #endif
- {
- pKBI->SC &= ~KBI_SC_KBMOD_MASK;
- pKBI->ES &= ~(PinMasks);
- }
- /*****************************************************************************//*!
- *
- * @brief set detect falling edge only.
- *
- * @param[in] pKBI pointer to KBI module.
- * @param[in] PinMasks indicate pin numbers.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_DetectFallingEdge.
- *
- *****************************************************************************/
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- __STATIC_INLINE void KBI_DetectRisingEdge(KBI_Type *pKBI, uint8_t PinMasks)
- #elif defined(CPU_NV32M4)
- __STATIC_INLINE void KBI_DetectRisingEdge(KBI_Type *pKBI, uint32_t PinMasks)
- #endif
- {
- pKBI->SC &= ~KBI_SC_KBMOD_MASK;
- pKBI->ES |= (PinMasks);
- }
- /*****************************************************************************//*!
- *
- * @brief set detect falling edge only.
- *
- * @param[in] pKBI pointer to KBI module.
- * @param[in] PinMasks indicate pin number/mask.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_DetectFallingEdgeLowLevel.
- *
- *****************************************************************************/
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- __STATIC_INLINE void KBI_DetectRisingEdgeHighLevel(KBI_Type *pKBI, uint8_t PinMasks)
- #elif defined(CPU_NV32M4)
- __STATIC_INLINE void KBI_DetectRisingEdgeHighLevel(KBI_Type *pKBI, uint32_t PinMasks)
- #endif
- {
- pKBI->SC |= KBI_SC_KBMOD_MASK;
- pKBI->ES |= (PinMasks);
- }
- /*****************************************************************************//*!
- *
- * @brief set detect falling edge only.
- *
- * @param[in] pKBI pointer to KBI module.
- * @param[in] PinMasks indicate pin number/mask.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_DetectRisingEdgeHighLevel.
- *
- *****************************************************************************/
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- __STATIC_INLINE void KBI_DetectFallingEdgeLowLevel(KBI_Type *pKBI, uint8_t PinMasks)
- #elif defined(CPU_NV32M4)
- __STATIC_INLINE void KBI_DetectFallingEdgeLowLevel(KBI_Type *pKBI, uint32_t PinMasks)
- #endif
- {
- pKBI->SC |= KBI_SC_KBMOD_MASK;
- pKBI->ES &= ~(PinMasks);
- }
- /*****************************************************************************//*!
- *
- * @brief enable the pin specified.
- *
- * @param[in] pKBI pointer to KBI module.
- * @param[in] PinMasks indicate pin number/mask.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_Disable.
- *
- *****************************************************************************/
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- __STATIC_INLINE void KBI_Enable(KBI_Type *pKBI, uint8_t PinMasks)
- #elif defined(CPU_NV32M4)
- __STATIC_INLINE void KBI_Enable(KBI_Type *pKBI, uint32_t PinMasks)
- #endif
- {
- pKBI->PE |= (PinMasks);
- }
- /*****************************************************************************//*!
- *
- * @brief disable the pin specified.
- *
- * @param[in] pKBI pointer to KBI module.
- * @param[in] PinMasks indicate pin number/mask.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_Enable.
- *
- *****************************************************************************/
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- __STATIC_INLINE void KBI_Disable(KBI_Type *pKBI, uint8_t PinMasks)
- #elif defined(CPU_NV32M4)
- __STATIC_INLINE void KBI_Disable(KBI_Type *pKBI, uint32_t PinMasks)
- #endif
- {
- pKBI->PE &= ~(PinMasks);
- }
- /*****************************************************************************//*!
- *
- * @brief enable the corresponding interrupt.
- *
- * @param[in] pKBI pointer to KBI module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_DisableInt.
- *
- *****************************************************************************/
- __STATIC_INLINE void KBI_EnableInt(KBI_Type *pKBI)
- {
- pKBI->SC |= KBI_SC_KBIE_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief disable the corresponding interrupt.
- *
- * @param[in] pKBI pointer to KBI module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none
- *
- * @see KBI_EnableInt.
- *
- *****************************************************************************/
- __STATIC_INLINE void KBI_DisableInt(KBI_Type *pKBI)
- {
- pKBI->SC &= ~KBI_SC_KBIE_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief Get the corresponding status flag bits.
- *
- * @param[in] pKBI pointer to KBI module.
- *
- * @return uint8_t.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_ClrFlags.
- *
- *****************************************************************************/
- #if defined(CPU_NV32)|| defined(CPU_NV32M3)
- __STATIC_INLINE uint8_t KBI_GetFlags(KBI_Type *pKBI)
- #elif defined(CPU_NV32M4)
- __STATIC_INLINE uint32_t KBI_GetFlags(KBI_Type *pKBI)
- #endif
- {
- return (pKBI->SC & KBI_SC_KBF_MASK);
- }
- /*****************************************************************************//*!
- *
- * @brief clear the corresponding status flag bits.
- *
- * @param[in] pKBI pointer to KBI module
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none
- *
- * @see KBI_GetFlags.
- *
- *****************************************************************************/
- __STATIC_INLINE void KBI_ClrFlags(KBI_Type *pKBI)
- {
- pKBI->SC |= KBI_SC_KBACK_MASK;
- }
- #if defined(CPU_NV32M4)
- /*****************************************************************************//*!
- *
- * @brief Real KBI_SP register enable.
- *
- * @param[in] pKBI pointer to KBI module
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none
- *
- * @see The real ETMe value of Keyboard source pin to be read.
- *
- *****************************************************************************/
- __STATIC_INLINE void KBI_SPEnable(KBI_Type *pKBI)
- {
- pKBI->SC |= KBI_SC_KBSPEN_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief Get KBI source pin register fields.
- *
- * @param[in] pKBI pointer to KBI module.
- *
- * @return uint32_t.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see KBI_GetSP.
- *
- *****************************************************************************/
- __STATIC_INLINE uint32_t KBI_GetSP(KBI_Type *pKBI)
- {
- return (pKBI->SP & KBI_SP_SP_MASK);
- }
- /*****************************************************************************//*!
- *
- * @brief Reset KBI_SP register.
- *
- * @param[in] pKBI pointer to KBI module
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none
- *
- * @see KBI_RstSP.
- *
- *****************************************************************************/
- __STATIC_INLINE void KBI_RstSP(KBI_Type *pKBI)
- {
- pKBI->SC |= KBI_SC_RSTKBSP_MASK;
- }
- #endif
- /*! @} End of kbi_api_list */
- /******************************************************************************
- * Global functions
- ******************************************************************************/
- void KBI_Init(KBI_Type *pKBI, KBI_ConfigType *pConfig);
- void KBI_SetCallback(KBI_Type *pKBI, KBI_CallbackType pfnCallback);
- #ifdef __cplusplus
- }
- #endif
- #endif
|