Емпіричні результати!
Хоча інші відповіді продумані та обґрунтовані, всі вони є неповними або просто вигадкою. Там, де документація неоднозначна, ми повинні експериментувати, і ми повинні перевірити кожен випадок.
Це запитання заслуговує на переконливу відповідь, тому давайте витягнемо AVR і почнемо встановлювати деякі біти!
Порядок
Для тестування я зробив невелику програму Arduino (ATMEGA328P), яка б ...
- встановити ISR, який ніколи не повернеться (
while (1)
)
- призначений ISR джерела я міг би викликати в програмному забезпеченні (
INT0
відбувається низький)
- інваліди перериває
- увімкнено і запустило переривання, щоб воно було очікуваним
Я використовував тестовий шар, який увімкне світлодіод в одній інструкції після вмикання переривань. Спробувавши різні способи вмикання переривань у тестовому стані та перевірки світлодіодного індикатора, я міг би сказати, чи була виконана інструкція після вказівки включення чи ні.
Якщо світлодіод не ввімкнув, то я знаю, що ISR виконується (і блокується) відразу після вмикання переривань.
Якщо світлодіодний індикатор увімкнувся, то я знаю, що наступну інструкцію було дозволено виконати до виклику ISR.
Результати
SEI
інструкція (базовий випадок)
Код:
sei
Результат: увімкнено світлодіод. Наступна інструкція виконана.
OUT
інструкція
Код:
in r16,0x3f // Get SREG
ori r16,128 // Set I bit
out 0x3f,r16 // Save back to SREG
Результат:
Світлодіод увімкнено. Наступна інструкція виконана.
ST
інструкція
Код:
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
Результат:
Світлодіод увімкнено. Наступна інструкція виконана.
Висновок!
Питання: Чи є функція очікування інструкцією SEI або реєстром статусу?
Відповідь: Здається, що зміна I
біта на " SREG
a" 0
на " 1
" дозволить наступній інструкції виконати наступну, навіть якщо є очікуване переривання, незалежно від того, яка інструкція використовується для встановлення біта.
Примітки
Це фактично перетворилося на дуже цікаве питання з безліччю ускладнень. Якщо вас цікавлять деталі, ознайомтесь ...
http://wp.josh.com/2016/01/05/different-ways-to-set-i-bit-in-avr-sreg-besides-sei/