व्यवधान सक्षम करें लेकिन ISR नहीं


10

मैं यह जानना चाहूंगा कि यदि कोई अवरोधक सक्षम होता है तो क्या होता है (उदाहरण के लिए: NXP के LPC1778 के CAN मॉड्यूल में आर्बिट्रेशन लॉस्ट इंटरप्ट), लेकिन व्यवधान के लिए कोई ISR परिभाषित नहीं किया गया है।

जब इस तरह का व्यवधान उत्पन्न होता है, तो मुझे पता है कि संबंधित व्यवधान ध्वज सेट हो जाएगा, लेकिन जब से मैंने किसी भी ISR को परिभाषित नहीं किया है, तो इस तरह के एक बाधा के लिए नियंत्रण हस्तांतरण के लिए संग्रहीत कोई भी वेक्टर वेक्टर पता नहीं होगा और इसलिए नियंत्रण वापस पास होगा मुख्य रूटीन के लिए, और मैं मुख्य रूटीन में मतदान को बाधित करने वाले ध्वज को रीसेट कर सकता हूं (यह वही है जो im सोच रहा है)। सीपीयू का पता लगाने के लिए कोई विलंब नहीं होगा जब सीपीयू यह पता लगाने के लिए कि क्या कोई आईएसआर है?

क्या हो सकता है पर कोई समाधान वास्तव में मेरी मदद कर सकता है।

धन्यवाद।

अपडेट करें:

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

B       .
ENDP

इसलिए, यदि आप इंटरप्ट का उपयोग कर रहे हैं, तो ISR का उपयोग करें।


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

उर ने कहा कि अगर मैं "बस मध्यस्थता खो जाने पर व्यवधान" सक्षम नहीं करता तो भी एक बस मध्यस्थता खोई हुई बाधा ध्वज को स्थापित किया जाएगा (हालाँकि कोई स्थिति रजिस्टर नहीं है जो संकेत दे सकता है कि बस मध्यस्थता अंतर स्थिति रजिस्टर को छोड़कर खो गई है)?
अल्फा गोकू

हाँ। मैंने जितने भी MCU के साथ काम किया है, जब भी जिस हालत में उन्हें सेट करना चाहिए, वहां इंटरप्ट फ्लैग सेट किए जाते हैं। बाधा को सक्षम करने से एमसीयू हैंडलर के लिए वेक्टर का कारण बनता है जब संबद्ध ध्वज सेट होता है और बाधित को अक्षम करने के कारण ध्वज को अनदेखा करता है और ध्वज सेट होने के बावजूद हैंडलर को वेक्टर नहीं । डिस / एन-एबलिंग में व्यवधान केवल जंप-टू-इंटरप्रेनर-हैंडलर व्यवहार को प्रभावित करता है, न कि फ्लैग-सेटिंग व्यवहार को।
ब्राह्मण

वाह। कुछ मुझे पता नहीं था। बहुत बहुत धन्यवाद। इसलिए हर ड्राइवर को समय-समय पर रुकावट की स्थिति के रजिस्टरों के लिए भी जांच करनी चाहिए और उन्हें फिर से सेट करना चाहिए, जबकि व्यवधान सक्षम नहीं किया गया है :)
AlphaGoku

@ अक्षयमनुएलडीडी केवल अगर यह मायने रखता है। यदि बाधा हमेशा अक्षम होती है, और ध्वज के बारे में और कुछ नहीं परवाह है, तो यह सेट है या साफ़ हो गया है, यह सारहीन है।
hobbs

जवाबों:


17

यदि कोई ISR परिभाषित नहीं है, तो इंटरप्ट वेक्टर में जंप इंस्ट्रक्शन का स्थान या तो अशक्त होगा, यह एक अपवाद रूटीन के लिए जंप हो सकता है, यह प्रोग्राम की शुरुआत में कूद सकता है, या इसमें "से वापसी" हो सकती है। व्यवधान "(उदाहरण RTI) निर्देश।

