Résultats empiriques!
Bien que les autres réponses soient réfléchies et bien motivées, elles sont toutes incomplètes ou simplement des conjectures. Lorsque la documentation est ambiguë, nous devons expérimenter et tester chaque cas.
Cette question mérite une réponse concluante, alors sortons un AVR et commençons à régler quelques bits!
Procédure
Pour tester, j'ai fait un petit programme Arduino (ATMEGA328P) qui serait ...
- configurer un ISR qui ne retournerait jamais (
while (1)
)
- assigné l'ISR à une source que je pouvais déclencher dans le logiciel (
INT0
en baisse)
- interruptions désactivées
- activé et déclenché l'interruption de sorte qu'il serait en attente
J'ai utilisé un banc d'essai qui allumait une LED dans l'instruction unique après l'activation des interruptions. En essayant différentes façons d'activer les interruptions dans le banc d'essai et de vérifier la LED, je pourrais dire si l'instruction après l'exécution de l'instruction d'activation a été exécutée ou non.
Si la LED ne s'est pas allumée, je sais que l'ISR a été exécuté (et verrouillé) immédiatement après l'activation des interruptions.
Si la LED s'est allumée, je sais que l'instruction suivante a été autorisée à s'exécuter avant l'appel de l'ISR.
Résultats
SEI
instruction (cas de base)
Code:
sei
Résultat: LED allumée. Instruction suivante exécutée.
OUT
instruction
Code:
in r16,0x3f // Get SREG
ori r16,128 // Set I bit
out 0x3f,r16 // Save back to SREG
Résultat:
Conduit sur. Instruction suivante exécutée.
ST
instruction
Code:
clr r29 // Clear Y high byte
ldi r28,0x5f // Set Y low byte to point to SREG
ld r16, Y // Get SREG
ori r16,128 // Set I bit
st Y,r16 // Put SREG
Résultat:
Conduit sur. Instruction suivante exécutée.
Conclusion!
Q: L'attente est-elle une caractéristique de l'instruction SEI ou du registre d'état?
R: Il semble que changer le I
bit en SREG
soit de a 0
à a 1
permettra à l'instruction suivante de s'exécuter ensuite même s'il y a une interruption en attente, quelle que soit l'instruction utilisée pour régler le bit.
Remarques
Cela s'est en fait transformé en une question très intéressante avec beaucoup de complications. Si vous êtes intéressé par les détails, consultez ...
http://wp.josh.com/2016/01/05/different-ways-to-set-i-bit-in-avr-sreg-besides-sei/