wfi
lyszt.net охоплює wfi та інші інструкції RISC-V більш детально.
Опис
wfi зупиняє програму до надходження переривання. Літери означають wait for interrupt (очікування переривання). Програма, якій нічого робити, простоює тут, а не крутиться в циклі, виконуючи інструкції. Вона не приймає операндів.
wfi
Процесор зупиняється на wfi і відновлює роботу, коли переривання очікує обробки та його біт дозволу в mie встановлено. У цьому симуляторі це відбувається, коли натиснуто кнопку і переривання кнопки увімкнено. Симулятор відображає стан очікування переривання і не виконує в цей час жодних інструкцій.
Що станеться далі, залежить від mstatus. Якщо глобальний біт дозволу переривань встановлено, процесор приймає переривання одразу після пробудження. Пастка записує адресу інструкції після wfi у mepc, запускається обробник, а mret повертає керування на інструкцію після wfi. Якщо глобальний біт дозволу скинуто, процесор прокидається і переходить до інструкції після wfi, не запускаючи обробник.
Програма, яка простоює між натисканнями кнопки, налаштовує mtvec, mie і mstatus, а потім повторює wfi в циклі.
loop: wfi j loop
Якщо жодне переривання не увімкнено, wfi чекає вічно, тому увімкніть переривання до досягнення цієї інструкції. csrs вмикає біти дозволу, а mret повертає керування з обробника.
Приклад
csrsi mstatus, 8 # allow interrupts wfi # idles here until the button is pressed
