| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- /*****************************************************************************
- * Copyright (c) 2019, Nations Technologies Inc.
- *
- * All rights reserved.
- * ****************************************************************************
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * - Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the disclaimer below.
- *
- * Nations' name may not be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY NATIONS "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
- * DISCLAIMED. IN NO EVENT SHALL NATIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ****************************************************************************/
- /**
- * @file n32g45x_opamp.c
- * @author Nations
- * @version v1.0.2
- *
- * @copyright Copyright (c) 2019, Nations Technologies Inc. All rights reserved.
- */
- #include "n32g45x_opamp.h"
- #include "n32g45x_rcc.h"
- /** @addtogroup N32G45X_StdPeriph_Driver
- * @{
- */
- /** @addtogroup OPAMP
- * @brief OPAMP driver modules
- * @{
- */
- /** @addtogroup OPAMP_Private_TypesDefinitions
- * @{
- */
- /**
- * @}
- */
- /** @addtogroup OPAMP_Private_Defines
- * @{
- */
- /**
- * @}
- */
- /** @addtogroup OPAMP_Private_Macros
- * @{
- */
- /**
- * @}
- */
- /** @addtogroup OPAMP_Private_Variables
- * @{
- */
- /**
- * @}
- */
- /** @addtogroup OPAMP_Private_FunctionPrototypes
- * @{
- */
- /**
- * @}
- */
- /** @addtogroup OPAMP_Private_Functions
- * @{
- */
- #define SetBitMsk(reg, bit, msk) ((reg) = (((reg) & ~(msk)) | (bit)))
- #define ClrBit(reg, bit) ((reg) &= ~(bit))
- #define SetBit(reg, bit) ((reg) |= (bit))
- #define GetBit(reg, bit) ((reg) & (bit))
- /**
- * @brief Deinitializes the OPAMP peripheral registers to their default reset values.
- */
- void OPAMP_DeInit(void)
- {
- RCC_EnableAPB1PeriphReset(RCC_APB1_PERIPH_OPAMP, ENABLE);
- RCC_EnableAPB1PeriphReset(RCC_APB1_PERIPH_OPAMP, DISABLE);
- }
- void OPAMP_StructInit(OPAMP_InitType* OPAMP_InitStruct)
- {
- OPAMP_InitStruct->Gain = OPAMP_CS_PGA_GAIN_2;
- OPAMP_InitStruct->HighVolRangeEn = ENABLE;
- OPAMP_InitStruct->TimeAutoMuxEn = DISABLE;
- OPAMP_InitStruct->Mod = OPAMP_CS_PGA_EN;
- }
- void OPAMP_Init(OPAMPX OPAMPx, OPAMP_InitType* OPAMP_InitStruct)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- __IO uint32_t tmp = *pCs;
-
- SetBitMsk(tmp, OPAMP_InitStruct->Gain, OPAMP_CS_PGA_GAIN_MASK);
-
- if(OPAMP_InitStruct->HighVolRangeEn==ENABLE)
- SetBitMsk(tmp, OPAMP_CS_RANGE_MASK, OPAMP_CS_RANGE_MASK);
- else
- ClrBit(tmp,OPAMP_CS_RANGE_MASK);
- if(OPAMP_InitStruct->TimeAutoMuxEn==ENABLE)
- SetBitMsk(tmp,OPAMP_CS_TCMEN_MASK, OPAMP_CS_TCMEN_MASK);
- else
- ClrBit(tmp,OPAMP_CS_TCMEN_MASK);
-
- SetBitMsk(tmp, OPAMP_InitStruct->Mod, OPAMP_CS_MOD_MASK);
- *pCs = tmp;
- }
- void OPAMP_Enable(OPAMPX OPAMPx, FunctionalState en)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- if (en)
- SetBit(*pCs, OPAMP_CS_EN_MASK);
- else
- ClrBit(*pCs, OPAMP_CS_EN_MASK);
- }
- void OPAMP_SetPgaGain(OPAMPX OPAMPx, OPAMP_CS_PGA_GAIN Gain)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- __IO uint32_t tmp = *pCs;
- SetBitMsk(tmp, Gain, OPAMP_CS_PGA_GAIN_MASK);
- *pCs = tmp;
- }
- void OPAMP_SetVpSecondSel(OPAMPX OPAMPx, OPAMP_CS_VPSSEL VpSSel)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- __IO uint32_t tmp = *pCs;
- SetBitMsk(tmp, VpSSel, OPAMP_CS_VPSEL_SECOND_MASK);
- *pCs = tmp;
- }
- void OPAMP_SetVmSecondSel(OPAMPX OPAMPx, OPAMP_CS_VMSSEL VmSSel)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- __IO uint32_t tmp = *pCs;
- SetBitMsk(tmp, VmSSel, OPAMP_CS_VMSEL_SECOND_MASK);
- *pCs = tmp;
- }
- void OPAMP_SetVpSel(OPAMPX OPAMPx, OPAMP_CS_VPSEL VpSel)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- __IO uint32_t tmp = *pCs;
- SetBitMsk(tmp, VpSel, OPAMP_CS_VPSEL_MASK);
- *pCs = tmp;
- }
- void OPAMP_SetVmSel(OPAMPX OPAMPx, OPAMP_CS_VMSEL VmSel)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- __IO uint32_t tmp = *pCs;
- SetBitMsk(tmp, VmSel, OPAMP_CS_VMSEL_MASK);
- *pCs = tmp;
- }
- bool OPAMP_IsCalOutHigh(OPAMPX OPAMPx)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- return (GetBit(*pCs, OPAMP_CS_CALOUT_MASK)) ? true : false;
- }
- void OPAMP_CalibrationEnable(OPAMPX OPAMPx, FunctionalState en)
- {
- __IO uint32_t* pCs = &OPAMP->CS1 + OPAMPx;
- if (en)
- SetBit(*pCs, OPAMP_CS_CALON_MASK);
- else
- ClrBit(*pCs, OPAMP_CS_CALON_MASK);
- }
- // Lock see @OPAMP_LOCK
- void OPAMP_SetLock(uint32_t Lock)
- {
- OPAMP->LOCK = Lock;
- }
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
|