49.7.6 Asynchronous and Partial Wake-Up
This operating mode is a means of data preprocessing that qualifies an incoming event, thus allowing the SPI to decide whether or not to wake up the system. Asynchronous and partial wake-up is mainly used when the system is in ULP1 mode (refer to the section “Power Management Controller (PMC)” for further details). It can also be enabled when the system is fully running.
Asynchronous and partial wake-up can be used only when SPI is configured in Client mode (SPI_MR.MSTR is cleared).
The maximum SPI clock (SPCK) frequency that can be provided by the SPI host is bounded by the peripheral clock frequency. The SPCK frequency must be lower than or equal to the peripheral clock. The NSS line must be deasserted by the SPI host between two characters. The NSS deassertion duration time must be greater than or equal to six peripheral clock periods. The time between the assertion of NSS line (falling edge) and the first edge of the SPI clock must be higher than 5 μs.
SPI_RDR must be read before enabling the asynchronous and partial wake-up.
When asynchronous and partial wake-up is enabled for the SPI (refer to the section “Power Management Controller (PMC)”), the PMC decodes a clock request from the SPI. The request is generated as soon as there is a falling edge on the NSS line as this may indicate the beginning of a frame. If the system is in ULP1 mode (processor and peripheral clocks switched off), the PMC restarts the fast RC oscillator and provides the clock only to the SPI.
The SPI processes the received frame and compares the received character with SPI_CMPR.VAL1 and SPI_CMPR.VAL2 (see section SPI Comparison Register).
The SPI instructs the PMC to disable the peripheral clock if the received character value does not meet the conditions defined by SPI_CMPR.VAL1 and SPI_CMPR.VAL2 (see figure Asynchronous Event Generating Only Partial Wake-up).
If the received character value meets the conditions, the SPI instructs the PMC to exit the system from ULP1 mode (see figure Asynchronous Wake-up Use Case Example).
The VAL1 and VAL2 fields can be programmed to provide different comparison methods and thus matching conditions.
- If VAL1 = VAL2, then the comparison is performed on a single value and the wake-up is triggered if the received character equals VAL1.
- If VAL1 is strictly lower than VAL2, then any value between VAL1 and VAL2 wakes up the system.
- If VAL1 is strictly higher than VAL2, the wake-up is triggered if any received character equals VAL1 or VAL2.
- If VAL1 = 0 and VAL2 = 65535, the wake-up is triggered as soon as a character is received.
If the processor and peripherals are running, the SPI can be configured in Asynchronous and Partial Wake-up mode by enabling the PMC_SLPWK_ER (refer to the section “Power Management Controller (PMC)”). When activity is detected on the receive line, the SPI requests the clock from the PMC and the comparison is performed. If there is a comparison match, the SPI continues to request the clock. If there is no match, the clock is switched off for the SPI only, until a new activity is detected.
The CMPMODE configuration has no effect when Asynchronous and Partial Wake-up mode is enabled for the SPI (refer to PMC_SLPWK_ER in the section “Power Management Controller (PMC)”).
When the system is in Active mode and the SPI enters Asynchronous and Partial Wake-up mode, the flag RDRF must be programmed as the unique source of the SPI interrupt.
When the system exits ULP1 mode as the result of a matching condition, the RDRF flag is used to determine if the SPI is the source for the exit from ULP1 mode.