आईएसआर में कूदने के लिए नियंत्रक को कैसे पता चलता है?


12

मैं मुख्य स्तर पर चीजों के बारे में बात कर रहा हूं।

जहां तक ​​मैं समझता हूं, नियंत्रक कोर सिर्फ उन निर्देशों को निष्पादित करता है जो मेमोरी से प्राप्त किए जाते हैं (Fetch - Decode - Execute)। जब कोई इंटरप्ट आता है, तो कोर / ALU ISR में कूदने का फैसला कैसे करता है?

क्योंकि हम, या संकलक, रुकावट की स्थिति को प्रदूषित करने के लिए कोई निर्देश नहीं जोड़ते हैं - तो यह कैसे पता चलेगा कि एक व्यवधान की सेवा की आवश्यकता है?

जवाबों:


13

आप जो याद कर रहे हैं वह यह है कि कोर सिर्फ मेमोरी से प्राप्त किए गए ऑपकोड को निष्पादित करने से अधिक करता है। व्यवधानों को लागू करने के लिए इसमें विशिष्ट तर्क है।

जब इंटरप्ट डिटेक्शन हार्डवेयर सिग्नल को यह कहता है कि यह एक रुकावट लेने का समय है, तो आमतौर पर एक विशेष निर्देश को उस कोर में जाम कर दिया जाता है जिसे कभी मेमोरी से नहीं लाया गया था। ज्यादातर मामलों में यह रुकावट वेक्टर पते के लिए एक कॉल निर्देश है। यह कॉल स्टैक पर वर्तमान पीसी को बचाने के लिए मौजूदा अनुदेश निष्पादन तंत्र का उपयोग करता है, और इसे बाधित वेक्टर पते में बदल देता है। यह पूर्व-प्राप्त निर्देशों और पसंद को छोड़ने से भी संबंधित है।

विशेष रुकावट लेने वाले तर्क को भी इस तरह से व्यवधान को निष्क्रिय करना पड़ता है ताकि एक ही रुकावट की स्थिति अगले चक्र को बाधित वेक्टर पते के लिए एक और कॉल का कारण न बने। विभिन्न प्रोसेसरों के पास इसे संभालने के विभिन्न तरीके हैं। सबसे सरल है केवल ग्लोबली इंटरप्ट को अक्षम करना, जिससे सॉफ्टवेयर को बाधित सेवा दिनचर्या के अंत में उन्हें फिर से सक्षम करने की आवश्यकता होती है। अन्य प्रोसेसर में एक बाधा प्राथमिकता स्तर होता है। यह स्तर इतना ऊबड़ खाबड़ है कि उच्च प्राथमिकता की केवल रुकावट की स्थिति एक नई रुकावट का कारण बन सकती है। बाधा प्राथमिकता तो कुछ है जो स्वतः कॉल रिटर्न पते के साथ सहेजा जाता है, और कोड से बाधित होने पर वापस आ जाता है।


1
अक्सर, यह एक साधारण CALLनिर्देश नहीं है , क्योंकि व्यवधान को एक अलग तरीके से समाप्त किया जाता है (सीएफ RETबनाम RETI।)।
ग्लोगल

1
क्या मैं सुरक्षित रूप से यह मान सकता हूं कि जब इंटरप्ट डिटेक्शन हार्डवेयर सिग्नल का संकेत देता है, तो मेमोरी के बजाय, सीपीयू को कूदने के लिए कहीं और से निर्देश मिलता है ... जैसे एक स्विच हो सकता है ... जब स्विच बंद होता है, तो मेमोरी से निर्देश प्राप्त करें और जब स्विच चालू हो। , इस निर्देश को निष्पादित करें?
स्वानंद

3

आमतौर पर आधुनिक माइक्रोकंट्रोलर में एक समर्पित इंटरप्ट कंट्रोलर (आईसी) यूनिट होती है जो इंटरप्ट को मैनेज करने के लिए होती है। इसके अलावा प्रत्येक परिधीय घटक में एक रुकावट आउटपुट (एस) होता है जो कुछ स्थिति लागू होने 0पर 1(या इसके विपरीत) से जा रहा है (उदाहरण के लिए यह परिधीय कुछ काम पूरा करता है)। यह आउटपुट इंटरप्ट कंट्रोलर से जुड़ा होता है। Coreसीपीयू आईसी बता सकते हैं या तो इस विशिष्ट बाधा की अनदेखी करने (यह मुखौटा) या MCU सूचित करने के लिए जब भी यह विशिष्ट संकेतों को ट्रिगर से होता है, और फिर एमसीयू क्या इसके साथ क्या करने के लिए फैसला किया। एमसीयू को बताने के लिए सामान्य तरीका आईसी है जो बाधित हुआ और संबंधित हैंडलिंग कोड में कूद गया।


