/********************************** (C) COPYRIGHT ******************************* * File Name : ch32v30x_opa.c * Author : WCH * Version : V1.0.0 * Date : 2021/06/06 * Description : This file provides all the OPA firmware functions. * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * SPDX-License-Identifier: Apache-2.0 ***************************************************************************************/ #include "ch32v30x_opa.h" #define OPA_MASK ((uint32_t)0x000F) #define OPA_Total_NUM 4 /********************************************************************* * @fn OPA_DeInit * * @brief Deinitializes the OPA peripheral registers to their default * reset values. * * @return none */ void OPA_DeInit(void) { OPA->CR = 0; } /********************************************************************* * @fn OPA_Init * * @brief Initializes the OPA peripheral according to the specified * parameters in the OPA_InitStruct. * * @param OPA_InitStruct - pointer to a OPA_InitTypeDef structure * * @return none */ void OPA_Init(OPA_InitTypeDef *OPA_InitStruct) { uint32_t tmp = 0; tmp = OPA->CR; tmp &= ~(OPA_MASK << (OPA_InitStruct->OPA_NUM * OPA_Total_NUM)); tmp |= (((OPA_InitStruct->PSEL << OPA_PSEL_OFFSET) | (OPA_InitStruct->NSEL << OPA_NSEL_OFFSET) | (OPA_InitStruct->Mode << OPA_MODE_OFFSET)) << (OPA_InitStruct->OPA_NUM * OPA_Total_NUM)); OPA->CR = tmp; } /********************************************************************* * @fn OPA_StructInit * * @brief Fills each OPA_StructInit member with its reset value. * * @param OPA_StructInit - pointer to a OPA_InitTypeDef structure * * @return none */ void OPA_StructInit(OPA_InitTypeDef *OPA_InitStruct) { OPA_InitStruct->Mode = OUT_IO; OPA_InitStruct->PSEL = CHP0; OPA_InitStruct->NSEL = CHN0; OPA_InitStruct->OPA_NUM = OPA1; } /********************************************************************* * @fn OPA_Cmd * * @brief Enables or disables the specified OPA peripheral. * * @param OPA_NUM - Select OPA * NewState - ENABLE or DISABLE. * * @return none */ void OPA_Cmd(OPA_Num_TypeDef OPA_NUM, FunctionalState NewState) { if(NewState == ENABLE) { OPA->CR |= (1 << (OPA_NUM * OPA_Total_NUM)); } else { OPA->CR &= ~(1 << (OPA_NUM * OPA_Total_NUM)); } }