The ADCxEXTMUX output follows two
possible timing schemes, depending on the setting of the EXTMUXPRESELECTEN bit in
the ADCCTL1 register:
- When EXTMUXPRESELECTEN is set to
0, the ADCxEXTMUX output changes at the beginning of the associated SOC's sample
and hold period. The applied external mux setting is maintained until the start
of the next SOC sample-and-hold period. This is the default configuration at
reset. Examples of SOC timings in this mode are shown in Figure 15-14 and Figure 15-16. When external mux preselect is disabled, make sure to configure the SOC
acquisition window duration to account for both external mux settling time and
internal channel settling time.
- When EXTMUXPRESELECTEN is set to
1, the ADCxEXTMUX output changes at least one SYSCLK cycle after the end of the
sample and hold period. At this point, the ADC sets the external mux selection
based on the next highest priority SOC that is pending. If no SOC is pending,
then the mux selection is based on the next highest priority SOC, based on the
current SOC priority scheme (see Section 15.5 for more information on
SOC priority schemes). Examples of SOC timings in this mode are shown in Figure 15-15 and Figure 15-17. Enabling preselect mode enables the application to avoid
increasing the acquisition window duration due to external mux switching and
settling delays.
Note: When EXTMUXPRESELECTEN is enabled,
setting SOC0 as high priority without actually triggering SOC0 conversions is a good
way to define an idle value for ADCxEXTMUX. SOC0 always has the highest priority
when no SOCs are pending, so the value of ADCSOC0CTL.EXTCHSEL is always pushed onto
the mux select pins by default.
In Figure 15-14, the ADC is configured as follows:
- SOC1 and SOC2 are triggered from ePWM1A;
- No high priority SOCs are defined.
The ADC performs the SOC operation sequence in the following order:
- The initial ePWM1A trigger arrives, setting the SOC1 and SOC2 to pending.
SOC1 gains priority, and the sample-and-hold period for SOC1 begins. The ADC
pushes the value of ADCSOC1CTL.EXTCHSEL onto the ADCxEXTMUX pins at the same
time when the SOC1 sample-and-hold begins.
- At the end of the sample-and-hold for SOC1, the conversion begins.
ADCxEXTMUX remains unchanged until the start of the next SOC sample-and-hold
period.
- In this example case, there are no asynchronous high priority triggers
defined, so SOC2 sample-and-hold starts as soon as SOC1 conversion ends. The
ADC pushes ADCSOC2CTL.EXTCHSEL onto the ADCxEXTMUX pins.
- At the end of the sample-and-hold for SOC2, there are no more pending SOCs.
SOC2 begins conversion, and ADCxEXTMUX is unchanged.
- The SOC2 conversion ends. There are no pending SOCs or triggers, so
ADCxEXTMUX remains unchanged.
In Figure 15-15, the ADC is configured as follows:
- SOC1 and SOC2 are triggered
from ePWM1A;
- No high priority SOCs are
defined.
The ADC performs the SOC operation sequence in the following order:
- The initial ePWM1A trigger
arrives, setting the SOC1 and SOC2 to pending. SOC1 gains priority, and the
sample-and-hold period for SOC1 begins. The ADC pushes the value of
ADCSOC1CTL.EXTCHSEL onto the ADCxEXTMUX pins at the same time when the SOC1
sample-and-hold begins.
- At the end of the sample-and-hold for SOC1, the highest priority SOC that is
pending is SOC2, so the ADC pushes the value of ADCSOC2CTL.EXTCHSEL onto the
ADCxEXTMUX pins.
- In this example case, there are no asynchronous high priority triggers
defined, so SOC2 sample-and-hold starts as soon as SOC1 conversion ends. The
ADC pushes ADCSOC2CTL.EXTCHSEL onto the ADCxEXTMUX pins again, but this is
already the current value so there is no change.
- At the end of the sample-and-hold
for SOC2, there are no more pending SOCs. SOC3 has the next highest priority
by way of the round-robin pointer, so the ADC pushes the value of
ADCSOC3CTL.EXTCHSEL onto ADCxEXTMUX. In this case, the application can set
ADCSOC3CTL.EXTCHSEL = ADCSOC1CTL.EXTCHSEL. Although SOC3 is not actually
used, this makes sure that the external mux channel is already preselected
when the next ePWM1 SOC arrives.
- The SOC2 conversion ends. There are no pending SOCs or triggers, so
ADCxEXTMUX remains unchanged.
In Figure 15-16, the ADC is configured as follows:
- SOC1 and SOC2 are triggered from
ePWM1A;
- SOC0 is triggered from CPUTIMER1,
and has a high priority.
With this configuration, the ADC
performs the SOC operation sequence in the following order:
- The initial ePWM1A trigger
arrives, setting the SOC1 and SOC2 flags to pending. SOC1 gains priority, and
the SOC1 sample-and-hold period begins. The ADC pushes the value of
ADCSOC1CTL.EXTCHSEL onto the ADCxEXTMUX pins at the same time when the SOC1
sample-and-hold begins.
- At the end of the sample-and-hold
for SOC1, the SOC1 conversion begins. ADCxEXTMUX remains unchanged until the
start of the next SOC sample-and-hold period.
- CPUTIMER1 issues a trigger
asynchronously, setting the SOC0 flag to pending.
- Since SOC0 has high priority,
SOC0 converts next instead of SOC2. The ADC pushes ADCSOC0CTL.EXTCHSEL onto
ADCxEXTMUX when the sample-and-hold period for SOC0 starts.
- At the end of the sample-and-hold
period for SOC0, the conversion for SOC0 begins. ADCxEXTMUX remains unchanged
until the start of the next SOC sample-and-hold period.
- At the end of the conversion for
SOC0, SOC2 is the next pending SOC. SOC2's sample-and-hold period begins, and
ADCSOC2CTL.EXTCHSEL is pushed onto the ADCxEXTMUX pins.
- The SOC2 conversion begins, and
there are no pending SOCs left. ADCxEXTMUX remains unchanged until a new SOC
trigger arrives.
In Figure 15-17, the ADC is configured as follows:
- SOC1 and SOC2 are triggered from ePWM1A;
- SOC0 is triggered from CPUTIMER1, and has a high priority.
With this configuration, the ADC performs the SOC operation sequence in the following
order:
- The initial ePWM1A trigger arrives, setting the SOC1 and SOC2 flags to pending.
SOC1 gains priority, and the SOC1 sample-and-hold period begins. The ADC pushes
the value of ADCSOC1CTL.EXTCHSEL onto the ADCxEXTMUX pins at the same time when
the SOC1 sample-and-hold begins.
- At the end of the sample-and-hold for SOC1, the highest priority SOC that is
pending is SOC2, so the ADC pushes the value of ADCSOC2CTL.EXTCHSEL onto the
ADCxEXTMUX pins.
- CPUTIMER1 issues a trigger asynchronously, setting the SOC0 flag to
pending.
- Since SOC0 has high priority, SOC0 converts next instead of SOC2. The ADC
overwrites the previous speculative external mux selection (ADCSOC2CTL.EXTCHSEL)
with ADCSOC0.EXTCHSEL when the sample-and-hold period for SOC0 starts. In
situations like this where asynchronous triggers are possible, make sure to set
the acquisition window size of the priority SOC large enough to allow for both
external mux settling and internal channel settling.
- At the end of the sample-and-hold period for SOC0, the highest priority SOC that
is pending is SOC2, so the ADC pushes EXTCHSEL value for SOC2 onto the
ADCxEXTMUX pins. SOC0 begins converting.
- At the end of the SOC0 conversion, SOC2 is the next highest-priority pending
SOC, and so SOC2's sample-and-hold period begins. The ADC again pushes
ADCSOC2CTL.EXTCHSEL onto the ADCxEXTMUX pins, but since this is already the
current value, the mux pins are unchanged.
- At the end of the sample-and-hold period for SOC2, there are no SOCs pending.
SOC0 has the next highest priority, since the ADC has been configured to give
SOC0 high priority. The ADC pushes ADCSOC0CTL.EXTCHSEL onto the ADCxEXTMUX
pins.