Sono ragionevolmente nuovo per le architetture ARM e sto cercando di avvolgere la mia mente attorno al meccanismo di sveglia.arm modalità sleep entry e exit difference WFE, WFI
Quindi, prima di tutto, trovo difficile trovare buone informazioni su questo. La documentazione di ARM sembra essere molto concisa sull'argomento.
Quello che vorrei capire è quando il Cortex (in particolare l'M0 come quello con cui sto lavorando) si sveglierà.
Per avere un riferimento, ho anche sentito il seguente:
- What is the purpose of WFI and WFE instructions and the event signals?
- Why does the processor enter standby when using WFE instruction but not when using WFI instruction?
La documentazione sulle istruzioni WFE sono:
3.7.11. WFE
Wait For Event.
Syntax
WFE
Operation
If the event register is 0, WFE suspends execution until
one of the following events occurs:
an exception, unless masked by the exception mask registers or the current
priority level
an exception enters the Pending state, if SEVONPEND in the
System Control Register is set
a Debug Entry request, if debug is enabled
an event signaled by a peripheral or another processor in a
multiprocessor system using the SEV instruction.
If the event register is 1, WFE clears it to 0 and completes immediately.
For more information see Power management.
Note
WFE is intended for power saving only. When writing software assume
that WFE might behave as NOP.
Restrictions
There are no restrictions.
Condition flags
This instruction does not change the flags.
Examples
WFE ; Wait for event
Il WFI:
3.7.12. WFI
Wait for Interrupt.
Syntax
WFI
Operation
WFI suspends execution until one of the following events occurs:
an exception
an interrupt becomes pending, which would preempt if PRIMASK was clear
a Debug Entry request, regardless of whether debug is enabled.
Note
WFI is intended for power saving only. When writing software assume
that WFI might behave as a NOP operation.
Restrictions
There are no restrictions.
Condition flags
This instruction does not change the flags.
Examples
WFI ; Wait for interrupt
Così, alcune domande:
1) In primo luogo, qualcuno può chiarire la differenza tra:
a) Sistema Handler priorità Registri
b) di interrupt di priorità Registri. È solo che b) sono per interrupt che non sono correlati al sistema come pendSv?
Ora per alcuni scenari. Davvero vorrei capire come gli scenari disciplinati dal: NVIC IRQ consentono NVIC attesa PRIMASK
influenzano l'entrata e l'uscita di WFE e WFI.
Quindi le varie combinazioni di questi bit producono 8 diversi scenari {abilitazione NVIC_IRQ, NVIC in sospeso, PRIMASK}.
Ho già aggiunto la mia vaga comprensione finora. Per favore aiutami con questo tavolo.
- 000 - No prevenzione del WFE o di entrata WFI, ma non svegliarsi condizione sia
- 001 - 000 come
- 010 - Come funziona attesa influisce entrata in modalità di sospensione per WFE e WFI?
- 011 - Credo che la risposta qui sia come 010 ma con condizioni di svegliamento potenzialmente diverse?
- 100 - Immagino che WFE e WFI entrino entrambi in modalità basso consumo e in uscita in modalità basso consumo senza problemi.
- 101 - Qualunque differenza tra l'uscita di alimentazione WFE e WFI qui?
- 110 - Non ne ho idea!
- 111 - Non ne ho idea!
Qui escludo le priorità perché non sono ancora troppo preoccupato per l'ordine di gestione delle eccezioni.
Escludendo SEV e i segnali di evento, WFE si comporta come WFI se SEVONPEND è 0?
Non riesco a capire completamente la tua domanda. Tuttavia, la documentazione ARM è piuttosto ** vaga ** perché spetta all'implementatore SOC collegare questi segnali a una logica diversa. Non penso che questo sia rilevante per il NVIC (conosco meglio il GIC) quindi forse qualcuno può rispondere direttamente alla tua domanda; tuttavia, è necessario consultare la documentazione del SOC per vedere se ha qualcosa su questo comportamento. Ad esempio, molti SOC hanno un registro che raffina ulteriormente ciò che accade su un 'WFI'; * mette in pausa solo CPU * a * tutti i clock disattivati ma DDR 32kHz autoaggiornamento *. –
Ad esempio su alcuni SOC, se un interrupt influenzerà un 'WFI' è configurato attraverso un registro separato che è specifico per SOC. Ad esempio un modulo UART può supportare la logica statica asincrona che rileverà un carattere in arrivo. È possibile configurarlo per riattivare dalle modalità di sospensione più profonde. Quindi i registri * NVIC * potrebbero non essere affatto coinvolti. C'è un segnale interno di tipo * WFI_WAKE * che il SOC si dirigerà verso il core. –
Grazie per questa informazione. Non ero a conoscenza di questi segnali extra. La mia domanda riguarda i significati dei bit di cui sopra. –