English
Language : 

ST10F272Z2_08 Datasheet, PDF (129/189 Pages) STMicroelectronics – 16-bit MCU with 256 Kbyte Flash memory and 20 Kbyte RAM
ST10F272Z2
Known limitations
24.1
Injected conversion stalling the ADC
Description
Whenever a new injection request occurs before the ADDAT2 register has been read by the
CPU (that is, when the result of the previous injection request has not been read), the ADC
is stalled and no further conversions are performed.
Workaround
The following actions make it possible to unlock the ADC module:
1. Read the ADDAT2 register twice at the end of every injected conversion. This action
also prevents the ADC from being stalled).
2. Disable and then enable again the wait for read mode
Application conditions
This problem can occur if all the following conditions are fulfilled:
● Injection requests are hardware triggered (via CapCom CC31)
● The result of injected conversions is read via a PEC transfer. This prevents from
reading twice the ADDAT2 register by software)
● A high level task is disabling the PEC transfer for a long time (2 analog conversions +
time between 2 injection requests)
Therefore, to prevent the locking situation from occurring, it is important to make sure that,
at application level, no task can disable interrupts for a period of time during which 2
injection requests can occur before a read operation is performed.
Detailed analysis
Channel injection mode allows the conversion of a specific analog channel without changing
the current operating mode. It can also be used while the ADC is running in a continuous or
auto scan mode.
The following main points need to be highlighted:
● Wait for ADDAT read mode is needed in order for the ADC Channel Injection mode to
operate properly
● At the end of the injected conversion the data is available in the alternate result register
ADDAT2 and a Channel Injection Complete Interrupt request is generated (ADEIR
Flag)
● If the temporary data register used for ADDAT2 read mode is full, the next conversion
(standard or injected) is suspended. The temporary register then stores the content of
ADDAT (standard conversion) or ADDAT2 (from an injected conversion).
If the temporary data register used for ADDAT2 read mode is full and a new injection request
occurs then the new converted value is stored into a temporary data register until the
previous one is read from ADDAT2.
To ensure a correct operation as soon as ADDAT2 register is read, the last converted value
should be moved from temporary register to ADDAT2 and the ADEINT interrupt should be
requested. The last converted value can then be read by the CPU. See Figure 37.
In real circumstances, as soon as ADDAT2 register is read then the last converted value is
correctly moved from temporary register to ADDAT2 but the ADEINT interrupt request is not
received by the Interrupt Controller (see Figure 38). As a consequence, the CPU/PEC can
129/189