/***************************************************************************************************** * 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; }
/** * 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; }