123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568 |
- /******************************************************************************
- * @brief header file for ACMP utilities.
- *
- *******************************************************************************
- *
- * provide APIs for accessing ACMP
- ******************************************************************************/
- #ifndef _MY_ACMP_H_
- #define _MY_ACMP_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- /******************************************************************************
- * Includes
- ******************************************************************************/
- /******************************************************************************
- * Constants
- ******************************************************************************/
- /* DAC reference select */
- enum
- {
- DAC_REF_BANDGAP = 0,
- DAC_REF_VDDA
- };
- /******************************************************************************
- * Macros
- ******************************************************************************/
- /******************************************************************************
- * ACMP module number definition *
- ******************************************************************************/
- #define MAX_ACMP_NO 2
- /******************************************************************************
- * ACMP positive and negative pin select definition
- *
- *//*! @addtogroup acmp_pinsel_list
- * @{
- *******************************************************************************/
- #define ACMP_INPUT_P_EXT0 (0<<4) /*!< positive pin select external pin 0 */
- #define ACMP_INPUT_P_EXT1 (1<<4) /*!< positive pin select external pin 1 */
- #define ACMP_INPUT_P_EXT2 (2<<4) /*!< positive pin select external pin 2 */
- #define ACMP_INPUT_P_DAC (3<<4) /*!< positive pin select internal DAC */
- #define ACMP_INPUT_N_EXT0 0 /*!< positive pin select external pin 0 */
- #define ACMP_INPUT_N_EXT1 1 /*!< positive pin select external pin 1 */
- #define ACMP_INPUT_N_EXT2 2 /*!< positive pin select external pin 2 */
- #define ACMP_INPUT_N_DAC 3 /*!< positive pin select internal DAC */
- /*! @} End of acmp_pinsel_list */
- /******************************************************************************
- * ACMP interrupt sensitivity edge definition
- *
- *//*! @addtogroup acmp_intedgesel
- * @{
- *******************************************************************************/
- #define ACMP_SENSITIVITYMODE_FALLING 0 /*!< interrupt on falling edge */
- #define ACMP_SENSITIVITYMODE_RISING 1 /*!< interrupt on rising edge */
- #define ACMP_SENSITIVITYMODE_ANY 3 /*!< interrupt on falling or rising edge */
- /*! @} End of acmp_intedgesel */
- /******************************************************************************
- * ACMP hysterisis selection definition
- *
- *//*! @addtogroup acmp_hyst
- * @{
- *******************************************************************************/
- #define ACMP_HYST_20MV (0<<6) /*!< 20mv hyst */
- #define ACMP_HYST_30MV (1<<6) /*!< 30mv hyst */
- /*! @} End of acmp_hyst */
- /******************************************************************************
- * ACMP internal DAC reference selection definition
- *
- *//*! @addtogroup acmp_dacref
- * @{
- *******************************************************************************/
- #define ACMP_DAC_REFERENCE_BANDGAP (0<<6) /*!< select bandgap as refference */
- #define ACMP_DAC_REFERENCE_VDDA (1<<6) /*!< select VDDA as refference */
- /*! @} End of acmp_dacref */
- /******************************************************************************
- * Types
- ******************************************************************************/
- /*! @brief ACMP_CALLBACK function declaration */
- typedef void (*ACMP_CallbackPtr)(void);
- /*! @} End of acmp_callback */
- /******************************************************************************
- * ACMP control status struct
- *
- *//*! @addtogroup acmp_ctrlstatusstruct
- * @{
- *******************************************************************************/
- /*!
- * @brief ACMP control and status fields type.
- *
- */
- typedef union
- {
- uint8_t byte; /*!< byte field of union type */
- struct
- {
- uint8_t bMod : 2; /*!< Sensitivity modes of the interrupt trigger */
- uint8_t bOutEn : 1; /*!< Output can be placed onto an external pin */
- uint8_t bOutState : 1; /*!< The current value of the analog comparator output */
- uint8_t bIntEn : 1; /*!< ACMP interrupt enable */
- uint8_t bIntFlag : 1; /*!< ACMP Interrupt Flag Bit */
- uint8_t bHyst : 1; /*!< Selects ACMP hystersis */
- uint8_t bEn : 1; /*!< Enables the ACMP module */
- }bits; /*!< bitfield of union type */
- }ACMP_CtrlStatusType, *ACMP_CtrlStatusPtr; /*!< ACMP Control/Status reg structure */
- /*! @} End of acmp_ctrlstatusstruct */
- /******************************************************************************
- * ACMP pin select struct
- *
- *//*! @addtogroup acmp_pinselectstruct
- * @{
- *******************************************************************************/
- /*!
- * @brief ACMP external pins control struct.
- *
- */
- typedef union
- {
- uint8_t byte; /*!< byte field of union type */
- struct
- {
- uint8_t bNegPin : 2; /*!< Negative pin select */
- uint8_t : 2;
- uint8_t bPosPin : 2; /*!< Positive pin select */
- uint8_t : 2;
- }bits; /*!< bitfield of union type */
- }ACMP_PinSelType, *ACMP_PinSelPtr; /*!< ACMP Pin select structure */
- /*! @} End of acmp_pinselectstruct */
- /******************************************************************************
- * ACMP DAC control struct
- *
- *//*! @addtogroup acmp_dacctrlstruct
- * @{
- *******************************************************************************/
- /*!
- * @brief ACMP internal ADC control struct.
- *
- */
- typedef union
- {
- uint8_t byte; /*!< byte field of union type */
- struct
- {
- uint8_t bVal : 6; /*!< 6 bit DAC value */
- uint8_t bRef : 1; /*!< 6 bit DAC reference select */
- uint8_t bEn : 1; /*!< 6 bit DAC enable bit */
- }bits; /*!< bitfield of union type */
- }ACMP_DACType, *ACMP_DACPtr; /*!< ACMP DAC control structure */
- /*! @} End of acmp_dacctrlstruct */
- /******************************************************************************
- * ACMP pin enable union
- *
- *//*! @addtogroup acmp_pinenunion
- * @{
- *******************************************************************************/
- /*!
- * @brief ACMP external input pin enable control struct.
- *
- */
- typedef union
- {
- uint8_t byte; /*!< byte field of union type */
- struct
- {
- uint8_t bEn : 3; /*!< ACMP external input pin enable */
- uint8_t bRsvd : 5;
- }bits; /*!< bitfield of union type */
- }ACMP_PinEnType, *ACMP_PinEnPtr; /*!< ACMP Pin enable structure */
- /*! @} End of acmp_pinenunion */
- /******************************************************************************
- * ACMP config struct
- *
- *//*! @addtogroup acmp_configstruct
- * @{
- *******************************************************************************/
- /*!
- * @brief ACMP module configuration struct.
- *
- */
- typedef struct
- {
- ACMP_CtrlStatusType sCtrlStatus; /*!< ACMP control and status */
- ACMP_PinSelType sPinSelect; /*!< ACMP pin select */
- ACMP_DACType sDacSet; /*!< ACMP internal dac set */
- ACMP_PinEnType sPinEnable; /*!< ACMP external pin control */
- }ACMP_ConfigType, *ACMP_ConfigPtr;
- /*! @} End of acmp_configstruct */
- /******************************************************************************
- * Global variables
- ******************************************************************************/
- /*!
- * inline functions
- */
- /******************************************************************************
- * ACMP api list.
- *
- *//*! @addtogroup acmp_api_list
- * @{
- *******************************************************************************/
- /*****************************************************************************//*!
- *
- * @brief enable the acmp module.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_Disable.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_Enable(ACMP_Type *pACMPx)
- {
- pACMPx->CS |= ACMP_CS_ACE_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief disable the acmp module.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_Enable.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_Disable(ACMP_Type *pACMPx)
- {
- pACMPx->CS &= ~ACMP_CS_ACE_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief select sensitivity modes of the interrupt trigger.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- * @param[in] u8EdgeSelect falling or rising selction, 0~3.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_SelectIntMode(ACMP_Type *pACMPx, uint8_t u8EdgeSelect)
- {
- pACMPx->CS &= ~ACMP_CS_ACMOD_MASK;
- pACMPx->CS |= ACMP_CS_ACMOD(u8EdgeSelect & 0x3);
- }
- /*****************************************************************************//*!
- *
- * @brief enable the ACMP module analog comparator output.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_DisablePinOut.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_EnablePinOut(ACMP_Type *pACMPx)
- {
- pACMPx->CS |= ACMP_CS_ACOPE_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief disable the ACMP module analog comparator output.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_EnablePinOut.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_DisablePinOut(ACMP_Type *pACMPx)
- {
- pACMPx->CS &= ~ACMP_CS_ACOPE_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief select ACMP hystersis.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- * @param[in] u8HystSelect ACMP_HYST_20MV or ACMP_HYST_30MV.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_SelectHyst(ACMP_Type *pACMPx, uint8_t u8HystSelect)
- {
- pACMPx->CS &= ~ACMP_CS_HYST_MASK;
- pACMPx->CS |= u8HystSelect;
- }
- /*****************************************************************************//*!
- *
- * @brief enable the acmp module interrupt.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_DisableInterrupt.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_EnableInterrupt(ACMP_Type *pACMPx)
- {
- pACMPx->CS |= ACMP_CS_ACIE_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief disable the acmp module interrupt.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_EnableInterrupt.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_DisableInterrupt(ACMP_Type *pACMPx)
- {
- pACMPx->CS &= ~ACMP_CS_ACIE_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief get the interrupt flag bit.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_ClrFlag.
- *
- *****************************************************************************/
- __STATIC_INLINE uint8_t ACMP_GetFlag(ACMP_Type *pACMPx)
- {
- return (pACMPx->CS & ACMP_CS_ACF_MASK);
- }
- /*****************************************************************************//*!
- *
- * @brief clear the interrupt flag bit.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_GetFlag.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_ClrFlag(ACMP_Type *pACMPx)
- {
- pACMPx->CS &= ~ACMP_CS_ACF_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief ACMP Positive Input Select.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- * @param[in] u8PosPinSel positive input select, ACMP_INPUT_P_EXT0~2 or ACMP_INPUT_P_DAC.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_NegativeInputSelect.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_PositiveInputSelect(ACMP_Type *pACMPx, uint8_t u8PosPinSel)
- {
- pACMPx->C0 &= ~ACMP_C0_ACPSEL_MASK;
- pACMPx->C0 |= u8PosPinSel;
- }
- /*****************************************************************************//*!
- *
- * @brief ACMP Negative Input Select.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- * @param[in] u8NegPinSel negative input select, ACMP_INPUT_N_EXT0~2 or ACMP_INPUT_N_DAC.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_PositiveInputSelect.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_NegativeInputSelect(ACMP_Type *pACMPx, uint8_t u8NegPinSel)
- {
- pACMPx->C0 &= ~ACMP_C0_ACNSEL_MASK;
- pACMPx->C0 |= u8NegPinSel;
- }
- /*****************************************************************************//*!
- *
- * @brief Enable 6 bit DAC in ACMP module.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_DacDisable.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_DacEnable(ACMP_Type *pACMPx)
- {
- pACMPx->C1 |= ACMP_C1_DACEN_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief Disable 6 bit DAC in ACMP module.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- * @see ACMP_DacEnable.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_DacDisable(ACMP_Type *pACMPx)
- {
- pACMPx->C1 &= ~ACMP_C1_DACEN_MASK;
- }
- /*****************************************************************************//*!
- *
- * @brief ACMP 6 bit DAC Reference Select.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- * @param[in] u8RefSelect dac reference select:ACMP_DAC_REFERENCE_BANDGAP or ACMP_DAC_REFERENCE_VDDA.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_DacReferenceSelect(ACMP_Type *pACMPx, uint8_t u8RefSelect)
- {
- pACMPx->C1 &= ~ACMP_C1_DACREF_MASK;
- pACMPx->C1 |= u8RefSelect;
- }
- /*****************************************************************************//*!
- *
- * @brief ACMP 6 bit DAC Output Value Set.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- * @param[in] u8DacValue dac output set, Voutput= (Vin/64)x(DACVAL[5:0]+1).
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_DacOutputSet(ACMP_Type *pACMPx, uint8_t u8DacValue)
- {
- ASSERT(!(u8DacValue & (~ACMP_C1_DACVAL_MASK)));
- pACMPx->C1 &= ~ACMP_C1_DACVAL_MASK;
- pACMPx->C1 |= ACMP_C1_DACVAL(u8DacValue);
- }
- /*****************************************************************************//*!
- *
- * @brief Enable ACMP input pin.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- * @param[in] u8InputPin ACMP external pin, 0~2.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_InputPinEnable(ACMP_Type *pACMPx, uint8_t u8InputPin)
- {
- ASSERT(!(u8InputPin & (~ACMP_C2_ACIPE_MASK)));
- pACMPx->C2 |= ACMP_C2_ACIPE(u8InputPin);
- }
- /*****************************************************************************//*!
- *
- * @brief Disable ACMP input pin.
- *
- * @param[in] pACMPx pointer to an ACMP module.
- * @param[in] u8InputPin ACMP external pin, 0~2.
- *
- * @return none.
- *
- * @ Pass/ Fail criteria: none.
- *
- *****************************************************************************/
- __STATIC_INLINE void ACMP_InputPinDisable(ACMP_Type *pACMPx, uint8_t u8InputPin)
- {
- ASSERT(!(u8InputPin & (~ACMP_C2_ACIPE_MASK)));
- pACMPx->C2 &= ~ACMP_C2_ACIPE(u8InputPin);
- }
- /*! @} End of acmp_api_list */
- /******************************************************************************
- * Global functions
- ******************************************************************************/
- void ACMP_Init(ACMP_Type *pACMPx, ACMP_ConfigType *pConfig);
- void ACMP_DeInit(ACMP_Type *pACMPx);
- void ACMP_ConfigDAC(ACMP_Type *pACMPx, ACMP_DACType *pDACConfig);
- void ACMP_SetCallback(ACMP_Type *pACMPx, ACMP_CallbackPtr pfnCallback);
- #ifdef __cplusplus
- }
- #endif
- #endif /* _MY_ACMP_H_ */
|