SPRZ576 November   2024 AM2612

ADVANCE INFORMATION  

  1.   1
  2.   Abstract
  3. 1Usage Notes and Advisories Matrices
  4. 2Silicon Revision 1.0 Usage Notes and Advisories
    1. 2.1 Silicon Revision 1.0 Usage Notes
      1.      i2324
    2. 2.2 Silicon Revision 1.0 Advisories
      1.      i2189
      2.      i2310
      3.      i2311
      4.      i2345
      5.      i2351
      6.      i2352
      7.      i2353
      8.      i2354
      9.      i2356
      10.      i2357
      11.      i2358
      12.      i2359
      13.      i2374
      14.      i2383
      15.      i2411
      16.      i2412
      17.      i2427
      18.      i2428
      19.      i2433
      20.      i2439
      21.      i2440
  5. 3Trademarks
  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