STM8 मध्ये नेस्टेड इंटरप्ट्सवर प्रक्रिया करताना त्रुटी (इरेटामध्ये वर्णन केलेले नाही). व्यत्यय आणि विशेष प्रकरणे. व्यत्यय यंत्रणेची मुख्य कार्ये

iOS वर - iPhone, iPod touch 03.04.2019
iOS वर - iPhone, iPod touch

STM8 कुटुंब खूप आहे उपयुक्त संधीअशा परिस्थितीत ऊर्जा बचत जेथे जलद आणि वेळ-गंभीर प्रक्रिया इंटरप्ट्सद्वारे केली जाते आणि कमी-प्राधान्य कार्ये पार्श्वभूमी. हे GCR रजिस्टरमधील AL बिट आणि WFI मशीन सूचना वापरून केले जाते. तथापि, येथे एक खड्डा सापडला ज्याचे वर्णन केले गेले नाही चालू आवृत्तीक्रिस्टलवरील त्रुटी.

ही समस्या STM8L-Discovery बोर्डवर स्थापित stm8l152c6t6 क्रिस्टलवर आढळली.
मुख्य प्रक्रियेमध्ये, व्यत्ययांवर ऑपरेट करण्यासाठी TIM4 टाइमर सुरू करण्यात आला. त्यासाठी इंटरप्ट हँडलर जवळजवळ रिकामा आहे (चांगले, TIM4->SR1 रजिस्टरमध्ये TIM_SR1_UIF बिट रीसेट करण्याच्या प्रक्रियेचा अपवाद वगळता). पुढे, मुख्य प्रक्रियेत, EEPROM ला MASS अनलॉक करून लिहिण्याची परवानगी देण्यात आली आणि पूर्ण झाल्यावर IRQ तयार करून बाइट लेखन प्रक्रिया सुरू करण्यात आली. ज्यानंतर AL बिट GCR रजिस्टरमध्ये सेट केला गेला आणि WFI कमांड कार्यान्वित करण्यात आला.
इंटरप्ट हँडलरमध्ये, FLASH->IAPSR ची सामग्री वाचल्यानंतर EEPROM वर लिहिण्याचे ऑपरेशन पूर्ण झाल्यावर, RIM कमांड किंवा PUSH #val/POP CC संयोजन वापरून निष्पादित कोडची प्राथमिकता कमी केली जाते. त्या. इतर सर्व व्यत्यय EEPROM ISR मध्ये सक्षम आहेत. आणि खालील गोष्टींचा शोध लागला: जर EEPROM ISR ला दुसऱ्या व्यत्ययाने व्यत्यय आला असेल, तर नेस्टेड इंटरप्टमधून परत आल्यानंतर, EEPROM ISR प्रक्रियेची अंमलबजावणी थांबते (म्हणजे असे दिसते की CPU कोरमुख्य प्रक्रियेद्वारे अंमलात आणलेल्या WFI स्थितीत संक्रमण).
खालील अटी पूर्ण झाल्यासच ही त्रुटी दिसून येते:

  1. मुख्य प्रक्रियेमध्ये WFI कार्यान्वित करण्यापूर्वी, GCR रजिस्टरमधील AL बिट सेट केला होता
  2. EEPROM IRQ प्राधान्य डीफॉल्टवर सोडले जाते (म्हणजे ITC->ISPR1 रजिस्टरची सामग्री 0xFF आहे)

