Resultados empíricos!
Enquanto as outras respostas são bem pensadas e bem fundamentadas, são todas incompletas ou apenas conjecturas. Onde a documentação é ambígua, devemos experimentar e testar todos os casos.
Esta pergunta merece uma resposta conclusiva, então vamos retirar um AVR e começar a definir alguns bits!
Procedimento
Para testar, fiz um pequeno programa do Arduino (ATMEGA328P) que ...
- configurar um ISR que nunca retornaria (
while (1)
)
- atribuiu o ISR a uma fonte que eu poderia acionar em software (
INT0
diminuindo)
- interrupções desabilitadas
- ativado e acionou a interrupção para que estivesse pendente
Eu usei um banco de testes que acenderia um LED na instrução única após as interrupções serem ativadas. Ao tentar diferentes maneiras de ativar interrupções no banco de testes e verificar o LED, eu poderia dizer se a instrução após a instrução de ativação foi executada ou não.
Se o LED não acender, sei que o ISR foi executado (e bloqueado) imediatamente após a ativação das interrupções.
Se o LED acender, sei que a próxima instrução foi executada antes da chamada do ISR.
Resultados
SEI
instrução (caso base)
Código:
sei
Resultado: LED aceso. Seguindo a instrução executada.
OUT
instrução
Código:
in r16,0x3f // Get SREG
ori r16,128 // Set I bit
out 0x3f,r16 // Save back to SREG
Resultado:
LED aceso. Seguindo a instrução executada.
ST
instrução
Código:
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
Resultado:
LED aceso. Seguindo a instrução executada.
Conclusão!
P: A espera é um recurso da instrução SEI ou do registro de status?
R: Parece que alterar o I
bit in SREG
de a 0
para a 1
permitirá que a seguinte instrução seja executada a seguir, mesmo que haja uma interrupção pendente, independentemente da instrução usada para definir o bit.
Notas
Isso realmente se transformou em uma pergunta muito interessante, com muitas complicações. Se você estiver interessado nos detalhes, confira ...
http://wp.josh.com/2016/01/05/different-ways-to-set-i-bit-in-avr-sreg-besides-sei/