wfi

wfi

RISC-V असेंबली संदर्भ

lyszt.net wfi और अन्य RISC-V निर्देशों को अधिक विस्तार से कवर करता है।

विवरण

wfi किसी इंटरप्ट के आने तक प्रोग्राम को रोक देता है। ये अक्षर wait for interrupt के लिए हैं। जिस प्रोग्राम के पास करने को कुछ नहीं होता, वह लूप में निर्देशों को दोहराने के बजाय यहीं आइडल करता है। यह कोई ऑपरेंड नहीं लेता।

wfi

प्रोसेसर wfi पर रुक जाता है और तब फिर शुरू होता है जब कोई इंटरप्ट पेंडिंग हो और mie में उसका enable बिट सेट हो। इस सिम्युलेटर में ऐसा तब होता है जब कोई बटन दबाया जाता है और उस बटन का इंटरप्ट enabled हो। सिम्युलेटर waiting for interrupt स्थिति दिखाता है और उस दौरान कोई निर्देश निष्पादित नहीं करता।

आगे क्या होता है यह mstatus पर निर्भर करता है। अगर global interrupt enable बिट सेट है, तो प्रोसेसर जागते ही इंटरप्ट ले लेता है। ट्रैप wfi के बाद वाले निर्देश का पता mepc में लिखता है, हैंडलर चलता है, और mret wfi के बाद वाले निर्देश पर लौट आता है। अगर global enable बिट साफ़ है, तो प्रोसेसर जागता है और बिना हैंडलर चलाए wfi के बाद वाले निर्देश पर आगे बढ़ जाता है।

बटन दबाए जाने के बीच आइडल करने वाला प्रोग्राम mtvec, mie और mstatus कॉन्फ़िगर करता है, फिर लूप में wfi दोहराता है।

loop:
wfi
j loop

कोई इंटरप्ट enabled न होने पर, wfi हमेशा के लिए प्रतीक्षा करता है, इसलिए उस तक पहुँचने से पहले इंटरप्ट enable करें। csrs enable बिट्स को चालू करता है, और mret हैंडलर से लौटता है।

उदाहरण

csrsi mstatus, 8   # allow interrupts
wfi                # idles here until the button is pressed