Hi,
Pls try to test the code.
Hope it can help you
BR
XiangJun Rong
int main(void)
{
/* Initialize board hardware. */
/* attach 12 MHz clock to FLEXCOMM0 (debug console) */
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
BOARD_InitPins();
BOARD_BootClockPLL180M();
BOARD_InitDebugConsole();
/* Reset DMA since core reset in IDE will not reset DMA */
RESET_SetPeripheralReset(kDMA_RST_SHIFT_RSTn);
/* Enable the power and clock for ADC. */
ADC_ClockPower_Configuration();
PRINTF("ADC basic example.\r\n");
#if !(defined(FSL_FEATURE_ADC_HAS_NO_CALIB_FUNC) && FSL_FEATURE_ADC_HAS_NO_CALIB_FUNC)
uint32_t frequency = 0U;
/* Calibration after power up. */
#if defined(FSL_FEATURE_ADC_HAS_CALIB_REG) && FSL_FEATURE_ADC_HAS_CALIB_REG
DEMO_ADC_BASE->CTRL |= ADC_CTRL_BYPASSCAL_MASK;
frequency = CLOCK_GetFreq(kCLOCK_BusClk);
if (true == ADC_DoOffsetCalibration(DEMO_ADC_BASE, frequency))
#else
#if defined(SYSCON_ADCCLKDIV_DIV_MASK)
frequency = CLOCK_GetFreq(DEMO_ADC_CLOCK_SOURCE) / CLOCK_GetClkDivider(kCLOCK_DivAdcClk);
#else
frequency = CLOCK_GetFreq(DEMO_ADC_CLOCK_SOURCE);
#endif /* SYSCON_ADCCLKDIV_DIV_MASK */
if (true == ADC_DoSelfCalibration(DEMO_ADC_BASE, frequency))
#endif /* FSL_FEATURE_ADC_HAS_CALIB_REG */
{
PRINTF("ADC Calibration Done.\r\n");
}
else
{
PRINTF("ADC Calibration Failed.\r\n");
}
#endif /* FSL_FEATURE_ADC_HAS_NO_CALIB_FUNC */
/* Configure the converter and work mode. */
ADC_Configuration();
PRINTF("Configuration Done.\r\n");
#if defined(FSL_FEATURE_ADC_HAS_CTRL_RESOL) & FSL_FEATURE_ADC_HAS_CTRL_RESOL
PRINTF("ADC Full Range: %d\r\n", g_Adc_12bitFullRange);
#endif /* FSL_FEATURE_ADC_HAS_CTRL_RESOL */
while (1)
{
/* Get the input from terminal and trigger the converter by software. */
GETCHAR();
ADC_DoSoftwareTriggerConvSeqA(DEMO_ADC_BASE);
//ADC_DoSoftwareTriggerConvSeqB(DEMO_ADC_BASE);
/////////////////////////////////////////////////////////////////////////////////////////////////////////
///////Rong modified code beginning
/* Wait for the converter to be done. */
#if 0 //Rong wrote: it appears the lines is incorrect
while ((!ADC_GetChannelConversionResult(DEMO_ADC_BASE, DEMO_ADC_SAMPLE_CHANNEL_NUMBER4, &adcResultInfoStruct))
&& (!ADC_GetChannelConversionResult(DEMO_ADC_BASE, DEMO_ADC_SAMPLE_CHANNEL_NUMBER5, &adcResultInfoStruct5))
&& (!ADC_GetChannelConversionResult(DEMO_ADC_BASE, DEMO_ADC_SAMPLE_CHANNEL_NUMBER6, &adcResultInfoStruct6)))
#endif
while(!(ADC0->FLAGS&0x10000000)) //test the ADC0->FLAGS[SEQA_INT], bit 28
{
}
ADC0->FLAGS|=0x10000000;
ADC_GetChannelConversionResult(DEMO_ADC_BASE, DEMO_ADC_SAMPLE_CHANNEL_NUMBER4, &adcResultInfoStruct);
ADC_GetChannelConversionResult(DEMO_ADC_BASE, DEMO_ADC_SAMPLE_CHANNEL_NUMBER5, &adcResultInfoStruct5);
ADC_GetChannelConversionResult(DEMO_ADC_BASE, DEMO_ADC_SAMPLE_CHANNEL_NUMBER6, &adcResultInfoStruct6);
///////Rong modified code end
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PRINTF("adcResultInfoStruct.result = %d\r\n", adcResultInfoStruct.result);
PRINTF("adcResultInfoStruct.channelNumber = %d\r\n", adcResultInfoStruct.channelNumber);
PRINTF("adcResultInfoStruct.overrunFlag = %d\r\n", adcResultInfoStruct.overrunFlag ? 1U : 0U);
PRINTF("\r\n");
PRINTF("adcResultInfoStruct5.result = %d\r\n", adcResultInfoStruct5.result);
PRINTF("adcResultInfoStruct5.channelNumber = %d\r\n", adcResultInfoStruct5.channelNumber);
PRINTF("adcResultInfoStruct5.overrunFlag = %d\r\n", adcResultInfoStruct5.overrunFlag ? 1U : 0U);
PRINTF("\r\n");
PRINTF("adcResultInfoStruct6.result = %d\r\n", adcResultInfoStruct6.result);
PRINTF("adcResultInfoStruct6.channelNumber = %d\r\n", adcResultInfoStruct6.channelNumber);
PRINTF("adcResultInfoStruct6.overrunFlag = %d\r\n", adcResultInfoStruct6.overrunFlag ? 1U : 0U);
PRINTF("\r\n");
}
/*
GETCHAR();
ADC_DoSoftwareTriggerConvSeqB(DEMO_ADC_BASE);
/* Wait for the converter to be done. *./
while ((!ADC_GetChannelConversionResult(DEMO_ADC_BASE, DEMO_ADC_SAMPLE_CHANNEL_NUMBER4, &adcResultInfoStruct6)))
{
}
PRINTF("adcResultInfoStruct6.result = %d\r\n", adcResultInfoStruct6.result);
PRINTF("adcResultInfoStruct6.channelNumber = %d\r\n", adcResultInfoStruct6.channelNumber);
PRINTF("adcResultInfoStruct6.overrunFlag = %d\r\n", adcResultInfoStruct6.overrunFlag ? 1U : 0U);
PRINTF("\r\n");*/
}