संभाव्य उपाय:

  1. मुख्य प्रक्रियेत, WFI सूचना अंमलात आणण्यापूर्वी, GCR मधील AL बिट साफ करा. शिवाय, प्रत्येक व्यत्ययानंतर, मुख्य प्रक्रिया पुन्हा सुरू होईल, ज्याचा उर्जेच्या वापरावर फारसा चांगला परिणाम होणार नाही.
  2. EEPROM ISR मध्ये प्राधान्य कमी करण्यापूर्वी (म्हणजे RIM किंवा PUSH #val/POP CC कमांडसाठी), GCR मधील AL बिट देखील साफ करा. पुन्हा, या प्रकरणात, EEPROM ISR पूर्ण झाल्यानंतर, मुख्य प्रक्रिया कार्यान्वित करणे सुरू राहील, ज्याचा वीज वापरावर फारसा चांगला परिणाम होणार नाही.
  3. ITC->ISPR1 रजिस्टरमध्ये EEPROM IRQ चा प्राधान्यक्रम बदला, उदाहरणार्थ त्यावर 0b11110111 मूल्य लिहून. सर्वात अगम्य गोष्ट म्हणजे यानंतर EEPROM ISR मधील RIM किंवा PUSH #val/POP CC कमांड सामान्यपणे कार्य करण्यास सुरवात करतात (म्हणजे, नेस्टेड इंटरप्टमधून परत आल्यानंतर, EEPROM ISR प्रक्रिया पुन्हा सुरू होते).

सज्जनो, ज्यांना इच्छा/संधी आहे, ते STM8/STM8L कुटुंबातील इतर स्फटिकांवर या बगचे पुनरुत्पादन करण्याचा प्रयत्न करा. कारण जर हा बग खरोखरच पुनरुत्पादक असेल, तर त्याचे निराकरण करण्यासाठी आम्हाला STM ला किक करणे आवश्यक आहे किंवा किमान ते इरेटा शीटमध्ये जोडणे आवश्यक आहे.

ST MCU सपोर्ट टीमकडून अधिकृत प्रतिसाद मिळाला:

समर्थकाने सुचवलेले उपाय - 5/4/2017 15:52:59:
- प्रिय ग्राहक,

जेव्हा इंटरप्ट प्राधान्य स्तर 0 (मुख्य) स्तरावर कॉन्फिगर करते, तेव्हा AL बिट सेटसह IRET कार्यान्वित करणारे इतर व्यत्यय, मागील कोडच्या खालील सूचनांच्या अंमलबजावणीऐवजी डिव्हाइसला WFI कडे परत ठेवू शकतात, कारण प्राधान्य स्तराचा परिणाम म्हणून आधी स्तर 0 ला सक्ती केली जाते.

मी इंटरप्ट रूटीनमध्ये RIM वापरण्यापेक्षा SW प्राधान्यक्रम वापरण्याची शिफारस करतो.

शुभेच्छा,
ST MCU सपोर्ट टीम

वॉचडॉग टाइमर.

बऱ्याचदा आजूबाजूच्या उपकरणांद्वारे निर्माण होणारा विद्युत आवाज मायक्रोकंट्रोलरला ओव्हरराइड करण्यास कारणीभूत ठरतो चुकीचा पत्ता, ज्यानंतर त्याचे वर्तन अप्रत्याशित होते (मायक्रोकंट्रोलर "वेडा होतो"). अशा परिस्थितींचे निरीक्षण करण्यासाठी, वॉचडॉग टाइमर बहुतेकदा मायक्रोकंट्रोलरमध्ये समाविष्ट केले जातात.

या उपकरणामुळे मायक्रोकंट्रोलरची सामग्री ठराविक कालावधीत (सामान्यत: दहापट मिलीसेकंद ते काही सेकंदांपर्यंत) अपडेट न केल्यास रीसेट होते. प्रोग्राम काउंटरच्या सामुग्रीतील बदल अनुरूप नसल्यास दिलेला कार्यक्रम, नंतर वॉचडॉग टाइमर बदल कमांड कार्यान्वित होणार नाही. या प्रकरणात, वॉचडॉग टाइमर मायक्रोकंट्रोलरला त्याच्या मूळ स्थितीवर सेट करून रीसेट करतो.

बरेच डेव्हलपर त्यांच्या ऍप्लिकेशन्समध्ये वॉचडॉग टाइमर वापरत नाहीत कारण त्यांना विजेच्या आवाजाच्या प्रभावाचा सामना करण्यासाठी त्यांचा वापर करण्याची आवश्यकता वाटत नाही, उदाहरणार्थ, फ्लायबॅक ट्रान्सफॉर्मरच्या जवळ किंवा इग्निशनच्या जवळ कॅथोड रे डिस्प्लेमध्ये मायक्रोकंट्रोलर ठेवताना कारमधील कॉइल्स. IN आधुनिक इलेक्ट्रॉनिक्सविद्युत व्यत्यय येण्याची शक्यता नाही, जरी ते काहीवेळा वर सूचीबद्ध केलेल्या परिस्थितींप्रमाणेच घडतात.

वापरण्यासाठी शिफारस केलेली नाही वॉचडॉग टाइमरमुखवटा घालण्यासाठी सॉफ्टवेअर समस्या. जरी हा टाइमर सॉफ्टवेअर त्रुटींची शक्यता कमी करू शकतो, परंतु त्रुटींची सर्व संभाव्य कारणे दूर करण्याची शक्यता नाही. प्रतिबंधाची अपेक्षा करण्याऐवजी सॉफ्टवेअर त्रुटीहार्डवेअर, अधिक कसून चाचणी करणे चांगले आहे सॉफ्टवेअरविविध परिस्थितींमध्ये.

बऱ्याच वापरकर्त्यांचा असा विश्वास आहे की इंटरप्ट हा हार्डवेअरचा एक भाग आहे जो एकटा सोडला जातो, कारण त्यांच्या वापरासाठी इंटरप्ट रूटीन डिझाइन करण्यासाठी प्रोसेसरचे उच्च ज्ञान आवश्यक असते. IN अन्यथाजेव्हा एखादा व्यत्यय येतो, तेव्हा सिस्टम “झोपते” किंवा “खोलते”. ही भावना सामान्यत: विकसकाला वैयक्तिक संगणकासाठी व्यत्ययांचा अनुभव घेतल्यानंतर दिसून येते, ज्यामध्ये अनेक वैशिष्ट्ये आहेत जी इंटरप्ट हँडलरच्या निर्मितीला गुंतागुंत करतात. यापैकी अनेक समस्या मायक्रोकंट्रोलर-आधारित हार्डवेअरमध्ये होत नाहीत. या उपकरणातील व्यत्ययांचा वापर लक्षणीयरीत्या त्याचा विकास आणि वापर सुलभ करू शकतो.

जर तुम्ही कधीही व्यत्ययांचा सामना केला नसेल, तर तुम्हाला एक प्रश्न असेल - ते काय आहेत? IN संगणक प्रणालीव्यत्यय म्हणजे एक विशेष दिनचर्या (ज्याला "इंटरप्ट हँडलर" किंवा "इंटरप्ट सर्व्हिस रूटीन" म्हणतात) लाँच करणे आहे ज्याला हार्डवेअर सिग्नलद्वारे कॉल केले जाते. या सबरूटिनच्या अंमलबजावणीदरम्यान, अंमलबजावणी वर्तमान कार्यक्रमथांबते "इंटरप्ट रिक्वेस्ट" हा शब्द वापरला जातो कारण काहीवेळा एखादा प्रोग्राम इंटरप्ट मान्य करण्यास नकार देतो आणि इंटरप्ट हँडलरला त्वरित कार्यान्वित करतो (आकृती 2.19).


संगणक प्रणालीतील व्यत्यय हे दैनंदिन जीवनातील व्यत्ययांसारखेच असतात. अशा व्यत्ययाचे उत्कृष्ट उदाहरण म्हणजे टेलिव्हिजन कार्यक्रम पाहताना टेलिफोन वाजणे. जेव्हा फोन वाजतो, तेव्हा तुमच्याकडे तीन पर्याय असतात. प्रथम कॉलकडे दुर्लक्ष करणे आहे. दुसरे म्हणजे कॉलला उत्तर देणे, परंतु आपण नंतर कॉल करू असे सांगा. तिसरे म्हणजे सर्व चालू घडामोडी बाजूला ठेवून कॉलला उत्तर देणे. संगणक प्रणालीमध्ये तीन समान प्रतिसाद आहेत जे बाह्य हार्डवेअर विनंतीला प्रतिसाद म्हणून वापरले जाऊ शकतात.

पहिला संभाव्य प्रतिसाद - "सध्याचे कार्य पूर्ण होईपर्यंत व्यत्ययाला प्रतिसाद देऊ नका" - व्यत्यय विनंतीची सेवा अक्षम (मास्किंग) करून अंमलात आणली जाते. कार्य पूर्ण झाल्यानंतर, दोनपैकी एक पर्याय शक्य आहे: मुखवटा रीसेट करणे आणि देखभाल सक्षम करणे, ज्यामुळे व्यत्यय हँडलरला कॉल करणे किंवा बिट्सच्या मूल्याचे विश्लेषण करणे ("पोलिंग"). इंटरप्ट विनंत्यांची पावती आणि इंटरप्ट हँडलरला कॉल न करता सेवा प्रोग्रामची थेट अंमलबजावणी दर्शविते. जेव्हा प्रदान करणे आवश्यक असते तेव्हा ही व्यत्यय हाताळणी पद्धत वापरली जाते निर्दिष्ट वेळमुख्य प्रोग्रामची अंमलबजावणी, कारण कोणताही व्यत्यय आवश्यक इंटरफेसच्या अंमलबजावणीमध्ये व्यत्यय आणू शकतो.

तांदूळ. 2.18 - व्यत्यय कार्यान्वित करणे.

व्यत्ययांचे दीर्घकालीन मास्किंग करण्याची शिफारस केलेली नाही, कारण या काळात अनेक व्यत्यय घटना ओव्हरलॅप होऊ शकतात आणि फक्त एक ओळखला जाईल. मास्किंगचा अनुज्ञेय कालावधी मायक्रोकंट्रोलरच्या विशिष्ट अनुप्रयोगावर, अशा घटनांचा प्रकार आणि वारंवारता यावर अवलंबून असतो. व्यत्ययांची विनंती करणाऱ्या इव्हेंटच्या किमान अपेक्षित कालावधीच्या अर्ध्यापेक्षा जास्त व्यत्यय अक्षम करण्याची शिफारस केलेली नाही.

इंटरप्ट हँडलर नेहमी खालील क्रियांचा क्रम प्रदान करतो:

2. इंटरप्ट कंट्रोलर आणि उपकरणे रीसेट करा ज्यामुळे विनंती झाली.

3. डेटावर प्रक्रिया करा.

4. संदर्भ नोंदणीची सामग्री पुनर्संचयित करा.

5. व्यत्यय आलेल्या प्रोग्रामवर परत या.

कॉन्टेक्स्ट रजिस्टर हे रजिस्टर्स असतात जे मुख्य प्रोग्रामची सध्याची अंमलबजावणी स्थिती निर्धारित करतात. सामान्यत: यामध्ये प्रोग्राम काउंटर, स्टेटस रजिस्टर आणि संचयकांचा समावेश होतो. इतर प्रोसेसर रजिस्टर्स, जसे की इंडेक्स रजिस्टर्स, व्यत्यय प्रक्रियेदरम्यान वापरल्या जाऊ शकतात, त्यामुळे त्यांची सामग्री देखील जतन करणे आवश्यक आहे. इतर सर्व रजिस्टर्स विशिष्ट मायक्रोकंट्रोलर आणि त्याच्या अनुप्रयोगासाठी विशिष्ट आहेत.

वर रीसेट केल्यानंतर प्रारंभिक अवस्थाव्यत्यय नियंत्रक स्वीकारण्यास तयार आहे पुढील विनंती, आणि व्यत्यय आणणारी उपकरणे योग्य कारणे उद्भवल्यास विनंती पाठविण्यास तयार असतात. नवीन व्यत्यय विनंती आल्यास, प्रोसेसरचे व्यत्यय मास्किंग रजिस्टर व्यत्ययावर प्रक्रिया होण्यापासून प्रतिबंधित करेल, परंतु व्यत्यय स्थिती रजिस्टर विनंती कॅप्चर करेल आणि सर्व्हिस होण्याची प्रतीक्षा करेल. वर्तमान व्यत्ययाची प्रक्रिया पूर्ण झाल्यानंतर, व्यत्यय मास्क रीसेट केला जाईल आणि नवीन प्राप्त झालेल्या विनंतीवर प्रक्रिया केली जाईल.

नेस्टेड इंटरप्ट्स काही प्रकारच्या मायक्रोकंट्रोलरवर लागू करणे कठीण आहे ज्यामध्ये स्टॅक नाही. या व्यत्ययांमुळे स्टॅक ओव्हरफ्लो समस्या देखील उद्भवू शकतात. ओव्हरफ्लो समस्या मायक्रोकंट्रोलर्ससाठी त्यांच्या डेटा मेमरी आणि स्टॅकच्या मर्यादित क्षमतेमुळे संबंधित आहे: नेस्टेड इंटरप्ट्सच्या क्रमामुळे परवानगीपेक्षा जास्त डेटा स्टॅकवर ढकलला जाऊ शकतो.

शेवटी, व्यत्ययावर प्रक्रिया केली जाते. दुसरे टीव्ही उदाहरण दर्शविते की आपण आवश्यक डेटा स्वीकारून व्यत्यय विनंतीस त्वरित प्रतिसाद देऊ शकता, जो वर्तमान कार्य सोडवल्यानंतर वापरला जाईल. मायक्रोकंट्रोलरमध्ये, मेमरी ॲरेमध्ये येणारा डेटा संचयित करून आणि नंतर मूळ प्रोग्रामची अंमलबजावणी पूर्ण झाल्यावर त्यावर प्रक्रिया करून याची अंमलबजावणी केली जाते. या प्रकारची सेवा आहे चांगली तडजोडव्यत्ययावर ताबडतोब पूर्ण प्रक्रिया करणे, ज्याला बराच वेळ लागू शकतो आणि व्यत्ययाकडे दुर्लक्ष करणे, ज्यामुळे व्यत्यय निर्माण झालेल्या घटनेची माहिती गमावली जाऊ शकते.

संदर्भ नोंदी पुनर्संचयित करणे आणि इंटरप्ट रिटर्न सूचना कार्यान्वित केल्याने प्रोसेसर व्यत्यय येण्यापूर्वी होता त्या स्थितीत परत येतो.

जेव्हा एखाद्या व्यत्ययावर प्रक्रिया केली जाते तेव्हा विविध रजिस्टरच्या सामग्रीचे काय होते ते पाहूया. इंटरप्टवर प्रक्रिया होण्यापूर्वी स्टेटस रजिस्टरची सामग्री प्रोग्राम काउंटरच्या सामग्रीसह स्वयंचलितपणे जतन केली जाते. हे मेमरीमध्ये साठवण्याची गरज दूर करते सॉफ्टवेअरफॉरवर्ड कमांड्स वापरून आणि नंतर परत येताना पुनर्संचयित करा मूळ कार्यक्रम. तथापि, हे स्वयंचलित बचतसर्व प्रकारच्या मायक्रोकंट्रोलरमध्ये लागू केले जात नाही, म्हणून व्यत्यय प्रक्रियेच्या संस्थेकडे विशेष लक्ष दिले पाहिजे.

इंटरप्ट हँडलर कार्यान्वित होण्यापूर्वी स्टेटस रजिस्टरमधील मजकूर जतन केला असेल, तर रिटर्न कमांड आपोआप रिस्टोअर करेल.

जर व्यत्यय सेवा चालू असताना इतर प्रोसेसर नोंदणीची सामग्री बदलत असेल, तर ते बदलापूर्वी मेमरीमध्ये संग्रहित केले जावे आणि मुख्य प्रोग्रामवर परत येण्यापूर्वी पुनर्संचयित केले जावे. स्थानिकीकरण करणे खूप कठीण असलेल्या अप्रत्याशित त्रुटी टाळण्यासाठी सर्व प्रोसेसर रजिस्टर जतन करणे सामान्य आहे.

इंटरप्ट हँडलरकडे जाताना प्रोग्राम काउंटरमध्ये जो पत्ता लोड केला जातो त्याला "इंटरप्ट वेक्टर" म्हणतात. वेक्टरचे अनेक प्रकार आहेत. मायक्रोकंट्रोलर सुरू झाल्यावर (रीसेट) प्रोग्राम काउंटरमध्ये जो पत्ता लोड केला जातो त्याला "रीसेट व्हेक्टर" म्हणतात. वेगवेगळ्या व्यत्ययांमध्ये भिन्न वेक्टर असू शकतात, ज्यामुळे व्यत्ययाचे कारण निश्चित करण्यासाठी देखभाल कार्यक्रमाची आवश्यकता दूर होते. मायक्रोकंट्रोलर चालवताना एका वेक्टरचा वापर वेगवेगळ्या इंटरप्ट्सद्वारे सहसा समस्या निर्माण करत नाही, कारण बहुतेकदा मायक्रोकंट्रोलर एकच प्रोग्राम कार्यान्वित करतो. हे मायक्रोकंट्रोलरला वैयक्तिक संगणकापासून वेगळे करते, ज्याच्या ऑपरेशन दरम्यान विविध व्यत्यय स्त्रोत जोडले जाऊ शकतात. (तुम्ही कधीही COM1 आणि COM3 पोर्टशी दोन उपकरणे जोडली असल्यास, तुम्हाला काय कल्पना आहे आम्ही बोलत आहोत). मायक्रोकंट्रोलरमध्ये जेथे हार्डवेअर सुप्रसिद्ध आहे, तेथे कोणतीही समस्या नसावी शेअरिंगव्यत्यय वेक्टर.

शेवटची गोष्ट विचारात घेणे बाकी आहे सॉफ्टवेअर व्यत्यय. प्रोसेसर सूचना आहेत ज्याचा वापर हार्डवेअर व्यत्ययांचे अनुकरण करण्यासाठी केला जाऊ शकतो. या सूचनांचा सर्वात स्पष्ट वापर म्हणजे अनियंत्रित मेमरी स्थानावर असलेल्या सिस्टम रूटीनला कॉल करणे किंवा त्यांना प्रवेश करण्यासाठी इंटरसेगमेंट जंप आवश्यक आहे. हे वैशिष्ट्य मायक्रोप्रोसेसरमध्ये लागू केले आहे इंटेल कुटुंब i86 आणि मध्ये वापरले जाते मूलभूत प्रणाली BIOS I/O(मूलभूत इनपुट/आउटपुट सिस्टम) आणि ऑपरेटिंग डॉस प्रणाली वैयक्तिक संगणकएंट्री पॉइंट निश्चित केल्याशिवाय सिस्टम रूटीन कॉल करण्यासाठी. त्याऐवजी, जेव्हा असा सॉफ्टवेअर व्यत्यय येतो तेव्हा अंमलात आणल्या जाणाऱ्या सूचना निवडण्यासाठी विविध व्यत्यय वेक्टर वापरले जातात.

कदाचित हा अध्याय वाचल्यानंतर व्यत्यय यंत्रणा तुमच्यासाठी अधिक स्पष्ट होईल किंवा त्याउलट. तुम्ही फक्त अधिक गोंधळात पडाल. प्रत्येक मायक्रोकंट्रोलरचे वर्णन केल्याप्रमाणे, इंटरप्ट्सचा वापर त्याचा वापर कसा सुलभ करू शकतो हे दाखवले जाईल.

3. व्यत्ययांची उदाहरणे

३.१. I/O पोर्ट्सवर सिग्नल बदलल्यावर व्यत्यय आणा (प्रोटीयसमधील उदाहरण)

३.२. बाह्य व्यत्यय INT (प्रोटीयस मधील उदाहरण)

सर्व प्रकारच्या dsPIC मायक्रोकंट्रोलरमध्ये समान व्यत्यय असतात. म्हणून, आपण प्रोटीयस प्रोग्राममधील व्यत्ययांचा सुरक्षितपणे अभ्यास करू शकता. अभ्यासासाठी आम्ही मायक्रोकंट्रोलर वापरू, जो PROTEUS मध्ये उपलब्ध आहे.

तर, dsPIC33FJ32GP204 मायक्रोकंट्रोलरमध्ये कोणत्या प्रकारचे व्यत्यय अस्तित्वात आहेत?

आणि मायक्रोकंट्रोलरमध्ये बरेच व्यत्यय आहेत. आणि या व्याख्यानात सर्वकाही सूचीबद्ध करण्यात काही अर्थ नाही. शेवटी, मायक्रोकंट्रोलर निवडताना आपण ज्या गोष्टीकडे लक्ष देतो ते म्हणजे त्यात कोणते मॉड्यूल आहेत आणि त्यानंतरच आपण त्यात कोणते व्यत्यय आहेत ते पाहू. आम्ही त्याच क्रमाने सर्व गोष्टींचा अभ्यास करू. आपण मायक्रोकंट्रोलरचा अभ्यास करत असताना, आपण विविध मॉड्यूल्सच्या व्यत्ययांचे विश्लेषण करू.

सर्वसाधारणपणे, आपल्याला हे माहित असणे आवश्यक आहे की मायक्रोकंट्रोलरसाठी इंटरप्ट वेक्टरची एक सारणी आहे, जी प्रोग्राम मेमरीमध्ये स्थित आहे. प्रत्येक व्यत्ययाचे स्वतःचे वेक्टर असते, म्हणजे विशिष्ट व्यत्यय दिनचर्या (ISR) च्या प्रारंभाचा पत्ता. पर्यायी व्यत्यय वेक्टर सारणी देखील आहे. एकल ALTINV बिट वापरून, तुम्ही इंटरप्ट रूटीनचा पत्ता कोणत्या टेबलवरून घ्यायचा ते निर्दिष्ट करू शकता. म्हणजेच मुख्य टेबलला पर्याय आहे. परंतु तुम्हाला हे लक्षात ठेवणे आवश्यक आहे की ALTINV बिट एकाच वेळी संपूर्ण टेबलसाठी वापरला जातो. आणि जर वैकल्पिक सारणी स्थापित केली असेल, तर व्यत्यय हाताळणी सबरूटीनचे पूर्णपणे सर्व पत्ते, मुख्य प्रोग्राम वैकल्पिक सारणीमधून घेतला जाईल. पर्यायी सारणी डीबगिंग मोडसाठी खूप उपयुक्त आहे, कारण ती तुम्हाला एकदा कंट्रोलरला प्रोग्राम लिहू देते आणि, उदाहरणार्थ, बटण वापरून, दोन प्रोग्राम अल्गोरिदममधून निवडा.

dsPIC ने व्यत्यय प्राधान्यक्रमांची श्रेणी विस्तृत केली आहे. जर PIC18 मध्ये त्यापैकी फक्त 2 असतील तर dsPIC मध्ये आधीच 8 स्तर आहेत. आणि जेव्हा मी संप्रेषणासाठी एक मॉड्यूल विकसित करत होतो GPRS चॅनेल, हे माझ्यासाठी खूप उपयुक्त होते, कारण मायक्रोकंट्रोलरने बोर्डवर उपलब्ध जवळजवळ सर्व पेरिफेरल्स वापरले होते आणि प्रक्रिया केलेल्या व्यत्ययांची संख्या सुमारे वीस होती.

तुम्हाला सर्वात महत्वाची गोष्ट माहित असणे आवश्यक आहे की प्रत्येक व्यत्ययासह कार्य करण्यासाठी, फक्त 3 मुख्य बिट्स (रजिस्टर) आहेत: इंटरप्ट सक्षम बिट, इंटरप्ट फ्लॅग आणि तीन इंटरप्ट प्राधान्य निवड बिट्स.

तर, इंटरप्टसह कार्य करण्यासाठी प्रोग्रामरला प्रोग्रामरकडून काय आवश्यक आहे:

1. त्याला विशिष्ट व्यत्यय सक्षम करणे आवश्यक आहे.

2. व्यत्यय आणणारी घटना घडल्यानंतर, संबंधित व्यत्यय ध्वज सेट केला जातो आणि प्रोग्राम, म्हणून बोलायचे झाल्यास, व्यत्यय वेक्टरच्या बाजूने हलतो. आणि जर आपण सामान्य भाषेत म्हटल्यास: नंतर व्यत्यय येताच, विशिष्ट व्यत्ययावर प्रक्रिया करण्यासाठी सबरूटीन त्वरित कॉल केला जाईल.

3. मुख्य गोष्ट म्हणजे इंटरप्ट सबरूटीनमध्ये या व्यत्ययाचा ध्वज रीसेट करणे विसरू नका.

dsPIC मायक्रोकंट्रोलरसाठी, C30 कंपाइलर इंटरप्ट हँडलिंग रूटीनचे वर्णन करण्यासाठी खालील नियम प्रदान करतो, उदाहरणार्थ INT1 इंटरप्टसाठी:

शून्य __ विशेषता__((__ व्यत्यय__)) _ INT1 व्यत्यय आणणे()

मुख्य गोष्ट ज्याकडे आपण लक्ष देणे आवश्यक आहे ते म्हणजे सबरूटीन शीर्षक मजकूराचा शेवट: _ INT1 व्यत्यय आणणे() - हे एकमेव पॅरामीटर आहे ज्यासाठी बदलणे आवश्यक आहे विविध प्रकारव्यत्यय आणतो व्यत्यय वेक्टर टेबलमधील प्रत्येक व्यत्ययाचे स्वतःचे पदनाम असते हे पॅरामीटर. आणि इथे तुम्हाला C30 कंपायलरसाठी मदत फाइल उघडावी लागेल, विशेषत: विभाग (माझ्याकडे हे आहे...) “dsPIC30F DSCs (SMPS) Interrupt Vectors” आणि कोणत्या इंटरप्टला कोणत्या पद्धतीने कॉल करायचे ते टेबल पहा. . मला असे वाटत नाही की या लेखात हे सारणी सादर करणे उचित आहे, कारण ज्याच्याकडे C30 कंपाइलर आहे त्याच्याकडे मदत फाइल जोडलेली असावी. hlpMPLABC30.chm(वैयक्तिकरित्या, मी यालाच म्हणतो). आणि ज्यांच्याकडे हे कंपाइलर नाही, त्यांना टेबल J ची गरज नाही. ठीक आहे, चला विषयांतर करूया...

तसे, जर तुम्ही इंटरप्ट फंक्शनचे वर्णन करण्याच्या तत्त्वांशी अधिक सखोल परिचित असाल, तर तुम्हाला auto_psv या विशेष विशेषताची उपस्थिती आढळेल. या पॅरामीटरचा उद्देश मायक्रोकंट्रोलरला निर्देश देण्याच्या उद्देशाने आहे की त्याने प्रक्रियेत व्यत्यय आणण्याआधी मुख्य रजिस्टर जतन करावे. मी असे गृहीत धरतो की तुम्हाला की रजिस्टर्स सेव्ह करण्याची गरज का आहे हे तुम्हाला माहीत आहे.

उदाहरणार्थ, व्यत्यय वर्णन असे दिसेल:

शून्य__विशेषता__((इंटरप्ट, ऑटो_पीएसव्ही)) _INT1इंटरप्ट()

वर मुख्य टेबलचा पत्ता वापरून सबरूटीन कॉल हेडरचे उदाहरण दिले आहे. आणि वैकल्पिक सारणीसाठी आपल्याला फक्त आवश्यक आहे बदलण्यायोग्य पॅरामीटरअधोरेखित केल्यानंतर घाला Alt, उदाहरणार्थ:

_ INT1 व्यत्यय आणणे() -> _ AltINT1 व्यत्यय आणणे()

मी या वस्तुस्थितीकडे तुमचे लक्ष वेधून घेऊ इच्छितो की जरी व्यत्यय सबरूटीन सबरूटीन सारखा दिसत असला, तरी तो घोषित करण्याची गरज नाही, जसे की मुख्य , हे कंपाइलरने आधीच घोषित केले असल्याने, तुम्हाला फक्त इंटरप्ट हँडलिंग सबरूटीनचे शीर्षलेख योग्यरित्या लिहावे लागेल.

चला प्राथमिक व्यत्ययांचा अभ्यास करून सुरुवात करूया, आणि नंतर प्रत्येक मॉड्यूलचा अभ्यास करत असताना, त्यातील अंतर्निहित व्यत्ययांशी आपण परिचित होऊ.

३.१. I/O पोर्टवर सिग्नल बदलते तेव्हा व्यत्यय (CN)

समजण्यासाठी सर्वात सोपा व्यत्ययांपैकी एक म्हणजे CN इनपुटवर स्टेट चेंज इंटरप्ट. dsPIC33FJ32GP204 मायक्रोकंट्रोलर अशा इनपुटने भरलेला आहे, त्यामुळे मला वाटते की हा नंबर कोणत्याही गरजा पूर्ण करेल. या चॅनेलवर (1 -> 0 किंवा 0 -> 1) कोणती स्थिती बदलते हे महत्त्वाचे नाही, हा बदल, सक्षम केल्यास, CNIF ध्वज सेट केला जाईल. जेव्हा सिग्नल बदलतो तेव्हा व्यत्यय सक्रिय करण्यासाठी, तुम्हाला पुढील गोष्टी करण्याची आवश्यकता आहे:

1. इनपुटसाठी आवश्यक CN चॅनेल कॉन्फिगर करा (TRISx रजिस्टर वापरून).

2. संबंधित CN इनपुटवर सिग्नल बदलांचे नियंत्रण सक्षम करा. यासाठी आधीपासून 2 रजिस्टर्स CNEN1 आणि CNEN2 आहेत. तुम्ही एकतर कॉन्फिगरेशनसाठी प्रत्येक रजिस्टरमध्ये संपूर्णपणे प्रवेश करू शकता किंवा संबंधित बिट्समध्ये प्रवेश करू शकता (उदाहरणार्थ, _CN15IE=1; _CN6IE=1;)

3. आवश्यक असल्यास, पुल-अप प्रतिरोधक चालू करा. यासाठी CNPU1 आणि CNPU2 असे दोन रजिस्टर्स देखील आहेत. हे स्वतंत्रपणे देखील शक्य आहे, उदाहरणार्थ _CN15PUE=1; _CN6PUE=1;

4. CN वर सिग्नल बदलल्यावर व्यत्यय सक्षम करा ( _ CNIE=1 )

5. आता, नियंत्रित CN पिनवरील सिग्नल बदलताच, _CNIF व्यत्यय ध्वज सेट केला जाईल. आणि प्रोग्राम इंटरप्ट हँडलिंग फंक्शनमध्ये प्रवेश करतो. जेव्हा CN वर सिग्नल बदलतो तेव्हा C30 कंपाइलरने व्यत्यय प्रदान केला आहे खालील वर्णनवैशिष्ट्ये:

शून्य __ विशेषता __((__ व्यत्यय __)) _ CNI व्यत्यय ()

येथे या व्यत्ययावर प्रक्रिया केली जाते (उदाहरण पहा)

6. इंटरप्ट हँडलिंग सबरूटीनमध्ये, इंटरप्ट फ्लॅग रीसेट करण्यास विसरू नका.

या प्रकारच्या व्यत्ययाशी परिचित होण्यासाठी, विचारात घ्या पुढील उदाहरण. एक मोटर आणि 4 सेन्सर आहेत. सर्वकाही व्यवस्थित असताना, इंजिन घड्याळाच्या उलट दिशेने फिरले पाहिजे. परंतु सेन्सरची स्थिती बदलताच (आणीबाणी मोड), इंजिन ताबडतोब फिरणे सुरू केले पाहिजे उलट बाजू(घड्याळाच्या दिशेने). आणि दिलेल्या कालावधीनंतर, पुन्हा घड्याळाच्या उलट दिशेने फिरण्यास सुरुवात करा.

कापणी यंत्रांवरही मेटल डिटेक्टर लागू केला जातो. जेव्हा, उदाहरणार्थ, कापलेले गवत मशीनमध्ये प्रवेश करते, ते सामान्य पद्धतीकाम. पण मेटल डिटेक्टरला एखादी धातूची वस्तू सापडताच ती लगेच उलटते आणि यंत्राला हानी पोहोचू नये म्हणून ही धातूची वस्तू थुंकते असे दिसते. आणि धातू एका विशेष सेन्सरद्वारे शोधला जातो, ज्यामध्ये अनेक स्वतंत्र चॅनेल असतात, परंतु एकामध्ये एकत्र केले जातात सामान्य साधन. आमच्या उदाहरणात, आम्ही अर्थातच, मेटल प्रेझेन्स सेन्सरऐवजी, आम्ही सामान्य बटणे वापरू;

PROTEUS मध्ये सर्किट एकत्र करणे

आता कार्य पूर्ण करण्यासाठी एक प्रोग्राम तयार करूया.

# समाविष्ट करा " p33 Fxxxx. h"

_ FOSCSEL(0 x02);

_ FOSC(0 xE2);

चार राज्य; // व्हेरिएबल मोटरच्या रोटेशनची दिशा साठवते

// "1" - आपत्कालीन मोड, "0" - सामान्य मोड

शून्य त्यात (शून्य);

शून्य त्यात (शून्य)

{ _ CN8 PUE=1; // इनपुट CN8 (RC0) वर पुल-अप रेझिस्टर चालू करा

_ CN10 PUE=1; // इनपुट CN10 (RC2) वर पुल-अप रेझिस्टर चालू करा

_ CN17 PUE=1; // इनपुट CN17 (RC7) वर पुल-अप रेझिस्टर चालू करा

_ CN19 PUE=1; // इनपुट CN19 (RC9) वर पुल-अप रेझिस्टर चालू करा

इ.स1 PCFGL=0 xffff;

PORTC=0; // पोर्ट सी आरंभ करा

LATC=0;

TRISC=0 xFFFF; // पोर्ट C इनपुट म्हणून सेट करा

PORTC=0 xFFFF;

पोर्टा=0; // पोर्ट ए आरंभ करा

लता=0;

TRISA=0; // सर्व आउटपुट आउटपुटवर सेट करा,

पोर्टा=0;

_ CN8 I.E.=1; // मध्ये सिग्नल बदलांचे नियंत्रण सक्षम करा

_ CN10 I.E.=1; // संबंधित आउटपुट

_ CN17 I.E.=1; // जर त्यांच्यावर सिग्नल बदलला तर

_ CN19 I.E.=1; // व्यत्यय ध्वज _CNIF सेट आहे

_ CNIE=1; // व्यत्यय INT1 सक्षम करा

शून्य __ विशेषता__((__ व्यत्यय__)) _ CNI व्यत्यय()

राज्य=1; // हा आपत्कालीन मोड आहे

_ CNIF=0; // सिग्नल बदलल्यावर व्यत्यय ध्वज रीसेट करा

शून्य मुख्य (शून्य)

{ स्थिर लांब int i;

त्यात();

राज्य=0; // आम्ही असे गृहीत धरतो की स्टार्टअपवर ऑपरेटिंग मोड सामान्य आहे

असताना(1) // लाँच अंतहीन चक्र

{ तर (राज्य) // आणीबाणी मोड असल्यास, नंतर

{ _ CNIE=0; // सिग्नल बदलल्यावर व्यत्यय अक्षम करा

_ आर.ए.8=0;

_ आर.ए.0=1; // आणीबाणी मोडमध्ये

च्या साठी(i=0; i<210000; i++) // विलंब प्रदान करा

राज्य=0; // सामान्य इंजिन ऑपरेशन सक्रिय करा

_ CNIE=1; // CN व्यत्यय सक्षम करा

{ _ आर.ए.8=1; // सामान्य मोडमध्ये

_ आर.ए.0=0; // इंजिनच्या रोटेशनची दिशा प्रदान करा

} // तर(१)

३.२. बाह्य व्यत्ययINT

बाह्य उपकरणांच्या क्रियांना त्वरित प्रतिसाद देण्यासाठी तुम्हाला तुमच्या मायक्रोकंट्रोलरची आवश्यकता असल्यास, INT व्यत्यय तुम्हाला आवश्यक आहे. dsPIC33FJ32GP204 मायक्रोकंट्रोलरमध्ये तीन INT चॅनेल आहेत (INT0, INT1, INT2). म्हणजेच, तुम्ही प्रत्येक तीन बाह्य उपकरणांसाठी तुमचा स्वतःचा व्यत्यय प्रदान करू शकता. हा व्यत्यय चांगला आहे कारण तो कंट्रोलरला स्लीप मोडमधून जागृत करू शकतो. याव्यतिरिक्त, तुम्हाला हे इनपुट सतत स्कॅन करण्याची आवश्यकता नाही, जे मायक्रोकंट्रोलर संसाधने वापरतील.

जेव्हा इनपुट सिग्नल “0” -> “1” किंवा “1” -> “0” बदलतो तेव्हा INT व्यत्यय येतो. हे बिटच्या स्थितीवर अवलंबून असते _INT1EP. तर _INT1EP=1, नंतर पडत्या काठावर; तर _INT1EP=0, नंतर अग्रभागी (उदाहरणार्थ _INT1EP=1 – INT0 व्यत्यय घसरणीच्या काठावर होतो).

प्राधान्याच्या दृष्टीने, INT0 व्यत्यय आहे सर्वोच्च प्राधान्य, आणि व्यत्यय सारणीमध्ये ते सर्वात पहिले आहे. खाली INT1 आणि INT2 व्यत्यय आहेत.

तत्वतः, या व्यत्ययाची ही सर्व वैशिष्ट्ये आहेत. बाकी सर्व काही इतर व्यत्ययांसाठी सारखेच आहे, म्हणजे तुम्हाला योग्य ते सक्षम करणे आवश्यक आहे बाह्य व्यत्यय. आणि जर व्यत्यय आला, तर तो संबंधित _INTхIF ध्वज सेट करेल (उदाहरणार्थ _INT1IF). ते रीसेट करण्यास विसरू नका. सर्वसाधारणपणे, सर्व काही शेलिंग पेअर्ससारखे सोपे आहे.

चला एका उदाहरणाकडे वळू

आम्ही जारी करतो इलेक्ट्रॉनिक कॉलअपार्टमेंट किंवा घराकडे. तुम्ही बटण दाबता तेव्हा, डिव्हाइस जारी केले पाहिजे ध्वनी सिग्नलआणि प्रकाशाने डोळे मिचकावा (ज्यांना मोठ्याने संगीत ऐकायला आवडते).

आम्ही PROTEUS मध्ये एक सर्किट काढत आहोत, मायक्रोकंट्रोलर व्यतिरिक्त, आम्हाला एक बटण, एक बीपर आणि एक एलईडी आवश्यक आहे.

मला वाटते की चित्रात सर्वकाही अगदी स्पष्ट आहे. चला कार्यक्रमाकडे वळू.

#समाविष्ट करा"p33Fxxxx.h"

// ऑसिलेटर ट्यूनिंग बिट्स (HS) सेट करा

_ FOSCSEL(0 x02);

_ FOSC(0 xE2);

चारराज्य;// "1" - कॉल सक्षम करा, "0" - कॉल अक्षम करा

शून्यinit(रिकामा);// आरंभिक दिनचर्या घोषित करा

// ** सबरूटीन इनिशिएलायझेशन **

शून्यinit(रिकामा)

( _CN4PUE=1;// इनपुट CN4 (RB0) वर पुल-अप रेझिस्टर चालू करा

AD1PCFGL=0xffff;// सर्व पिन डिजिटल I/O म्हणून

PORTB=0x00;// पोर्ट बी आरंभ करा

LATB=0;

TRISB=0x0001;// इनपुटवर RB0 आउटपुट सेट करा

PORTB=0x00;

// पोर्ट सी आरंभ करणे.

PORTC=0;

LATC=0;

TRISC=0;// सर्व पिन आउटपुट म्हणून सेट करा

PORTC=0;

RINR0=0x0000;// INT1 सिग्नल RP0 (RB0) पिनमधून काढण्यासाठी कॉन्फिगर केले आहे (हे

// कमांड सर्व dsPIC साठी नाही

_INT1EP=1;// INT1 व्यत्यय घसरणीच्या काठावर होतो

_INT1IE=1;// व्यत्यय INT1 सक्षम करा

// ******* व्यत्यय हाताळणी सबरूटीन *

शून्य __ विशेषता__((__ व्यत्यय__)) _ INT1 व्यत्यय आणणे()

राज्य=1; // कॉल सक्षम करणे आवश्यक आहे

_ INT1 तर=0; // इंटरप्ट फ्लॅग INT1 रीसेट करा

// **** कार्यक्रमासाठी प्रवेश बिंदू *

शून्य मुख्य (शून्य)

{ स्थिर लांब int i; // विलंब आयोजित करण्यासाठी व्हेरिएबल घोषित करा

त्यात();// इनिशिएलायझेशन सबरूटीनला कॉल करा

राज्य=0;// प्रथम कॉल बंद करणे आवश्यक आहे

तेव्हा(1)// अंतहीन लूप सुरू करा

(जर (राज्य)// जर स्थिती "1" असेल तर

( _RC0 = 1;// एलईडी लावा

_RC2=1;// बीपर चालू करा

साठी(i=0;i<160000;i++) // विलंब, एक विशिष्ट खेळण्याची वेळ सुनिश्चित करते

राज्य=0;// सूचित करा की बीपर बंद केला पाहिजे

इतर// अन्यथा, जर स्थिती "0" असेल तर

( _RC0=0;// LED बंद करा

_RC2=0;// बीप थांबवा

} // तर(१)

इंटरप्ट्स INT0 आणि INT2 सह समान कार्य करा. पुढील उदाहरणांमध्ये आपण या व्यत्ययांचा एकापेक्षा जास्त वेळा वापर करू.

येथे आपण महत्त्वाच्या विषयांवर चर्चा करू जसे की: व्यत्यय हाताळणी, व्यत्यय वेक्टर, सॉफ्टवेअर व्यत्यय, IRQ, सर्वसाधारणपणे, व्यत्ययांबद्दल बोलूया.

कल्पना व्यत्यय आणतो 50 च्या दशकाच्या मध्यात प्रस्तावित करण्यात आले होते आणि इंटरप्ट्स सादर करण्याचा मुख्य उद्देश सिंक्रोनस ऑपरेटिंग मोड लागू करणे आणि वैयक्तिक संगणक उपकरणांचे समांतर ऑपरेशन लागू करणे हा होता.

व्यत्यय आणतोआणि हाताळणीत व्यत्यय आणणेसंगणकाच्या प्रकारावर अवलंबून आहे, म्हणून त्यांची अंमलबजावणी ऑपरेटिंग सिस्टमच्या मशीन-आश्रित गुणधर्म म्हणून वर्गीकृत आहे.

व्यत्यय आणणे(इंटरप्ट) हा एक सिग्नल आहे ज्यामुळे संगणक प्रोसेसरद्वारे सूचनांच्या अंमलबजावणीचा सामान्य क्रम बदलतो.

अशा सिग्नलचा देखावा अशामुळे आहे घटना, कसे:

  • I/O ऑपरेशन्स पूर्ण करणे.
  • पूर्वनिर्धारित वेळेच्या अंतराची समाप्ती.
  • शून्याने विभाजित करण्याचा प्रयत्न.
  • हार्डवेअर अपयश इ.

हाताळणीत व्यत्यय आणा

प्रत्येक व्यत्ययाशी संबंधित क्रमांक असतो ज्याला म्हणतात व्यत्यय प्रकार क्रमांककिंवा फक्त व्यत्यय क्रमांक. प्रणाली कोणता व्यत्यय, कोणत्या क्रमांकासह आला हे ओळखू शकते आणि या क्रमांकाशी संबंधित इंटरप्ट प्रोसेसिंग प्रोग्राम लाँच करते. अशा प्रकारे, जेव्हा व्यत्यय सिग्नल प्राप्त होतो, तेव्हा नियंत्रण एक्झिक्युटिंग प्रोग्राममधून सिस्टमकडे आणि त्याद्वारे व्यत्यय हँडलरकडे हस्तांतरित करण्यास भाग पाडले जाते.

उदाहरणार्थ व्यत्ययक्रमांक 9 सह - एक कीबोर्ड व्यत्यय, जो की दाबल्यावर आणि सोडल्यावर व्युत्पन्न होतो. कीबोर्डवरून डेटा वाचण्यासाठी वापरला जातो. OS मध्ये म्हणून दर्शविले IRQ 1, कुठे IRQव्यत्यय पदनाम आहे, आणि 1 हे व्यत्यय प्राधान्य आहे. व्यत्यय विनंती डेटाचे विश्लेषण डिव्हाइस व्यवस्थापकामध्ये केले जाऊ शकते:

व्यत्यय हँडलर- एक व्यत्यय हाताळणी कार्यक्रम, जो OS चा भाग आहे, ज्या स्थितीमुळे व्यत्यय आला त्या स्थितीला प्रतिसाद म्हणून क्रिया करण्यासाठी डिझाइन केले आहे.

समजू की जेव्हा एखाद्या स्त्रोताकडून व्यत्यय सिग्नल येतो, तेव्हा प्रोग्राम A सोल्यूशनमध्ये असतो. परिणामी, नियंत्रण आपोआप इंटरप्ट हँडलरकडे हस्तांतरित केले जाते. प्रक्रिया पूर्ण झाल्यानंतर, नियंत्रण पुन्हा प्रोग्राम A मधील बिंदूवर हस्तांतरित केले जाऊ शकते जेथे त्याची अंमलबजावणी व्यत्यय आणली होती:

व्यत्यय वेक्टर

विविध व्यत्ययांशी संबंधित प्रोग्रामचे पत्ते एका टेबलमध्ये गोळा केले जातात ज्याला म्हणतात व्यत्यय वेक्टर सारणी.

मायक्रोप्रोसेसरला व्यत्यय सेवा दिनचर्याचे स्थान निर्धारित करण्यासाठी एक सोपा मार्ग आवश्यक आहे आणि हे वापरून पूर्ण केले जाते व्यत्यय वेक्टर सारण्या.

व्यत्यय वेक्टर सारणी RAM चा पहिला किलोबाइट व्यापतो - 0000:0000 ते 0000:03FF पर्यंतचे पत्ते. टेबलमध्ये 256 घटक आहेत - इंटरप्ट हँडलरचे FAR पत्ते. या घटकांना म्हणतात व्यत्यय वेक्टर. टेबल एलिमेंटच्या पहिल्या शब्दात ऑफसेट आहे आणि दुसऱ्या शब्दात इंटरप्ट हँडलर सेगमेंटचा पत्ता आहे. वेक्टर हे फक्त पूर्ण प्रोग्राम मेमरी ॲड्रेस आहेत (सेगमेंट केलेल्या स्वरूपात) जे इंटरप्ट आल्यावर सक्रिय केले जाणे आवश्यक आहे.

व्यत्यय क्रमांक 0 पत्ता 0000:0000 शी संबंधित आहे, व्यत्यय क्रमांक 1 पत्त्याशी 0000:0004, इ. या पत्त्यामध्ये 2-बाइट शब्दांची जोडी असते, त्यामुळे प्रत्येक वेक्टर चार बाइट व्यापतो.

जर तुम्ही डीबग प्रोग्राम वापरत असाल तर तुम्ही तुमच्या कॉम्प्युटरवर इंटरप्ट वेक्टर टेबल पाहू शकता. मेमरीच्या सुरूवातीची सामग्री मुद्रित करण्यासाठी D कमांड वापरा: D 0:0. DEBUG प्रोग्राम तुम्हाला पहिले 128 बाइट्स किंवा 32 वेक्टर दाखवेल, जे कदाचित यासारखे दिसतील:

0000:0000 E8 4E 9A 01 00 00 00 00-C3 E2 00 F0 00 00 00 00
0000:0010 F0 01 70 00 54 FF 00 F0-05 18 00 F0 05 18 00 F0
0000:0020 2C 08 51 17 D0 0A 51 17-AD 08 54 08 E8 05 01 2F
0000:0030 FA 05 01 2F 05 18 00 F0-57 EF 00 F0 F0 01 70 00
0000:0040 90 13 C7 13 4D F8 00 F0-41 F8 00 F0 3E 0A 51 17
0000:0050 5C 00 B7 25 59 F8 00 F0-E2 0A 51 17 9C 00 B7 25
0000:0060 00 00 00 F6 8E 00 DE 09-6E FE 00 F0 F2 00 7B 09
0000:0070 27 08 51 17 A4 F0 00 F0-22 05 00 00 00 00 00 F0

व्हेक्टर "रिव्हर्समधील शब्द" म्हणून संग्रहित केले जातात: प्रथम ऑफसेट आणि नंतर विभाग. उदाहरणार्थ, DEBUG ने वर दाखवलेले पहिले चार बाइट (E8 4E 9A 01) सेगमेंट केलेल्या पत्त्यावर 019A:4EE8 मध्ये रूपांतरित केले जाऊ शकतात.

मध्ये तुम्हाला तीन प्रकारचे पत्ते मिळू शकतात वेक्टर टेबल. हे ROM-BIOS कडे निर्देश करणारे पत्ते असू शकतात, जे सेगमेंट क्रमांकाच्या आधीच्या हेक्साडेसिमल अंक F द्वारे ओळखले जाऊ शकतात. हे मुख्य मेमरीकडे निर्देश करणारे पत्ते असू शकतात (उदाहरणार्थ: 019A:4EE8). हे पत्ते DOS दिनचर्या किंवा निवासी प्रोग्रामकडे निर्देश करू शकतात (जसे की SideKick किंवा Prokey), किंवा ते स्वतः DEBUG प्रोग्रामकडे निर्देश करू शकतात (कारण DEBUG ने तात्पुरते व्यत्यय नियंत्रित करणे आवश्यक आहे). जेव्हा या संख्येसह व्यत्यय सध्या प्रक्रिया केला जात नाही तेव्हा व्हेक्टरमध्ये फक्त शून्य असू शकतात.

हार्डवेअरची चाचणी घेतल्यानंतर आणि ऑपरेटिंग सिस्टीम लोड होण्याआधी आणि अंशतः ऑपरेटिंग सिस्टीम बूट झाल्यावर सारणीची सुरुवात BIOS द्वारे केली जाते.

खाली काही वेक्टरचा उद्देश आहे:

वर्णन
0 विभागणी त्रुटी. DIV किंवा IDIV कमांड कार्यान्वित केल्यानंतर आपोआप कॉल केला जातो जर विभाजनाचा परिणाम ओव्हरफ्लो झाला (उदाहरणार्थ, 0 ने भागाकार).
2 हार्डवेअर नॉन-मास्क करण्यायोग्य व्यत्यय. हा व्यत्यय वेगवेगळ्या मशीनवर वेगळ्या पद्धतीने वापरला जाऊ शकतो. सामान्यत: जेव्हा RAM मध्ये पॅरिटी त्रुटी असते आणि जेव्हा कॉप्रोसेसरकडून व्यत्ययाची विनंती केली जाते तेव्हा व्युत्पन्न होते.
5 स्क्रीन कॉपी प्रिंट करा. कीबोर्डवरील PrtScr की दाबून व्युत्पन्न होते. सामान्यत: स्क्रीन इमेज मुद्रित करण्यासाठी वापरली जाते.
8 IRQ0 - मध्यांतर टाइमर व्यत्यय, प्रति सेकंद 18.2 वेळा होतो.
9 IRQ1 - कीबोर्ड व्यत्यय. जेव्हा की दाबली जाते किंवा सोडली जाते तेव्हा व्युत्पन्न होते. कीबोर्डवरून डेटा वाचण्यासाठी वापरला जातो.
IRQ2 - AT क्लास मशीनमध्ये हार्डवेअर इंटरप्ट्स कॅस्केड करण्यासाठी वापरले जाते
बी IRQ3 - असिंक्रोनस पोर्ट COM2 मध्ये व्यत्यय.
सी IRQ4 - असिंक्रोनस पोर्ट COM1 मध्ये व्यत्यय.
डी IRQ5 - XT साठी हार्ड डिस्क कंट्रोलरमधून व्यत्यय.
IRQ6 - ऑपरेशन पूर्ण झाल्यानंतर फ्लॉपी डिस्क कंट्रोलरद्वारे एक व्यत्यय निर्माण केला जातो.
एफ IRQ7 - प्रिंटर व्यत्यय. जेव्हा प्रिंटर दुसरे ऑपरेशन करण्यास तयार असतो तेव्हा द्वारे व्युत्पन्न केले जाते. अनेक प्रिंटर अडॅप्टर हा व्यत्यय वापरत नाहीत.
10 व्हिडिओ ॲडॉप्टर देखभाल.
11 सिस्टममधील डिव्हाइसेसचे कॉन्फिगरेशन निश्चित करणे.
12 सिस्टममधील रॅमचा आकार निश्चित करणे.
13 डिस्क सिस्टम देखभाल.
14 मालिका I/O.
1A सेवा पहा.
1B इंटरप्ट हँडलर Ctrl-Break.
70 IRQ8 - रिअल टाइम घड्याळ व्यत्यय.
71 IRQ9 - EGA कंट्रोलरकडून व्यत्यय.
75 IRQ13 - मॅथ कॉप्रोसेसरमधून व्यत्यय.
76 IRQ14 - हार्ड डिस्क कंट्रोलरमधून व्यत्यय.
77 IRQ15 - राखीव.

IRQ0 - IRQ15 हे हार्डवेअर व्यत्यय आहेत.

व्यत्यय हाताळणी यंत्रणा

प्रत्येक व्यत्ययावर प्रक्रिया करताना, क्रियांचा खालील क्रम करणे आवश्यक आहे:

  • व्यत्यय विनंती समजणे: सिग्नल प्राप्त करणे आणि व्यत्यय ओळखणे.
  • व्यत्यय आणलेल्या प्रक्रियेची स्थिती लक्षात ठेवणे: प्रोग्राम काउंटरचे मूल्य (पुढील सूचनेचा पत्ता) आणि प्रोसेसर नोंदणीच्या सामग्रीद्वारे निर्धारित केले जाते.
  • इंटरप्टिंग प्रोग्राममध्ये नियंत्रणाचे हस्तांतरण (इंटरप्ट प्रोसेसिंग सबरूटीनचा प्रारंभिक पत्ता प्रोग्राम काउंटरमध्ये प्रविष्ट केला जातो आणि प्रोसेसर स्थिती शब्दातील माहिती संबंधित रजिस्टरमध्ये प्रविष्ट केली जाते).
  • हाताळणीत व्यत्यय आणा.
  • व्यत्यय आणलेली प्रक्रिया पुनर्संचयित करणे आणि व्यत्यय आलेल्या प्रोग्रामवर परत येणे.

व्यत्यय यंत्रणेची मुख्य कार्ये:

  1. व्यत्यय ओळख किंवा वर्गीकरण.
  2. त्यानुसार इंटरप्ट हँडलरकडे नियंत्रणाचे हस्तांतरण.
  3. व्यत्यय आलेल्या प्रोग्रामवर योग्य रिटर्न (इंटरप्ट हँडलरकडे नियंत्रण हस्तांतरित करण्यापूर्वी, प्रोसेसर रजिस्टरची सामग्री थेट ऍक्सेस मेमरीमध्ये किंवा सिस्टम स्टॅकवर संग्रहित केली जाते).

व्यत्ययांचे प्रकार

संगणक प्रणालीच्या ऑपरेशन दरम्यान येणारे व्यत्यय 4 गटांमध्ये विभागले जाऊ शकतात:

हार्डवेअर व्यत्ययभौतिक उपकरणांद्वारे कॉल केले जातात आणि प्रोग्रामच्या संबंधात असिंक्रोनसपणे उद्भवतात, उदा. सर्वसाधारणपणे, कार्यक्रम केव्हा आणि कोणत्या कारणास्तव व्यत्यय येईल हे सांगणे अशक्य आहे.

हार्डवेअर व्यत्यय सॉफ्टवेअरसह समन्वयित नाहीत. जेव्हा व्यत्यय कॉल केला जातो, तेव्हा प्रोसेसर जे करत आहे ते थांबवतो, व्यत्यय कार्यान्वित करतो आणि नंतर तो जिथे होता तिथे परत येतो.

बाह्य व्यत्ययकाही बाह्य उपकरणाच्या सिग्नलमधून उद्भवते, उदाहरणार्थ:

  • एक व्यत्यय जो सिस्टमला सूचित करतो की आवश्यक डिस्क सेक्टर आधीच वाचले गेले आहे आणि त्यातील सामग्री प्रोग्रामसाठी उपलब्ध आहे.
  • एक व्यत्यय जो सिस्टमला सूचित करतो की प्रिंटरने एक वर्ण मुद्रित करणे पूर्ण केले आहे आणि पुढील वर्ण जारी करणे आवश्यक आहे.
  • वीज बिघाडामुळे व्यत्यय.
  • काही I/O ऑपरेशनची सामान्य पूर्णता (कीबोर्डवरील की दाबणे).
  • टाइमर व्यत्यय.

टाइमर व्यत्ययमध्यांतर टाइमरने कॉल केला. या टाइमरमध्ये एक रजिस्टर आहे ज्याला विशेष विशेषाधिकार प्राप्त सूचना वापरून विशिष्ट प्रारंभिक मूल्य नियुक्त केले जाऊ शकते. या रजिस्टरचे मूल्य प्रत्येक मिलिसेकंदानंतर आपोआप 1 ने कमी होते. जेव्हा हे मूल्य शून्य होते, तेव्हा टाइमर व्यत्यय येतो. वापरकर्ता प्रोग्राम किती काळ मशीनच्या नियंत्रणाखाली राहू शकतो हे निर्धारित करण्यासाठी ऑपरेटिंग सिस्टमद्वारे यासारखे मध्यांतर टाइमर वापरले जाते.

मास्क करण्यायोग्य आणि नॉन-मास्क करण्यायोग्य बाह्य व्यत्यय

प्रोसेसर इनपुट सिग्नलमध्ये दोन विशेष बाह्य सिग्नल आहेत, ज्याद्वारे आपण वर्तमान प्रोग्रामच्या अंमलबजावणीमध्ये व्यत्यय आणू शकता आणि त्याद्वारे सेंट्रल प्रोसेसरचे ऑपरेशन स्विच करू शकता. हे संकेत आहेत NMI(नॉन मास्केबल इंटरप्ट, नॉन-मास्क करण्यायोग्य व्यत्यय) INTR(व्यत्यय विनंती, व्यत्यय विनंती).

त्यानुसार, बाह्य व्यत्यय दोन प्रकारांमध्ये विभागले गेले आहेत: नॉन-मास्क करण्यायोग्य आणि मास्क करण्यायोग्य.

बऱ्याचदा, प्रोग्राम्सचे गंभीर विभाग कार्यान्वित करताना, सूचनांचा एक विशिष्ट क्रम संपूर्णपणे अंमलात आणला जातो याची खात्री करण्यासाठी, व्यत्यय अक्षम करणे आवश्यक आहे (म्हणजे, सिस्टमला सर्व किंवा वैयक्तिक व्यत्ययांसाठी असंवेदनशील बनवा). हे CLI कमांड वापरून केले जाऊ शकते. हे निर्देशांच्या गंभीर क्रमाच्या सुरूवातीस ठेवलेले असणे आवश्यक आहे आणि शेवटी एक STI सूचना असणे आवश्यक आहे जी प्रोसेसरला व्यत्यय स्वीकारण्याची परवानगी देते. CLI कमांड केवळ मास्क करण्यायोग्य व्यत्यय अक्षम करते;

अशा प्रकारे, व्यत्यय सिग्नलच्या उपस्थितीमुळे चालू असलेल्या प्रोग्राममध्ये व्यत्यय येत नाही. प्रोसेसरमध्ये व्यत्ययांपासून संरक्षणाचे साधन असू शकते: व्यत्यय प्रणाली अक्षम करणे, वैयक्तिक व्यत्यय सिग्नल मास्क करणे (प्रतिबंधित करणे). मुखवटा न लावता येणारे व्यत्यय हे नॉन-मास्क करण्यायोग्य व्यत्यय आहेत.

अंतर्गत व्यत्ययप्रोसेसरच्या ऑपरेशनशी संबंधित असलेल्या घटनांमुळे होतात आणि त्याच्या ऑपरेशन्सशी समक्रमित असतात, म्हणजे, एक व्यत्यय येतो जेव्हा:

  • ॲड्रेसिंग उल्लंघनाच्या बाबतीत (एक निषिद्ध किंवा अस्तित्वात नसलेला पत्ता अंमलात आणलेल्या कमांडच्या पत्त्याच्या भागामध्ये दर्शविला जातो, व्हर्च्युअल मेमरी यंत्रणा आयोजित करताना गहाळ विभाग किंवा पृष्ठावर प्रवेश);
  • कोड फील्डमध्ये न वापरलेले बायनरी संयोजन असल्यास.
  • शून्याने भागल्यावर.
  • जेव्हा ऑर्डर ओव्हरफ्लो होते किंवा अदृश्य होते.
  • पॅरिटी त्रुटी शोधताना, विविध हार्डवेअर उपकरणांच्या ऑपरेशनमधील त्रुटी मॉनिटरिंगच्या माध्यमातून.

सॉफ्टवेअर व्यत्यय

प्रोग्राम स्वतः दिलेल्या संख्येसह व्यत्यय आणू शकतात. हे करण्यासाठी ते INT कमांड वापरतात. या आदेशासह, प्रोसेसर नियमित व्यत्ययांसह जवळजवळ समान क्रिया करतो, परंतु हे केवळ प्रोग्रामच्या अंदाजे बिंदूवर घडते - जिथे प्रोग्रामरने ही आज्ञा दिली आहे. म्हणून सॉफ्टवेअर व्यत्ययअसिंक्रोनस नसतात (जेव्हा तो इंटरप्ट कॉल करतो तेव्हा प्रोग्राम "माहित" असतो).

सॉफ्टवेअर व्यत्ययशाब्दिक अर्थाने, ते व्यत्यय नाहीत, कारण ते केवळ कॉलिंग प्रक्रियेचा एक विशिष्ट मार्ग आहेत - पत्त्याद्वारे नव्हे तर टेबलमधील नंबरद्वारे.

यंत्रणा सॉफ्टवेअर व्यत्ययविशेषतः यासाठी सादर केले गेले:

  1. सिस्टीम प्रोग्राम मॉड्यूल्सवर स्विच करणे हे फक्त सबरूटीनमध्ये संक्रमण म्हणून झाले नाही, परंतु नियमित व्यत्यय प्रमाणेच होते. हे सुनिश्चित करते की प्रोसेसर आपोआप विशेषाधिकार प्राप्त मोडमध्ये कोणत्याही आदेशांची अंमलबजावणी करण्याच्या क्षमतेसह स्विच करतो.
  2. सॉफ्टवेअर इंटरप्ट्सचा वापर मानक प्रक्रिया अंमलबजावणी निर्देशांच्या वापराच्या तुलनेत अधिक संक्षिप्त प्रोग्राम कोडकडे नेतो.

उदाहरण (सॉफ्टवेअर व्यत्यय):

  • वापरकर्ता मोडमध्ये विशेषाधिकार प्राप्त आदेश.
  • पत्ता श्रेणीबाहेर आहे.
  • मेमरी संरक्षणाचे उल्लंघन.
  • अंकगणित ओव्हरफ्लो, पृष्ठ गहाळ.
  • विभाग संरक्षणाचे उल्लंघन.
  • सेगमेंट सीमेपलीकडे जात आहे.

एक सरलीकृत आकृती विविध प्रकारचे व्यत्यय हाताळणेखालीलप्रमाणे प्रतिनिधित्व केले जाऊ शकते:

KP एक इंटरप्ट कंट्रोलर आहे, डिव्हाइस कंट्रोलर कनेक्ट करण्यासाठी अनेक स्तर (रेषा) आहेत (KU द्वारे आकृतीमध्ये दर्शविलेले). कॅस्केडमध्ये कंट्रोलर कनेक्ट करणे शक्य आहे, जेव्हा दुसरा इंटरप्ट कंट्रोलर त्याच्या इनपुटपैकी एकाशी जोडलेला असतो. CPU - केंद्रीय प्रक्रिया युनिट.

जेव्हा त्यांना सेवा देण्याची आवश्यकता असते तेव्हा संगणक उपकरणांद्वारे हार्डवेअर व्यत्यय निर्माण केला जातो. सॉफ्टवेअर इंटरप्ट्सच्या विपरीत, ज्याला ऍप्लिकेशन प्रोग्रामद्वारे शेड्यूल केले जाते, हार्डवेअर व्यत्यय नेहमी चालू असलेल्या प्रोग्रामच्या संदर्भात असिंक्रोनसपणे उद्भवतात. याव्यतिरिक्त, एकाच वेळी अनेक व्यत्यय येऊ शकतात. प्रक्रियेसाठी त्यापैकी एकाची निवड प्रत्येक प्रकारच्या व्यत्ययास नियुक्त केलेल्या प्राधान्यांच्या आधारे केली जाते.

प्रत्येक व्यत्ययाला एक अद्वितीय प्राधान्य दिले जाते. एकाच वेळी अनेक व्यत्यय येत असल्यास, सिस्टम उर्वरित व्यत्ययांची प्रक्रिया काही काळासाठी पुढे ढकलून सर्वोच्च प्राधान्य असलेल्याला प्राधान्य देते.

व्यत्यय सेवा कार्यक्रमात व्यत्यय येण्याच्या बाबतीत, आम्ही बोलतो नेस्टेड व्यत्यय. प्राधान्य स्तर IRQ0 - IRQ15 किंवा IRQ0 - IRQ23 (चिप अंमलबजावणीवर अवलंबून) संक्षिप्त आहेत.

दिवसाच्या वेळेत व्यत्यय आणण्याला जास्तीत जास्त प्राधान्य दिले जाते, कारण ते सतत गमावल्यास, सिस्टम घड्याळ चुकीचे असेल. जेव्हा की दाबली जाते किंवा सोडली जाते तेव्हा कीबोर्ड व्यत्यय ट्रिगर होतो; हे इव्हेंट्सची एक साखळी ट्रिगर करते जी सामान्यत: कीबोर्ड बफरमध्ये ठेवलेल्या की कोडसह समाप्त होते (जेथून ते सॉफ्टवेअर इंटरप्ट्सद्वारे पुनर्प्राप्त केले जाऊ शकते).

आणि शेवटी, व्यत्यय हाताळणी यंत्रणेची अंमलबजावणी

मशीनमध्ये, प्रत्येक व्यत्यय वर्गासाठी एक संबंधित आहे. कार्यक्षेत्रात व्यत्यय आणणे. उदाहरणार्थ, टाइमर व्यत्ययाशी संबंधित क्षेत्र आहे. जेव्हा टाइमर व्यत्यय येतो तेव्हा, सर्व रजिस्टर्सची सामग्री या भागात संग्रहित केली जाते (उदाहरणार्थ, पहिले काही शब्द वगळणे). नंतर, या गहाळ शब्दांमधून, पूर्वी तेथे प्रविष्ट केलेली मूल्ये काढली जातात, जी मशीनच्या कमांड्सच्या काउंटर (पॉइंटर) मध्ये आणि स्थिती शब्दात (किंवा ध्वज नोंदणीमध्ये) पुन्हा लिहिली जातात. मशीन हार्डवेअरद्वारे रजिस्टर्सचे लोडिंग आणि सेव्हिंग स्वयंचलितपणे केले जाते.

नवीन ॲड्रेस व्हॅल्यूसह प्रोग्राम काउंटर लोड केल्याने नियंत्रण आपोआप संबंधित निर्देशांकडे हस्तांतरित केले जाते. हा पत्ता, पूर्वी व्यत्यय कार्य क्षेत्रामध्ये संग्रहित केलेला, मानक टाइमर व्यत्यय दिनचर्याचा प्रारंभिक पत्ता आहे. स्टेटस शब्द लोड केल्याने प्रोसेसरच्या स्थितीत काही बदल होतात.

व्यत्यय विनंतीला प्रतिसाद म्हणून कोणतीही आवश्यक क्रिया अंमलात आणल्यानंतर, मानक व्यत्यय दिनचर्या प्रोसेसर स्टेट लोड कमांड कार्यान्वित करते, जे व्यत्यय आणलेल्या दिनचर्यामध्ये नियंत्रण हस्तांतरित करते. हे खालीलप्रमाणे होते: प्रोसेसर स्टेट लोड कमांडमुळे स्टेटस वर्ड, प्रोग्राम काउंटर आणि इतर रजिस्टर्सची साठवलेली सामग्री सेव्ह एरियाच्या संबंधित शब्दांमधून लोड केली जाते, कमांडमध्ये निर्दिष्ट केलेल्या पत्त्यापासून सुरू होते. हे नोंदणी सामग्री आणि प्रोसेसरची स्थिती पुनर्संचयित करते जे व्यत्ययाच्या वेळी होते. नियंत्रण नंतर अंमलबजावणीपूर्वी व्यत्यय आणलेल्या कमांडकडे हस्तांतरित केले जाते.

प्रोसेसर स्थिती आणि नोंदणी सामग्री जतन आणि पुनर्संचयित करणे म्हणतात संदर्भ स्विच ऑपरेशन.

बऱ्याच मशीन्समध्ये स्टेटस शब्द म्हणतात, ज्यामध्ये व्यत्यय हाताळण्यासाठी वापरण्यात येणारी काही माहिती असते. या शब्दाच्या घटकांपैकी एक (उदाहरणार्थ, प्रथम) एक चिन्ह आहे, प्रोसेसर कोणत्या मोडमध्ये आहे हे निर्धारित करणे: वापरकर्ता किंवा पर्यवेक्षक.

नियमित कार्यक्रम वापरकर्ता मोडमध्ये असतात (शून्य समान चिन्ह). जेव्हा एखादा व्यत्यय येतो, तेव्हा नवीन सामग्री लोड केलेल्या स्थिती शब्दाचा ध्वज 1 असतो, जो प्रोसेसरला आपोआप सुपरवायझर मोडमध्ये ठेवतो. या मोडमध्ये, विशेषाधिकार प्राप्त आज्ञा वापरणे शक्य होते. स्थिती शब्दाचे मूल्य जतन करण्यापूर्वी, दुसरा घटक (उदाहरणार्थ, दुसरा) व्यत्यय येण्याचे कारण दर्शविणाऱ्या मूल्यावर सेट केला जाईल:

  • सॉफ्टवेअर व्यत्यय ती कारणीभूत स्थितीचा प्रकार प्रदर्शित करते, जसे की शून्याने विभागणे.
  • जेव्हा I/O व्यत्यय येतो, तेव्हा व्यत्यय आणणारा चॅनेल क्रमांक रेकॉर्ड केला जातो.

तिसरा घटक प्रोसेसर सूचना कार्यान्वित करत आहे की निष्क्रिय आहे हे सूचित करतो. चौथ्या घटकामध्ये सध्या कार्यान्वित होणारा प्रोग्राम ओळखणारा पॉइंटर आहे. पाचव्या घटकामध्ये इंटरप्ट मास्क आहे, जो इंटरप्ट सक्षमीकरण (MASK फील्ड) नियंत्रित करण्यासाठी वापरला जातो.

हे फील्ड पहिल्यावर प्रक्रिया होईपर्यंत विशिष्ट प्रकारचे व्यत्यय येण्यापासून रोखण्यासाठी वापरले जाते. MASK मध्ये, प्रत्येक बिट एका विशिष्ट व्यत्यय वर्गाशी संबंधित आहे. जर बिट 1 वर सेट केले असेल, तर संबंधित वर्गाचे व्यत्यय सक्षम केले जातात, जर 0 वर सेट केले असेल, तर ते अक्षम केले जातात. नंतरच्या प्रकरणात ते म्हणतात की ते छद्म(त्यांना देखील म्हणतात प्रतिबंधीतकिंवा बंद). तथापि, मुखवटा घातलेले व्यत्यय गमावले जात नाहीत कारण ज्या सिग्नलमुळे व्यत्यय येतो तो हार्डवेअरद्वारे कायम ठेवला जातो. अशा प्रकारे तात्पुरत्या विलंब झालेल्या व्यत्ययाला म्हणतात पुढे ढकलले. जेव्हा (MASK साफ झाल्यामुळे) संबंधित वर्गाचे व्यत्यय पुन्हा सक्षम केले जातात, तेव्हा सिग्नल ओळखला जातो आणि व्यत्यय येतो.

इंटरप्ट मास्किंग ऑपरेटिंग सिस्टमच्या नियंत्रणाखाली असते आणि स्टेटस शब्दातील MASK मूल्यावर अवलंबून असते, जे प्रत्येक व्यत्ययाच्या कार्यक्षेत्रात आगाऊ संग्रहित केले जाते. सर्व MASK बिट्स शून्यावर सेट करून सर्व व्यत्यय अक्षम करणे शक्य आहे. प्रत्यक्षात असे करण्याची गरज नाही.

पीसी आर्किटेक्चरमध्ये, मूलभूत इनपुट/आउटपुट सिस्टम (BIOS) एक विशेष स्थान व्यापते. हे एकीकडे, हार्डवेअरचा अविभाज्य भाग म्हणून मानले जाऊ शकते, ही प्रणाली OS सॉफ्टवेअर मॉड्यूल्सपैकी एक आहे.

BSVV चे एक महत्त्वाचे कार्य म्हणजे सर्व्हिसिंग सिस्टम कॉल्स किंवा इंटरप्ट्स. सिस्टम कॉल विविध ऑपरेशन्स करण्यासाठी सॉफ्टवेअर किंवा हार्डवेअरद्वारे व्युत्पन्न केले जातात. व्यत्यय यंत्रणा सिस्टीम कॉल्सची अंमलबजावणी करण्यासाठी वापरली जाते. या यंत्रणेचा सार असा आहे की मशीनचे वर्तमान ऑपरेशन, ते काहीही असो, एका सिग्नलद्वारे थोड्या काळासाठी निलंबित केले जाऊ शकते, जे त्वरित प्रक्रियेची आवश्यकता असलेल्या परिस्थितीची घटना दर्शवते.

व्यत्यय आणणे - हे वर्तमान कमांडच्या अंमलबजावणीची समाप्ती किंवा विशेष प्रोग्रामद्वारे काही इव्हेंटच्या प्रक्रियेसाठी आदेशांचा वर्तमान क्रम आहे - व्यत्यय हाताळणारा,त्यानंतर व्यत्यय आलेल्या कार्यक्रमाच्या अंमलबजावणीकडे परत जा.

कार्यक्रमाच्या अंमलबजावणीदरम्यान उद्भवलेल्या विशिष्ट परिस्थितीमुळे किंवा बाह्य उपकरणाच्या सिग्नलमुळे ही घटना घडू शकते. प्रोग्रामच्या अंमलबजावणीदरम्यान आणि बाह्य उपकरणांसह परस्परसंवाद दरम्यान उद्भवलेल्या विशेष परिस्थितींवर त्वरित प्रतिक्रिया देण्यासाठी व्यत्यय वापरला जातो.

व्यत्यय आल्यावर, OS वाचवते प्रोसेसर स्थिती -मूल्ये आणि अर्थ नोंदवा प्रोग्राम काउंटर (पीसी)- व्यत्यय आलेल्या कमांडचे पत्ते . OS मधील व्यत्यय हँडलर कोणत्या प्रकारचा व्यत्यय आला आहे आणि ते हाताळण्यासाठी कोणत्या कृती कराव्यात हे ऑब्जेक्ट कोड विभागातील सामग्रीवरून निर्धारित करतो. व्यत्ययांच्या संभाव्य प्रकारांमध्ये, विविध त्रुटी रेकॉर्ड करण्याव्यतिरिक्त, देखील आहेत टाइमर व्यत्यय- ठराविक वेळेच्या स्लाइसनंतर नियतकालिक व्यत्यय, ज्यासाठी हेतू आहे डिव्हाइस मतदान- सर्व पोर्ट्स आणि बाह्य उपकरणांची स्थिती वेळोवेळी तपासण्यासाठी ऑपरेटिंग सिस्टमच्या क्रिया, जे कालांतराने बदलू शकतात: उदाहरणार्थ, फ्लॅश ड्राइव्ह यूएसबी पोर्टशी कनेक्ट केलेला होता; प्रिंटरने मुद्रण पूर्ण केले आणि ते विनामूल्य झाले, इ. OS सिस्टम रीकॉन्फिगरेशन करते आणि सिस्टम टेबल समायोजित करते जे डिव्हाइसबद्दल माहिती संग्रहित करते



व्यत्यय यंत्रणा योग्य संगणक हार्डवेअर आणि सॉफ्टवेअरद्वारे प्रदान केली जाते.

व्यत्यय आणणारा कोणताही अपवाद म्हणजे इंटरप्ट रिक्वेस्ट (IR) नावाचा सिग्नल असतो. बाह्य उपकरणांवरील व्यत्यय विनंत्या विशेष ओळींद्वारे प्रोसेसरमध्ये प्रवेश करतात आणि प्रोग्रामच्या अंमलबजावणीदरम्यान उद्भवलेल्या विनंत्या थेट मायक्रोप्रोसेसरमधून येतात. दोन्ही प्रकारचे व्यत्यय हाताळण्याची यंत्रणा समान आहेत. मुख्यतः हार्डवेअर इंटरप्ट्सच्या प्रक्रियेवर अवलंबून राहून इंटरप्ट रिक्वेस्ट सिग्नल दिसल्यावर संगणकाच्या कार्याचा विचार करूया (चित्र 13).

तांदूळ. 13. संगणकात व्यत्यय आणणे:

tр - व्यत्यय विनंतीसाठी प्रोसेसर प्रतिसाद वेळ;

tс - व्यत्यय आलेल्या प्रोग्रामची स्थिती जतन करण्याची आणि इंटरप्ट हँडलरला कॉल करण्याची वेळ;

tв हा व्यत्यय आलेल्या प्रोग्रामचा पुनर्प्राप्ती वेळ आहे.

व्यत्यय विनंती सिग्नल दिसल्यानंतर, संगणक प्रोग्राम कार्यान्वित करण्यासाठी पुढे जातो - इंटरप्ट हँडलर. हँडलर उद्भवलेल्या अपवादात्मक परिस्थितीच्या संदर्भात आवश्यक असलेल्या क्रिया करतो. उदाहरणार्थ, अशी परिस्थिती संगणकाच्या कीबोर्डवरील की दाबणे असू शकते. मग हँडलरने दाबलेल्या कीचा कोड कीबोर्ड कंट्रोलरकडून प्रोसेसरकडे पास केला पाहिजे आणि शक्यतो हा कोड पार्स केला पाहिजे. जेव्हा हँडलर त्याचे काम पूर्ण करतो, तेव्हा नियंत्रण व्यत्यय आलेल्या प्रोग्राममध्ये हस्तांतरित केले जाते.

प्रतिक्रिया वेळ- जर हा व्यत्यय सेवेसाठी सक्षम केला असेल तर व्यत्यय विनंती सिग्नल दिसणे आणि व्यत्यय आणणारा प्रोग्राम (इंटरप्ट हँडलर) कार्यान्वित होण्याच्या दरम्यानची ही वेळ आहे.

प्रतिसाद वेळ त्या क्षणावर अवलंबून असतो जेव्हा प्रोसेसर निर्धारित करतो की व्यत्यय विनंती आली आहे. इंटरप्ट विनंत्यांची पोलिंग कमांडचा पुढील टप्पा पूर्ण झाल्यानंतर (उदाहरणार्थ, कमांड वाचणे, पहिले ऑपरेंड वाचणे इ.) किंवा प्रोग्राममधील प्रत्येक कमांड पूर्ण केल्यानंतर केले जाऊ शकते.

व्यत्यय तीन गटांमध्ये विभागले जाऊ शकतात: हार्डवेअर, लॉजिकल आणि सॉफ्टवेअर.

स्रोत हार्डवेअर व्यत्यय - पुरवठा व्होल्टेजमध्ये घट, कीबोर्डवरील की दाबणे, टाइम काउंटरवरून पुढील पल्स येणे, फ्लॉपी किंवा हार्ड डिस्कवरील ड्राइव्हमधून विशेष सिग्नल येणे इ.

तार्किक, किंवा प्रोसेसर, व्यत्ययमुख्य मायक्रोप्रोसेसरच्या ऑपरेशनमध्ये विविध गैर-मानक परिस्थितींमध्ये उद्भवते - शून्याने विभागणे, नोंदणी ओव्हरफ्लो, "ब्रेकपॉईंट" चे स्वरूप इ.

सॉफ्टवेअर व्यत्यय- सर्वात विस्तृत श्रेणी. जेव्हा एका प्रोग्रामला दुसऱ्या प्रोग्रामकडून विशिष्ट सेवा प्राप्त करायची असते तेव्हा ते तयार केले जातात आणि ही सेवा सहसा हार्डवेअरच्या ऑपरेशनशी संबंधित असते.

प्रत्येक व्यत्ययाचा एक अनन्य क्रमांक असतो आणि उद्भवलेल्या परिस्थितीची सेवा करण्यासाठी डिझाइन केलेल्या विशिष्ट सबरूटीनशी संबंधित असू शकते. सर्व्हिस सबरूटीन स्वतः, सामान्यतः बोलणे, दुसर्या व्यत्ययाद्वारे देखील निलंबित केले जाऊ शकते; परंतु बऱ्याचदा नाही, सबरूटीन सर्व्हिसिंगच्या कालावधीत विशिष्ट व्यत्यय, इतर व्यत्यय "मुखवटा घातलेले" असतात, म्हणजेच ते त्वरित सर्व्ह केले जात नाहीत, परंतु रांगेत असतात.

मशीनच्या हार्डवेअर घटकांमध्ये, स्वतः DOS मध्ये आणि ऍप्लिकेशन प्रोग्राममध्ये, व्यत्यय निर्माण केले जाऊ शकतात ज्याची सेवा करणे आवश्यक आहे. BSVV ला निम्न-स्तरीय व्यत्ययांची सेवा करण्याचे काम सोपविण्यात आले आहे - ज्यांना हार्डवेअर घटकांचे थेट नियंत्रण आवश्यक आहे. हे व्यत्यय 0 ते 31 (हेक्स क्रमांक 0 - 1F) क्रमांकित आहेत. इतर व्यत्यय - क्रमांक 32 - 63 (हेक्स क्रमांक 20 - 3F) - उच्च स्तराशी संबंधित आहेत आणि त्यांची देखभाल इतर OS मॉड्यूल्सना नियुक्त केली आहे.

टेबलमध्ये 3 BSVV द्वारे सेवा केलेल्या व्यत्ययांची सामान्य सूची दर्शविते. रिअल असेंब्ली लँग्वेज प्रोग्राम्समध्ये आणि तांत्रिक OS साहित्यात, इंटरप्ट हेक्साडेसिमल कोडद्वारे ओळखले जातात. टेबलच्या विश्लेषणातून. 3 हे पाहिले जाऊ शकते की BSVM द्वारे सेवा केलेले व्यत्यय बाह्य उपकरणे - डिस्प्ले, कीबोर्ड, फ्लोट ड्राइव्ह, प्रिंटर, संप्रेषण चॅनेल नियंत्रित करण्यासाठी मूलभूत ऑपरेशन्सशी संबंधित आहेत. या प्रकरणात, BSVM मध्ये समाविष्ट केलेले सबरूटीन निम्न-स्तरीय ऑपरेशन्स करतात. उदाहरणार्थ, फ्लॉपी डिस्क ड्राइव्हच्या सर्व्हिसिंगमध्ये सुरुवातीला चुंबकीय हेड स्थापित करणे, डिव्हाइसची वर्तमान स्थिती तपासणे, निर्दिष्ट डिस्क क्षेत्रे थेट वाचणे आणि लिहिणे, वाचलेला किंवा लिखित डेटा सत्यापित करणे आणि शेवटी, डिस्कचे स्वरूप (प्रारंभिक लेआउट) समाविष्ट करणे समाविष्ट आहे.

तक्ता 3. BSVV द्वारे दिले जाणारे व्यत्यय

दशांश संख्या हेक्साडेसिमल संख्या
शुन्याने भागणे
मायक्रोप्रोसेसरला स्टेप मोडवर स्विच करत आहे
पुरवठा व्होल्टेज ड्रॉप
आदेश क्रमामध्ये ब्रेकपॉईंट दिसणे
अंकगणित युनिट रजिस्टर ओव्हरफ्लो
स्क्रीनची ग्राफिक प्रत मुद्रित करणे
राखीव
राखीव
वेळ काउंटर पासून सिग्नल - टाइमर
कीबोर्डवरील की दाबून सिग्नल
राखीव
दशांश संख्या हेक्साडेसिमल संख्या दिलेली परिस्थिती किंवा कार्य केले
IN राखीव
सह राखीव
डी राखीव
NMD सह एक्सचेंज समाप्तीबद्दल सिग्नल
एफ प्रिंटर सेवेसाठी राखीव
प्रदर्शन नियंत्रण
कनेक्ट केलेल्या उपकरणांच्या सूचीची विनंती करा
भौतिक मेमरी आकाराची चौकशी करत आहे
NMD व्यवस्थापन
कम्युनिकेशन अडॅप्टर व्यवस्थापन
टेप रेकॉर्डर आणि इतर उपकरणे नियंत्रित करणे
कीबोर्ड नियंत्रण
प्रिंटर व्यवस्थापन
रॉममध्ये तयार केलेल्या बेसिकमध्ये प्रवेश करणे
सिस्टम रीस्टार्ट करत आहे
1A वर्तमान वेळ आणि तारीख क्वेरी/सेट करा
1B
1C
1D डिस्प्ले इनिशिएलायझेशन पॅरामीटर टेबलचा पत्ता.
1E NGMD पॅरामीटर्स टेबलचा पत्ता
1F कोड 128-255 सह प्रतीक सारणीचा पत्ता

त्यापैकी काही टेबलमध्ये सूचीबद्ध आहेत. 3 व्यत्यय अनेक परस्परसंबंधित कार्यांमध्ये प्रवेश प्रदान करतात. प्रत्येक फंक्शन हेक्साडेसिमल नंबर (कोड) द्वारे ओळखले जाते आणि काही विशिष्ट ऑपरेशन करते.

म्हणून, उदाहरणार्थ, इंटरप्ट 19 (एनजीएमडी आणि एनएमडीचे नियंत्रण) 0-17 कोडसह 18 फंक्शन्समध्ये प्रवेश प्रदान करते:

0 - प्रारंभिक स्थापना (डिस्क रीसेट),

1 - वर्तमान डिस्क स्थिती प्रदर्शित करणे,

2 - एका ट्रॅकवरून सेक्टर्सचा गट (ब्लॉक) वाचणे,

3 - एका ट्रॅकवर सेक्टरचा समूह रेकॉर्ड करणे,

4 - वाचन किंवा लिहिल्यानंतर सत्यापन,

5 - ट्रॅक फॉरमॅटिंग (रेकॉर्डिंग सेक्टर मार्क्स),

8 - वर्तमान ड्राइव्ह पॅरामीटर्सचे प्रदर्शन,

9 - निश्चित डिस्क पॅरामीटर सारणीचे आरंभीकरण,

ए - "दीर्घ" वाचन,

बी - "लांब" रेकॉर्ड,

सी - इच्छित ट्रॅक शोधा,

डी - प्रारंभिक डिस्क स्थापना,

10 - डिस्कची तयारी तपासणे,

11 - डिस्क कॅलिब्रेशन,

14 - कंट्रोलर डायग्नोस्टिक्स,

15 - ड्राइव्ह प्रकाराचे प्रदर्शन,

16 - डिस्क स्थिती बदला,

17 - ड्राइव्ह प्रकार सेट करणे.

व्यत्यय खोली- एकमेकांना व्यत्यय आणू शकणाऱ्या प्रोग्रामची कमाल संख्या. व्यत्यय खोली सहसा व्यत्यय प्रणालीद्वारे ओळखल्या जाणाऱ्या प्राधान्य स्तरांच्या संख्येशी जुळते. इंटरप्ट सिस्टमचे ऑपरेशन वेगवेगळ्या इंटरप्ट डेप्थ (n) मध्ये अंजीर मध्ये दर्शविले आहे. 10. येथे असे गृहीत धरले जाते की इंटरप्ट रिक्वेस्ट नंबर जसजसा वाढत जातो, तसतसे त्याचे प्राधान्य वाढते.

तांदूळ. 14. वेगवेगळ्या व्यत्यय खोलीवर इंटरप्ट सिस्टमचे ऑपरेशन

जेव्हा एखादी व्यत्यय विनंती प्राप्त होते, तेव्हा संगणक कार्यान्वित होतो खालील क्रमक्रिया:

1) सर्वोच्च प्राधान्य अनमास्क केलेले व्यत्यय विनंतीचे निर्धारण (जर एकाच वेळी अनेक विनंत्या प्राप्त झाल्या असतील तर);

2) निवडलेल्या विनंतीचा प्रकार निश्चित करणे;

3) प्रोग्राम काउंटर आणि फ्लॅग रजिस्टरची सद्यस्थिती जतन करणे;

4) इंटरप्ट प्रकाराद्वारे इंटरप्ट हँडलरचा पत्ता निर्धारित करणे आणि या हँडलरच्या पहिल्या कमांडवर नियंत्रण हस्तांतरित करणे;

5) प्रोग्रामची अंमलबजावणी - इंटरप्ट हँडलर;

6) व्यत्यय आलेल्या प्रोग्रामच्या प्रोग्राम काउंटर आणि फ्लॅग रजिस्टरची जतन केलेली मूल्ये पुनर्संचयित करणे;

7) व्यत्यय आलेल्या प्रोग्रामची अंमलबजावणी सुरू ठेवणे.

जेव्हा एखादी व्यत्यय विनंती दिसते तेव्हा टप्पे 1-4 संगणक हार्डवेअरद्वारे स्वयंचलितपणे केले जातात. इंटरप्ट हँडलरच्या रिटर्न इंस्ट्रक्शनवर हार्डवेअरमध्ये स्टेज 6 देखील कार्यान्वित केला जातो.

इंटरप्ट वेक्टर टेबलद्वारे संबंधित इंटरप्ट हँडलरचे संक्रमण (मायक्रोप्रोसेसरच्या वास्तविक ऑपरेटिंग मोडमध्ये) केले जाते. हे सारणी RAM च्या सर्वात कमी पत्त्यांमध्ये स्थित आहे, त्याचे व्हॉल्यूम 1 KB आहे आणि त्यात कमांड सेगमेंट रजिस्टर (CS) आणि 256 इंटरप्ट हँडलर्ससाठी इंस्ट्रक्शन पॉइंटर (IP) ची मूल्ये आहेत.

व्यत्यय वेक्टर- इंटरप्ट हँडलरचा पत्ता असलेला मेमरी सेल.

इंटरप्ट वेक्टर्स इंटरप्ट वेक्टर टेबलमध्ये एकत्र केले जातात. टेबलचे स्थान मायक्रोप्रोसेसरच्या प्रकारावर आणि ऑपरेटिंग मोडवर अवलंबून असते.

व्यत्यय यंत्रणेची मुख्य कार्ये:

1. व्यत्यय ओळखणे किंवा वर्गीकरण.

2. इंटरप्ट हँडलरकडे नियंत्रणाचे हस्तांतरण.

3. व्यत्यय आलेल्या प्रोग्रामवर योग्य परतावा

व्यत्यय आलेल्या प्रोग्रामपासून हँडलर आणि बॅकमध्ये संक्रमण शक्य तितक्या लवकर केले पाहिजे. संगणकासाठी परवानगी असलेल्या सर्व व्यत्ययांची सूची आणि संबंधित हँडलर्सचे पत्ते असलेली टेबल वापरणे ही एक द्रुत पद्धत आहे. व्यत्यय आलेल्या प्रोग्रामवर योग्यरित्या परत येण्यासाठी, हँडलरकडे नियंत्रण हस्तांतरित करण्यापूर्वी, प्रोसेसर रजिस्टरची सामग्री थेट ऍक्सेस मेमरीमध्ये किंवा सिस्टम स्टॅकवर संग्रहित केली जाते.

व्यत्यय सिग्नल यादृच्छिक वेळी उद्भवत असल्याने, व्यत्ययाच्या वेळी अनेक व्यत्यय सिग्नल असू शकतात ज्यावर केवळ अनुक्रमे प्रक्रिया केली जाऊ शकते. व्यत्यय सिग्नलवर वाजवी क्रमाने प्रक्रिया करण्यासाठी, त्यांना प्राधान्य दिले जाते. कार्यक्रम, विशेष मास्क रजिस्टर्स व्यवस्थापित करून, तुम्हाला विविध सेवा शिस्त लागू करण्याची परवानगी देतात:

नेस्टेड व्यत्यय.

नेस्टेड इंटरप्ट्ससह, उच्च प्राधान्य पातळी असलेली व्यत्यय विनंती आल्यावर वर्तमान व्यत्यय दिनचर्यामध्ये व्यत्यय आणला जाऊ शकतो (विलंब) उच्च प्राधान्य पातळीसह व्यत्ययावर प्रक्रिया केल्यानंतर, प्रोसेसर व्यत्यय आणलेल्या प्रक्रियेकडे परत येतो आणि तो संपेपर्यंत किंवा नवीन व्यत्यय येईपर्यंत या व्यत्ययावर प्रक्रिया करणे सुरू ठेवतो. साहजिकच, उच्च प्राधान्य पातळीसह व्यत्यय सेवा दिनचर्यामध्ये आणखी उच्च प्राधान्य पातळीसह व्यत्यय आल्याने व्यत्यय येऊ शकतो, आणि असेच. या प्रकरणात, सध्याच्या तुलनेत कमी प्राधान्य स्तर असलेले व्यत्यय सहसा अक्षम केले जातात (मुखवटा घातलेले).



आम्ही वाचण्याची शिफारस करतो

वर