यहाँ ATMega 16 प्रोसेसर के लिए एक रुकावट तालिका का एक डिस्प्रेशन है, जो एक रूटीन के लिए तीन अप्रयुक्त व्यवधानों को दिखाती है जो ऐसे मामलों को संभालती है (यह सिर्फ एक अनंत लूप में जा सकता है), और एक वैध वेक्टर।

  28:   0c 94 47 00     jmp 0x8e    ; 0x8e <__bad_interrupt>
  2c:   0c 94 5c 00     jmp 0xb8    ; 0xb8 <__vector_11>   // <-- ISR
  30:   0c 94 47 00     jmp 0x8e    ; 0x8e <__bad_interrupt>
  34:   0c 94 47 00     jmp 0x8e    ; 0x8e <__bad_interrupt>

लापता ISR को संभालने के पहले वर्णित तरीकों में से कौन सा माइक्रोकंट्रोलर और कंपाइलर की वास्तुकला पर निर्भर करेगा। आरटीआई या समकक्ष निर्देश के मामले में, यह तुरंत आवेदन पर वापस आ जाएगा। हालाँकि अगर एज को ट्रिगर करने के बजाय स्तर-ट्रिगर किया जाता है, तो यह संभवतः अवरोध को फिर से ट्रिगर करने का कारण होगा, इसलिए आप एक अनंत लूप में समाप्त होते हैं।

मुझे लगता है कि यह चिप की वास्तुकला पर निर्भर हो सकता है कि क्या आंतरिक व्यवधान (उदाहरण के लिए एक UART द्वारा प्राप्त किया जा रहा चरित्र) को स्तर-ट्रिगर या एज-ट्रिगर माना जाता है। बाहरी व्यवधानों को आमतौर पर एक या दूसरे के रूप में कॉन्फ़िगर किया जा सकता है।

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

लेकिन किसी भी मामले में एक प्रणाली में कोई व्यवधान होना और कोई ISR परिभाषित नहीं होना बुरी बात है। यह मत करो।


2
...., या यह अपरिभाषित हो सकता है।
राउटर वैन ओइजेन

@WoutervanOoijen है कि मैं क्या कर रहा था जिसका मतलब है कि बाधित वेक्टर अशक्त है।
tcrosley

1
स्थिति रजिस्टर कुछ त्रुटियों को इंगित नहीं कर सकता है जैसे कि मैंने ऊपर उल्लेख किया है। लेकिन ऐसी त्रुटियों में रुकावट होती है। इसलिए मैंने केवल त्रुटि को पहचानने के लिए और किसी भी आईएसआर का उपयोग नहीं करने के लिए इंटरप्ट को सक्षम करने के बारे में सोचा। केल का उपयोग करते हुए LPC1778 का अनुकरण करते समय, मुझे कोई अपवाद नहीं मिला, इसलिए मुझे लगता है कि UC को RTI का उपयोग करना चाहिए जैसा कि यू ने उल्लेख किया है
AlphaGoku

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

1
पीआईओ एटीएसएएम 3 एक्स 8 ई पर बाधित होता है, जिसे किनारे से चालू किया जा सकता है, लेकिन एक बार सेट की गई रुकावट की स्थिति को तब तक मंजूरी नहीं दी जाएगी जब तक कि आप बाधा हैंडलर में आईएसआर (अवरोधक स्थिति रजिस्टर) को नहीं पढ़ते हैं - जिसके परिणामस्वरूप लूप @ मलबे का उल्लेख किया गया है।
साइमन राइट

1

यह आपके MCU, कंपाइलर और बाकी कोड पर निर्भर करता है।

मेरे अनुभव से:

  1. AVR - डिफ़ॉल्ट रूप से यदि आप ISR निर्दिष्ट नहीं करते हैं, तो फ़्लैश में इंटरप्ट वेक्टर 0x0000 होगा, जिसका अर्थ है कि जब भी यह व्यवधान होता है, आपका एप्लिकेशन रीसेट में कूद जाएगा।

    यदि आपको वास्तव में अवरोध की आवश्यकता है, लेकिन हैंडलर की आवश्यकता नहीं है (उदाहरण के लिए ADC कम-शोर पावर-डाउन मोड का उपयोग करें और केवल MCU को जगाने के लिए अवरोध का उपयोग करें) आपको EMPTY_INTERRUPT मैक्रो का उपयोग करना चाहिए

  2. NXP Kinetis (ARM) - डिफ़ॉल्ट रूप से सभी वैक्टर एक डिफॉल्ट हैंडलर के पास होता है, जिसमें एक ब्रेकपॉइंट होता है, सीपीयू बस रुक जाएगा और इसे आपके डिबगर को बताएगा।

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