AnsweredAssumed Answered

unexpected interrupt occured when adc conversion not finished yield

Question asked by zaijzhgh huang on Oct 30, 2019
Latest reply on Nov 4, 2019 by Jorge Antonio Alcala Vazquez

Using Keil + S32K144 sdk pack for keil , configure PTC15/ADC0_SE13/FTM1_CH3/TRGMUX_IN8 PIN as adc input source.
Software interrupt trigger was configured, Here is my question:When software trigger called(adc_start_convert), The unexpected interrupt was trigger. It confused me: Isn't interrupt function called when adc conversion completed?


Initialization:
{
...

PCC->PCCn[PCC_ADC0_INDEX] &= ~PCC_PCCn_CGC_MASK;
PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_PCS(6); /* PCS=6: 80MHZ */
PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_CGC_MASK;

ADC0->CFG1 = ADC_CFG1_ADIV(2) | /* ADIV=2:=40MHZ */
ADC_CFG1_MODE(1) | /* MODE=1: 12 bits ADC */
ADC_CFG1_ADICLK(0); /* ADICLK=0: use default pcc clock */

ADC0->SC1[0] = ADC_SC1_AIEN_MASK | /* AIEN=1: enable interrupt trigger */
ADC_SC1_ADCH(13); /* ADCH=13: use channel 13 */

ADC0->SC2 |= ADC_SC2_ADTRG(0); /* ADTRG=0: enable software trigger */
ADC0->SC3 = 0;

S32_NVIC->ICPR[ADC0_IRQn >> 5] = 1 << (ADC0_IRQn % 32); /* register ADC0 interrupt */
S32_NVIC->ISER[ADC0_IRQn >> 5] = 1 << (ADC0_IRQn % 32); /* enable ADC0 interrupt */
S32_NVIC->IP[ADC0_IRQn] = 0x0b;

adc_start_convert(13);

...
}

void
adc_start_convert(uint16_t adcChan)
{
ADC0->SC1[0] &= ~ADC_SC1_ADCH_MASK; /* Clear prior ADCH bits */
ADC0->SC1[0] = ADC_SC1_AIEN_MASK |
ADC_SC1_ADCH(adcChan);
}

void
ADC0_IRQHandler(void)
{
...
}

Outcomes