SPRZ488D March   2022  – September 2023 AM2631 , AM2631-Q1 , AM2632 , AM2632-Q1 , AM2634 , AM2634-Q1

 

  1.   1
  2. 1Usage Notes and Advisories Matrices
  3. 2Silicon Usage Notes
    1.     i2324
    2.     i2348
    3.     i2364
  4. 3Silicon Advisories
    1.     i2310
    2.     i2311
    3.     i2313
    4.     i2329
    5.     i2345
    6.     i2346
    7.     i2347
    8.     i2349
    9.     i2350
    10.     i2352
    11.     i2353
    12.     i2354
    13.     i2355
    14.     i2356
    15.     i2357
    16.     i2358
    17.     i2359
    18.     i2374
    19.     i2375
    20.     i2386
    21.     i2392
    22.     i2394
    23.     i2395
    24.     i2401
    25.     i2402
    26.     i2403
    27.     i2404
    28.     i2405
  5.   Trademarks
  6. 4Revision History

i2356

CONTROLSS-ADC: Interrupts may Stop if INTxCONT (Continue-to-Interrupt Mode) is not Set

Details:

If ADCINTSELxNx[INTxCONT] = 0, then interrupts will stop when the ADCINTFLG is set and no additional ADC interrupts will occur. When an ADC interrupt occurs simultaneously with a software write of the ADCINTFLGCLR register, the ADCINTFLG will unexpectedly remain set, blocking future ADC interrupts.

Workaround(s):

  1. Use Continue-to-Interrupt Mode to prevent the ADCINTFLG from blocking additional ADC interrupts:

    ADCINTSEL1N2[INT1CONT] = 1;

    ADCINTSEL1N2[INT2CONT] = 1;

    ADCINTSEL3N4[INT3CONT] = 1;

    ADCINTSEL3N4[INT4CONT] = 1;

  2. Ensure there is always sufficient time to service the ADC ISR and clear the ADCINTFLG before the next ADC interrupt occurs to avoid this condition.
  3. Check for an overflow condition in the ISR when clearing the ADCINTFLG. Check ADCINTOVF immediately after writing to ADCINTFLGCLR; if it is set, then write ADCINTFLGCLR a second time to ensure the ADCINTFLG is cleared. The ADCINTOVF register will be set, indicating an ADC conversion interrupt was lost.

    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag

    if(1 == AdcaRegs.ADCINTOVF.bit.ADCINT1) //ADCINT overflow

    {

    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 again

    // If the ADCINTOVF condition will be ignored by the application

    // then clear the flag here by writing 1 to ADCINTOVFCLR.

    // If there is a ADCINTOVF handling routine, then either insert

    // that code and clear the ADCINTOVF flag here or do not clear

    // the ADCINTOVF here so the external routine will detect the

    // condition.

    // AdcaRegs.ADCINTOVFCLR.bit.ADCINT1 = 1; // clear OVF