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

#if defined (CY_IP_MXS28ADCCOMP)

#include "cy_adc.h"

#define CIC_CTRL_DEFAULT         (_VAL2FLD(MXS28ADCCOMP_CIC_CTRL_CIC_COMB_DELAY_SEL, 0x244U))
//#define CIC_CLOCK_CTRL_DEFAULT   (_VAL2FLD(MXS28ADCCOMP_CIC_CLOCK_CTRL_CLK_EN, 0x3UL))


#define CY_ADC_PD_MASK (MXS28ADCCOMP_PD_CTRL_PD_ADC_Msk | \
                        MXS28ADCCOMP_PD_CTRL_PD_ADC_GMC_CAL_Msk | \
                        MXS28ADCCOMP_PD_CTRL_PD_ADC_DC_CAL_Msk)

/*******************************************************************************
* Function Name: Cy_ADC_Init
****************************************************************************//**
*
* Initializes the ADC block from a pre-initialized configuration structure.
*
* \param base
* The pointer to the hardware ADCCOMP block.
*
* \param config
* The pointer to the configuration structure \ref cy_stc_adc_config_t.
*
* \return
* The status /ref cy_en_adc_status_t.
*
* \funcusage
* \snippet adc/snippet/main.c snippet_Cy_ADC_Init
*
*******************************************************************************/
cy_en_adc_status_t Cy_ADC_Init(MXS28ADCCOMP_Type * base, cy_stc_adc_config_t const * config)
{
    cy_en_adc_status_t ret = CY_ADC_BAD_PARAM;

    if ((NULL != base) && (NULL != config))
    {
        /* configure sigma-delta modulator */

        if(NULL != config->cicConfig)
        {
            /* configure decimator */
        }
        else
        {
            /* reset cic registers to their default values */
            base->CIC_CTRL = CIC_CTRL_DEFAULT;
            base->CIC_GAIN = 0UL;
//            base->CIC_CLOCK_CTRL = CIC_CLOCK_CTRL_DEFAULT;
        }

        ret = CY_ADC_SUCCESS;
    }

    return ret;
}



void Cy_ADC_Enable(MXS28ADCCOMP_Type * base, uint32_t pdMsk)
{
    uint32_t interruptState = Cy_SysLib_EnterCriticalSection();
    base->PD_CTRL = (base->PD_CTRL & ~CY_ADC_PD_MASK) | (~pdMsk & CY_ADC_PD_MASK);
    Cy_SysLib_ExitCriticalSection(interruptState);
}

void Cy_ADC_Disable(MXS28ADCCOMP_Type * base, uint32_t pdMsk)
{
    uint32_t interruptState = Cy_SysLib_EnterCriticalSection();
    base->PD_CTRL = (base->PD_CTRL & ~CY_ADC_PD_MASK) | (pdMsk & CY_ADC_PD_MASK);
    Cy_SysLib_ExitCriticalSection(interruptState);
}



cy_en_adc_status_t Cy_ADC_Configure(MXS28ADCCOMP_Type * base, uint32_t clockFreq, uint32_t sampleRate, uint32_t bitWidth)
{
    cy_en_adc_status_t ret = CY_ADC_BAD_PARAM;

    if(true /* arguments are ok */)
    {
        cy_stc_adc_cic_config_t locCicConfig;
        cy_stc_adc_config_t locConfig;

        locConfig.cicConfig = &locCicConfig;


        /* do some math with input parameters */


        ret = Cy_ADC_Init(base, &locConfig);
    }

    return ret;
}

#endif /* CY_IP_MXS28ADCCOMP */