/*****************************************************************************************************
*   Function: adc_init()
*
*   Description: Service for ADC initialization
*
*   Caveats: Non Reentrant
*****************************************************************************************************/
void ADC_init (void)
{
    AFEC0->AFEC_CR = AFEC_CR_SWRST;

    //ADC_EnablePeripheral_GLCK();
    ADC_EnablePeripheral_MCK(ADC_CHANNEL_0);

    /* Wait 64 periods of AFE clock */
    /* Set AFE Clock to 1MHz*/
    AFEC0->AFEC_MR = AFEC_MR_TRANSFER(15) | AFEC_MR_TRACKTIM(15) | AFEC_MR_ONE | AFEC_MR_STARTUP(4) | AFEC_MR_PRESCAL(125) /*| TAG */;

    /* RES - No Average - Set to 12 bit resolution */
    /* TAG -  Appends the channel number to the conversion result in AFEC_LDCR */
    /* STM - Only a single trigger is required to get an averaged value */
    AFEC0->AFEC_EMR = AFEC_EMR_RES(0) | AFEC_EMR_CMPSEL(0) | AFEC_EMR_CMPMODE(AFEC_EMR_CMPMODE_IN) | AFEC_EMR_TAG;

    /* AFEC Channel Enable Register */
    AFEC0->AFEC_CHER = AFEC_CHER_CH3;

    AFEC0->AFEC_CWR = AFEC_CWR_LOWTHRES(0) | AFEC_CWR_HIGHTHRES(0xFFFF);

    /* AFEC Interrupt Enable Register */
    //AFEC0->AFEC_IER = AFEC_IER_EOC0;

    /* AFEC Channel Selection Register */
    //AFEC0->AFEC_CSELR = AFEC_CSELR_CSEL(1);

//    NVIC_DisableIRQ(AFEC0_IRQn);
//    NVIC_ClearPendingIRQ(AFEC0_IRQn);
//    NVIC_SetPriority(AFEC0_IRQn,2);
//    NVIC_EnableIRQ(AFEC0_IRQn);
//    AFEC0->AFEC_IER = AFEC_IER_EOC3 | AFEC_IER_DRDY;
}
Esempio n. 2
0
/**
 * Set AFE tracking time
 * \param pAFE  Pointer to an AFE instance.
 * \param dwNs  Tracking time in nS.
 */
void AFEC_SetTrackingTime( Afec *pAFE, uint32_t dwNs )
{
    uint32_t dwShtim;
    uint32_t dwMr;

    if (dwAFEClock == 0) return;
    /* Formula for SHTIM is:
       SHTIM = (time x AFECLK) / (1000000000) - 1
       Since 1 billion is close to the maximum value for an integer, we first
       divide AFECLK by 1000 to avoid an overflow */
    dwShtim = (dwNs * (dwAFEClock / 1000)) / 100000;
    if (dwShtim % 10) dwShtim /= 10;
    else
    {
        dwShtim /= 10;
        if (dwShtim) dwShtim --;
    }
    dwMr  = AFEC_MR_TRACKTIM(dwShtim);
    dwMr |= pAFE->AFEC_MR & ~AFEC_MR_TRACKTIM_Msk;
    pAFE->AFEC_MR = dwMr;
}