/** * @file xmc_acmp.c * @date 2015-06-20 * * @cond ********************************************************************************************************************* * XMClib v2.1.8 - XMC Peripheral Driver Library * * Copyright (c) 2015-2016, Infineon Technologies AG * 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 following * disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote * products derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 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. * * To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with * Infineon Technologies AG dave@infineon.com). ********************************************************************************************************************* * * Change History * -------------- * * 2014-12-10: * - Initial
* 2015-02-20: * - Removed unused declarations
* 2015-05-08: * - Fixed sequence problem of low power mode in XMC_ACMP_Init() API
* - Fixed wrong register setting in XMC_ACMP_SetInput() API
* - Removed return type variable and by default comparator enable from XMC_ACMP_Init() API.
* Additional call to XMC_ACMP_EnableComparator() API needed to start Comparator after Init.
* 2015-06-04: * - Removed return type variable and by default comparator enable from XMC_ACMP_Init() API.
* - Divided XMC_ACMP_SetInput into two 3 APIs to reduce the code size and complexity as stated below
* (a)XMC_ACMP_EnableReferenceDivider
* (b)XMC_ACMP_DisableReferenceDivider
* (c)XMC_ACMP_SetInput
* - Optimized enable and disable API's and moved to header file as static inline APIs. * - XMC_ACMP_t typedef changed to structure which overrides the standard header file structure. * 2015-06-20: * - Removed definition of GetDriverVersion API * @endcond * */ /********************************************************************************************************************* * HEADER FILES ********************************************************************************************************************/ #include /* If ACMP is available*/ #if defined (COMPARATOR) /********************************************************************************************************************* * MACROS ********************************************************************************************************************/ #define XMC_ACMP_INSTANCE_1 (1U) /* Instance number for Slice-1 */ /********************************************************************************************************************* * API IMPLEMENTATION ********************************************************************************************************************/ /* API to initialize an instance of ACMP module */ void XMC_ACMP_Init(XMC_ACMP_t *const peripheral, uint32_t instance, const XMC_ACMP_CONFIG_t *const config) { XMC_ASSERT("XMC_ACMP_Init:NULL Configuration", (config != (XMC_ACMP_CONFIG_t *)NULL)) XMC_ASSERT("XMC_ACMP_Init:Wrong module pointer", XMC_ACMP_CHECK_MODULE_PTR(peripheral)) XMC_ASSERT("XMC_ACMP_Init:Wrong instance number", XMC_ACMP_CHECK_INSTANCE(instance) ) /* * Initializes the comparator with configuration supplied. Low power node setting is retained during initialization. * All the instances passed are handled with low power setting, to avoid conditional check for ACMP0 instance. * This reduces the code size. No side effects, because this register bit field is empty for other instances. */ peripheral->ANACMP[instance] = ((peripheral->ANACMP[instance] & (uint32_t)COMPARATOR_ANACMP0_CMP_LPWR_Msk)) | (uint32_t)config->anacmp; } /* API to select INP source */ void XMC_ACMP_SetInput(XMC_ACMP_t *const peripheral, uint32_t instance, XMC_ACMP_INP_SOURCE_t source) { XMC_ASSERT("XMC_ACMP_SetInput:Wrong module pointer", XMC_ACMP_CHECK_MODULE_PTR(peripheral)) XMC_ASSERT("XMC_ACMP_SetInput:Wrong instance number", ((instance != XMC_ACMP_INSTANCE_1) && XMC_ACMP_CHECK_INSTANCE(instance)) ) XMC_ASSERT("XMC_ACMP_SetInput:Wrong input source", ((source == XMC_ACMP_INP_SOURCE_STANDARD_PORT) || (source == XMC_ACMP_INP_SOURCE_ACMP1_INP_PORT)) ) /* * Three options of Input Setting are listed below * 1. The comparator inputs aren't connected to other comparator inputs * 2. Can program the comparators to connect ACMP0.INP to ACMP1.INP in XMC1200 AA or XMC1300 AA * Can program the comparators to connect ACMP0.INN to ACMP1.INP in XMC1200 AB or XMC1300 AB or XMC1400 AA * 3. Can program the comparators to connect ACMP2.INP to ACMP1.INP * 4. Can program the comparators to connect ACMP3.INP to ACMP1.INP in XMC1400 */ peripheral->ANACMP[instance] = ((peripheral->ANACMP[instance] & (uint32_t)(~COMPARATOR_ANACMP0_ACMP0_SEL_Msk))) | (uint32_t)source; } #endif /* #ifdef ACMP_AVAILABLE */