S32K14X ADC Driver 纯C寄存器配置
void ADC_init(void)
{
PCC->PCCn[PCC_ADC0_INDEX] &=~ PCC_PCCn_CGC_MASK;
/* Disable clock to change PCS /
PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_PCS(1)
| PCC_PCCn_CGC_MASK; / PCS=1: Select SOSCDIV2 16Mhz */
ADC0->SC1[0] = ADC_SC1_ADCH_MASK; /* ADCH=3F: Module is disabled for conversions*/
/* AIEN=0: Interrupts are disabled */
ADC0->CFG1 = ADC_CFG1_ADICLK(0) | ADC_CFG1_ADIV(3)
| ADC_CFG1_MODE(1); /* ADICLK=0: Input clk=ALTCLK1=SOSCDIV2 */
/* ADIV=0: Prescaler=1 */ //ADIV=1 (input clock)/8 = 2Mhz
/* MODE=1: 12-bit conversion */
ADC0->CFG2 = ADC_CFG2_SMPLTS(100); /* SMPLTS=12(default): sample time is 13 ADC clks */
ADC0->SC2 = 0x00000000; /* ADTRG=0: SW trigger */
/* ACFE,ACFGT,ACREN=0: Compare func disabled */
/* DMAEN=0: DMA disabled */
/* REFSEL=0: Voltage reference pins= VREFH, VREEFL */
ADC0->SC3 = ADC_SC3_ADCO_MASK; //ADC_SC3_ADCO_MASK; //0x00000000; /* CAL=0: Do not start calibration sequence */
/* ADCO=1: 1b - Continuous conversions*/
/* AVGE,AVGS=0: HW average function disabled */
ADC0->CLPS = 0x00u;
ADC0->CLP3 = 0x00u;
ADC0->CLP2 = 0x00u;
ADC0->CLP1 = 0x00u;
ADC0->CLP0 = 0x00u;
ADC0->CLPX = 0x00u;
ADC0->CLP9 = 0x00u;
ADC0->SC3 |= ADC_SC3_CAL_MASK; //CAL=1, the ADC begins the calibration sequence
while((ADC0->SC3 & ADC_SC3_CAL_MASK)>>ADC_SC3_CAL_SHIFT)
{
/* Wait for calibration to finish */
}
}
uint16_t Adc0_ChxValule(uint16_t adcChan)
{
uint16_t adc_result = 0;
/* For SW trigger mode, SC1[0] is used */
ADC0->SC1[0] &= ~ADC_SC1_ADCH_MASK; /* Clear prior ADCH bits */
ADC0->SC1[0] = ADC_SC1_ADCH(adcChan); /* Initiate Conversion*/
while(!((ADC0->SC1[0] & ADC_SC1_COCO_MASK) >> ADC_SC1_COCO_SHIFT)); /* Wait for conversion complete flag */
adc_result = (uint16_t)ADC0->R[0]; /* For SW trigger mode, R[0] is used */
ADC0->SC1[0] &= ~ADC_SC1_COCO_MASK; //clear conversion complete flag
return (adc_result);
}