2

कंप्यूटर कोर में हार्डवेयर है जो प्रोग्राम काउंटर में एक नए मूल्य को जाम करता है जो उस विशेष रुकावट से मेल खाता है जिसे ट्रिगर किया गया है। यह याद रखने के लिए कि इंटरफेयर रूटीन पूरा होने के बाद वापस कहाँ आना है, प्रोग्राम काउंटर में मौजूदा वैल्यू को स्टैक में धकेला जाता है, इससे पहले कि प्रोग्राम काउंटर में इंटरप्ट एड्रेस जाम हो जाए। जब रुकावट दिनचर्या पूरी हो जाती है, तो प्रोग्राम काउंटर का मूल मूल्य स्टैक से वापस बहाल हो जाता है।

बाधित समय पर प्रोग्राम काउंटर में जाम करने का मान आमतौर पर दो योजनाओं में से एक द्वारा निर्धारित किया जाता है। एक दृष्टिकोण प्रोग्राम काउंटर और कंप्यूटर कोर में प्रत्येक बाधा प्रकार के लिए एक निश्चित पते को जाम कर देता है और फिर उस निश्चित स्थान से निष्पादित करना शुरू कर देता है। निश्चित स्थान पर स्थान अक्सर आकार में सीमित होता है, इसलिए निश्चित अवरोधों पर एक कूदने का निर्देश देना आम है जो वास्तविक अवरोधन स्थान पर जाते हैं। अन्य स्कीम में एक रुकावट वेक्टर तालिका नामक कुछ का उपयोग किया जाता है। यहाँ हार्डवेयर एक निश्चित पता उत्पन्न करता है जो इंटरप्ट प्रकार के आधार पर वेक्टर टेबल में ऑफसेट होता है। हार्डवेयर तब उस तालिका स्थान पर सामग्री को बाहर निकालता है और प्रोग्राम काउंटर में जाम करने के लिए एक पते के रूप में उस मूल्य का उपयोग करता है।


2

नियंत्रक के पास प्रोग्राम काउंटर के लिए एक रजिस्टर है जो उस पते का ट्रैक रखता है जहां अगले-से-निष्पादित निष्पादन को संग्रहीत किया जाता है। (यह रजिस्टर तब भी लिखा जाता है जब एक छलांग लगाई जाती है।)

नियंत्रक में एक रुकावट वेक्टर (या कभी-कभी एक से अधिक होता है, रुकावट के प्रकार पर निर्भर करता है), जो कि पता है जहां आईएसआर संग्रहीत है। यह पता हमेशा एक ही है - यह रीसेट वेक्टर की तरह है, जहां कार्यक्रम शुरू होता है।

(अक्सर, इस वेक्टर पर एक जंप इंस्ट्रक्शन होता है जो निष्पादित करने के लिए वास्तविक कोड पर कूदता है, क्योंकि वेक्टर में स्थान पूरी प्रक्रिया को संग्रहीत करने के लिए पर्याप्त नहीं है। हालांकि, महत्वपूर्ण बात यह है कि ISR हमेशा एक ही स्थित है। स्थान।)

जब कोई अवरोध उत्पन्न होता है, तो नियंत्रक में कुछ समर्पित हार्डवेयर होते हैं जो प्रोग्राम वेक्टर को इंटरप्ट वेक्टर से लिखते हैं। फिर, जब नियंत्रक अगले अनुदेश चक्र तक पहुंचता है, तो यह उस पते से निर्देश प्राप्त करता है जो प्रोग्राम काउंटर (इसलिए, इंटरप्ट वेक्टर) द्वारा इंगित किया गया है।

(नियंत्रक के एक निर्देश चक्र में इसके द्वारा किए जाने वाले अलग-अलग कार्य होते हैं: यह प्रोग्राम काउंटर द्वारा इंगित पते से अगला निर्देश प्राप्त करता है; यह प्रोग्राम काउंटर को बढ़ाता है; यह निर्देश को डिकोड करता है, और इसे निष्पादित करता है।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.