Newer
Older
mbed-os / targets / TARGET_Cypress / TARGET_PSOC6 / mtb-pdl-cat1 / drivers / source / cy_comp.c
@Dustin Crossman Dustin Crossman on 4 Jun 2021 3 KB Fix file modes.
#include "cy_device.h"

#if defined (CY_IP_MXS28ADCCOMP)

#include "cy_comp.h"

/*******************************************************************************
* Function Name: Cy_Comp_Init
****************************************************************************//**
*
*  Initializes ADCCOMP comparators.
*
* \param *base
*     LPCOMP registers structure pointer.
*
* \param *config
*     The pointer to the configuration structure for PDL.
*
* \return cy_en_lpcomp_status_t
*     *base checking result. If the pointer is NULL, returns error.
*
*******************************************************************************/
cy_en_comp_status_t Cy_COMP_Init(MXS28ADCCOMP_Type* base, cy_stc_comp_config_t const * config)
{
    cy_en_comp_status_t ret = CY_COMP_BAD_PARAM;

    if ((NULL != base) && (NULL != config))
    {
        uint32_t interruptState;
        uint32_t locLpCompCtrlMsk = 0UL;
        uint32_t locLpCompCtrlVal = 0UL;

        if (0UL != (CY_COMP_1 & config->chanMsk))
        {
            locLpCompCtrlMsk = MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_HYST_Msk |
                               MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_HYST_X2_Msk |
                               MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_NTD_EN_Msk;

            locLpCompCtrlVal = _VAL2FLD(MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_HYST, config->hyst) |
                              _BOOL2FLD(MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_HYST_X2, config->hyst_x2) |
                              _BOOL2FLD(MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_NTD_EN, config->ntd_en);
        }

        if (0UL != (CY_COMP_2 & config->chanMsk))
        {
            locLpCompCtrlMsk |= MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_HYST_Msk |
                                MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_HYST_X2_Msk |
                                MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_NTD_EN_Msk;

            locLpCompCtrlVal |= _VAL2FLD(MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_HYST, config->hyst) |
                               _BOOL2FLD(MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_HYST_X2, config->hyst_x2) |
                               _BOOL2FLD(MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_NTD_EN, config->ntd_en);
        }

        interruptState = Cy_SysLib_EnterCriticalSection();
        base->LPCOMP_CTRL = (base->LPCOMP_CTRL & ~locLpCompCtrlMsk) | locLpCompCtrlVal;
        Cy_SysLib_ExitCriticalSection(interruptState);

        ret = CY_COMP_SUCCESS;
    }

    return (ret);
}


/*******************************************************************************
* Function Name: Cy_Comp_DeInit
****************************************************************************//**
*
*  Deinitializes ADCCOMP comparators.
*
* \param *base
*     LPCOMP registers structure pointer.
*
* \param chanMsk
*     The channel mask specifies channel(s) which should be deinitialized.
*
*******************************************************************************/
void Cy_COMP_DeInit(MXS28ADCCOMP_Type* base, uint32_t chanMsk)
{
    if (NULL != base)
    {
        uint32_t interruptState;
        uint32_t locLpCompCtrlMsk = 0UL;

        if (0UL != (CY_COMP_1 & chanMsk))
        {
            locLpCompCtrlMsk = MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_HYST_Msk |
                               MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_HYST_X2_Msk |
                               MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP1_NTD_EN_Msk;
        }

        if (0UL != (CY_COMP_2 & chanMsk))
        {
            locLpCompCtrlMsk |= MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_HYST_Msk |
                                MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_HYST_X2_Msk |
                                MXS28ADCCOMP_LPCOMP_CTRL_LPCOMP2_NTD_EN_Msk;
        }

        interruptState = Cy_SysLib_EnterCriticalSection();
        base->LPCOMP_CTRL &= ~locLpCompCtrlMsk;
        Cy_SysLib_ExitCriticalSection(interruptState);
    }
}

#endif /* CY_IP_MXS28ADCCOMP */