- हमें क्यों बाधित करने की आवश्यकता है?
- MSP430 में रुकावट के प्रकार
- MSP430 में इंटरप्ट प्रोग्राम प्रोग्राम कंट्रोल
- MSP430 सर्किट GPIO इंटरप्ट टेस्ट करने के लिए
- InterPts के लिए प्रोग्रामिंग MSP430
- CCS से MSP430 में प्रोग्राम अपलोड करना
- MSP430 पर बाधित कार्यक्रम
एक साधारण डिजिटल घड़ी पर विचार करें, जिसे केवल आपको समय दिखाने के लिए प्रोग्राम किया गया है, अब कल्पना करें कि आप इसका समय क्षेत्र बदलना चाहते हैं। तुम क्या करोगे? आप बस एक बटन दबाते हैं जो मेनू में बदलता है जो आपको समय क्षेत्र बदलने में सक्षम बनाता है। यहाँ, सिस्टम आपके समय की प्रक्रियाओं को रखते हुए आपके बाहरी व्यवधान की भविष्यवाणी नहीं कर सकता है और आपको इंतजार करने के लिए नहीं कह सकता है क्योंकि यह आपकी घड़ी पर सेकंड के मूल्य को बढ़ाने में व्यस्त है। यह वह जगह है जहाँ व्यवधान काम आते हैं।
व्यवधानों को हमेशा बाहरी नहीं होना चाहिए; यह आंतरिक भी हो सकता है। एंबेडेड इंटरप्ट में अधिकांश बार सीपीयू के दो बाह्य उपकरणों के बीच संचार की सुविधा भी होती है। पूर्व-निर्धारित टाइमर पर विचार करें रीसेट किया जाता है और टाइमर रजिस्टर में मूल्य तक पहुंचने पर एक बाधा उत्पन्न होती है। बाधित हैंडलर का उपयोग डीएमए जैसी अन्य बाह्य उपकरणों को शुरू करने के लिए किया जा सकता है।
इस ट्यूटोरियल में, हमने अलग-अलग एल ई डी को टॉगल करने के लिए MSP430 पर बाहरी इंटरप्ट का उपयोग किया है । जब एक पुश-बटन का उपयोग करके राज्य के परिवर्तन द्वारा एक बाहरी रुकावट दी जाती है, तो नियंत्रण ISR को स्थानांतरित कर दिया जाता है और यह जरूरतमंदों को करता है। MSP430G2 लॉन्चपैड के लिए CCS पर्यावरण सेटअप जैसी मूल बातें जानने के लिए, इस लिंक का पालन करें MSP430 CCS का उपयोग करके शुरू करें क्योंकि हम इस ट्यूटोरियल में उसके विवरण में नहीं आएंगे। लिंक का अनुसरण करके Energia IDE और CCS का उपयोग करके अन्य MSP430 आधारित ट्यूटोरियल की जाँच करें।
हमें क्यों बाधित करने की आवश्यकता है?
एम्बेडेड सिस्टम में पोलिंग ओवरहेड को बचाने के लिए इंटरप्ट की आवश्यकता होती है। उन्हें तब कहा जाता है जब उच्च प्राथमिकता वाले कार्यों को वर्तमान में चल रहे कार्य को पूर्व-खाली करके निष्पादित करने की आवश्यकता होती है। इसका इस्तेमाल CPU को लो पावर मोड से भी जगाने के लिए किया जा सकता है। जब यह एक GPIO पोर्ट के माध्यम से बाहरी सिग्नल के किनारे संक्रमण से जागृत होता है, तो ISR निष्पादित होता है और CPU फिर से कम पावर मोड में वापस आ जाता है।
MSP430 में रुकावट के प्रकार
MSP430 में बीच में आता है निम्नलिखित प्रकार- के अंतर्गत आते हैं
- सिस्टम रीसेट
- नॉन-मास्केबल इंटरप्ट
- मास्केबल इंटरप्ट
- वेक्टर और गैर-वेक्टर इंटरप्ट
सिस्टम रीसेट:
यह आपूर्ति वोल्टेज (Vcc) के कारण हो सकता है और आरएसटी / एनएमआई पिन में रीसेट सिग्नल के साथ कम सिग्नल के कारण चयनित वॉचडॉग टाइमर अतिप्रवाह और सुरक्षा कुंजी उल्लंघन जैसे कारणों के कारण भी हो सकता है ।
नॉन-मास्केबल इंटरप्ट:
इन व्यवधानों को सीपीयू के निर्देशों द्वारा नकाबपोश नहीं किया जा सकता है। एक बार जब जनरल इंटरप्ट सक्षम हो जाता है, तो गैर-मुखौटा योग्य व्यवधान को प्रसंस्करण से नहीं हटाया जा सकता है। यह Oscillator दोष और RST / NMI (NMI मोड में) को मैन्युअल रूप से दिए गए किनारे जैसे स्रोतों से उत्पन्न होता है।
मास्केबल इंटरप्ट:
जब एक अवरोध उत्पन्न होता है और यदि इसे सीपीयू निर्देश द्वारा मास्क किया जा सकता है, तो यह मास्केबल इंटरप्ट है। उन्हें हमेशा बाहरी नहीं होना चाहिए। वे बाह्य उपकरणों और उनके कार्यों पर भी निर्भर करते हैं। यहां उपयोग किए जाने वाले बाहरी पोर्ट इंटरप्ट इस श्रेणी के अंतर्गत आते हैं।
वेक्टर बाधित और गैर-वेक्टर इंटरप्ट:
सदिश: इस मामले में, जो रुकावट वाले उपकरण हमें रुकावट वेक्टर पते को पास करके रुकावट के स्रोत के साथ प्रदान करते हैं। यहां ISR का पता तय है और नियंत्रण उस पते पर स्थानांतरित हो जाता है और ISR बाकी का ध्यान रखता है।
गैर-वेक्टरित: यहाँ सभी व्यवधानों में सामान्य ISR है। जब किसी नॉन-वेटर्ड स्रोत से कोई व्यवधान उत्पन्न होता है, तो नियंत्रण को सामान्य पते पर स्थानांतरित कर दिया जाता है, जिसमें सभी नॉन-वेट किए गए व्यवधान साझा होते हैं।
MSP430 में इंटरप्ट प्रोग्राम प्रोग्राम कंट्रोल
जब अवरोध उत्पन्न होता है, तो MCLK को चालू कर दिया जाता है और CPU को ऑफ स्थिति से वापस बुलाया जाता है। चूंकि कार्यक्रम का नियंत्रण व्यवधान की घटना के बाद ISR पते पर स्थानांतरित कर दिया जाता है, इसलिए प्रोग्राम काउंटर और स्टेटस रजिस्टर में मौजूद मानों को स्टैक पर ले जाया जाता है।
लगातार, स्थिति रजिस्टर साफ़ हो जाता है, जिससे GIE साफ़ हो जाता है और कम पावर मोड समाप्त हो जाता है । सर्वोच्च प्राथमिकता के साथ इंटरप्ट को प्रोग्राम काउंटर में इंटरप्ट वेक्टर पते को रखकर चयनित और निष्पादित किया जाता है। इससे पहले कि हम अपने MSP430 GPIO इंटरप्ट उदाहरण कोड पर जाएं, इसमें शामिल पोर्ट रजिस्टरों के काम को समझना महत्वपूर्ण है।
MSP430 पर GPIO नियंत्रण के लिए पोर्ट रजिस्टर:
PxDIR: यह एक पोर्ट दिशा नियंत्रण रजिस्टर है। यह प्रोग्रामर को विशेष रूप से 0 या 1. लिखकर अपने फ़ंक्शन का चयन करने की अनुमति देता है। यदि एक पिन 1 के रूप में चुना जाता है, तो यह आउटपुट के रूप में कार्य करता है। पोर्ट 1 को 8-बिट पोर्ट मानें, और यदि पिन 2 और 3 को आउटपुट पोर्ट के रूप में सौंपा जाना है, तो P1DIR रजिस्टर को 0x0C मान के साथ सेट करना होगा।
PxIN: यह एक रीड ओनली रजिस्टर है और पोर्ट में वर्तमान मान इस रजिस्टर का उपयोग करके पढ़ा जा सकता है।
PxOUT: इस विशेष रजिस्टर का उपयोग सीधे पोर्ट पर मान लिखने के लिए किया जा सकता है। यह तभी संभव है जब पुलअप / पुलडाउन रजिस्टर अक्षम हो।
PxREN: यह एक 8-बिट रजिस्टर है जिसका उपयोग पुलअप / पुलडाउन रजिस्टर को सक्षम या अक्षम करने के लिए किया जाता है। जब PxREN और PxOUT दोनों रजिस्टर में एक पिन को 1 के रूप में सेट किया जाता है, तो विशेष पिन को खींच लिया जाता है।
PxDIR |
PxREN |
PxOUT |
मैं / हे विन्यास |
० |
० |
एक्स |
रेसिस्टर्स के साथ इनपुट अक्षम |
० |
1 |
० |
आंतरिक pulldown सक्षम के साथ इनपुट |
० |
1 |
1 |
आंतरिक पुलअप के साथ इनपुट सक्षम |
1 |
एक्स |
एक्स |
आउटपुट - PxREN का कोई प्रभाव नहीं है |
PxSEL और PxSEL2: चूंकि MSP430 में सभी पिन मल्टीप्लेक्स हैं, इसलिए विशेष फ़ंक्शन को उपयोग करने से पहले चुना जाना है। जब PxSEL और PxSEL2 रजिस्टर दोनों को किसी विशेष पिन के लिए 0 के रूप में सेट किया जाता है, तो सामान्य उद्देश्य I / O का चयन किया जाता है। जब PxSEL को 1 के रूप में सेट किया जाता है, तो प्राथमिक परिधीय फ़ंक्शन का चयन किया जाता है, और इसी तरह।
PxIE: यह पोर्ट x में किसी विशेष पिन के लिए अवरोधन को सक्षम या बाधित करता है।
PxIES: यह उस किनारे का चयन करता है जिस पर एक बाधा उत्पन्न होती है। 0 के लिए, एक उभरते हुए किनारे का चयन किया जाता है और 1 के लिए, गिरने वाली धार का चयन किया जाता है।
MSP430 सर्किट GPIO इंटरप्ट टेस्ट करने के लिए
हमारे MSP430 इंटरप्ट उदाहरण कोड का परीक्षण करने के लिए उपयोग किया जाने वाला MSP430 सर्किट नीचे दिखाया गया है।
बोर्ड के ग्राउंड का उपयोग एलईडी और बटन दोनों को ग्राउंड करने के लिए किया जाता है। पुश बटन के तिरछे विपरीत पक्ष आम तौर पर खुले टर्मिनल होते हैं और पुश बटन के नीचे दबाए जाने पर कनेक्ट हो जाते हैं। एलईडी द्वारा उच्च वर्तमान खपत से बचने के लिए एलईडी से पहले एक अवरोधक जुड़ा हुआ है। आमतौर पर, 100ohm - 220ohm की सीमा में कम प्रतिरोधक का उपयोग किया जाता है।
पोर्ट इंटरप्ट की बेहतर समझ पाने के लिए हम 3 अलग-अलग कोड का उपयोग करते हैं। पहले दो कोड सर्किट आरेख के रूप में एक ही सर्किट का उपयोग करते हैं। आइए कोड में गोता लगाएँ। कनेक्शन किए जाने के बाद, मेरा सेट-अप इस तरह दिखता है।
InterPts के लिए प्रोग्रामिंग MSP430
पूरा MSP430 इंटरप्ट प्रोग्राम इस पृष्ठ के निचले भाग में पाया जा सकता है, कोड की व्याख्या निम्नानुसार है।
नीचे की रेखा वॉचडॉग टाइमर को ऑपरेशन से रोकती है । वॉचडॉग टाइमर आमतौर पर दो ऑपरेशन करता है। एक नियंत्रक को रीसेट करके नियंत्रक को अनंत छोरों से रोक रहा है और दूसरा यह है कि यह आवधिक टाइमर का उपयोग करके आवधिक घटनाओं को ट्रिगर करता है। जब एक माइक्रोकंट्रोलर को रीसेट किया जाता है (या संचालित होता है), तो यह टाइमर मोड में होता है और 32 मिलीसेकंड के बाद MCU को रीसेट करता है। यह लाइन नियंत्रक को ऐसा करने से रोकती है।
WDTCTL = WDTPW + WDTHOLD;
स्थापना P1DIR मूल्य के लिए रजिस्टर 0x07 सेट pin0, pin1, और आउटपुट के रूप में PIN2 की दिशा। P1OUT को 0x30 पर सेट करना पिन 4 और पिन 5 पर सक्षम आंतरिक पुलअप प्रतिरोधों के साथ एक इनपुट को कॉन्फ़िगर करता है। P1REN को 0x30 पर सेट करना इन पिनों पर आंतरिक पुलअप को सक्षम करता है। P1IE इंटरप्ट को सक्षम करता है, जहां P1IES इन पिंस पर इंटरप्ट एज के रूप में उच्च से निम्न संक्रमण का चयन करता है।
पी 1 डीआईआर - = 0x07; P1OUT = 0x30; P1REN - = 0x30; P1IE - = 0x30; P1IES - = 0x30; P1IFG & = ~ 0x30;
अगली पंक्ति कम पावर मोड को सक्षम करती है और जीआईई को स्टेटस रजिस्टर में सक्षम बनाती है ताकि इंटरप्ट प्राप्त हो सके।
__bis_SR_register (LPM4bits + GIE)
मैक्रो का उपयोग करके पोर्ट 1 वेक्टर के पते के साथ प्रोग्राम काउंटर सेट किया गया है।
PORT1_VECTOR । #pragma वेक्टर = PORT1_VECTOR __interrupt void Port_1 (शून्य)
नीचे दिए गए कोड में एक-एक करके pin0, pin1, pin2 से जुड़े प्रत्येक एल ई डी टॉगल किया गया है।
if (गिनती% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; गिनती ++; } और अगर (गिनती 3 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; गिनती ++; } और { P1OUT ^ = BIT2; P1IFG & = ~ 0x30; गिनती ++; }
सर्किट आरेख 2:
इसी तरह, चलो अवधारणा को बेहतर ढंग से समझने के लिए एक अलग पिन का प्रयास करें। तो यहाँ पुश बटन पिन 1.5 के बजाय 2.0 पिन से जुड़ा है। संशोधित सर्किट इस प्रकार है। फिर से इस सर्किट का उपयोग MSP430 बटन इंटरप्ट प्रोग्राम का परीक्षण करने के लिए किया जाता है ।
यहां पोर्ट 2 का उपयोग इनपुट के लिए किया जाता है। इसलिए विभिन्न व्यवधान वेक्टर का उपयोग किया जाना है। P1.4 और P2.0 इनपुट लेते हैं।
चूंकि पोर्ट 2 का उपयोग केवल इनपुट के लिए किया जाता है, P2DIR को 0. के रूप में सेट किया जाता है। पोर्ट 2 के पिन0 को आंतरिक पुल-अप प्रतिरोधों के साथ इनपुट के रूप में सेट करने के लिए, रजिस्टर P2OUT और P2REN को 1. के मान के साथ सेट किया जाना है। पोर्ट 2 के पिन0 पर रुकावट और बीच के किनारे का चयन करने के लिए, P2IE और P2IES को 1 के मान के साथ सेट किया गया है। पोर्ट 2 में ध्वज को रीसेट करने के लिए, P2IFG को साफ़ किया जाता है, ताकि ध्वज को फिर से सेट किया जा सके व्यवधान की घटना।
पी 2 डीआईआर - = 0x00; P2OUT = 0x01; P2REN - = 0x01; P2IE - = 0x01; P2IES - = 0x01; P2IFG & = ~ 0x01;
जब अवरोध स्रोत पोर्ट 1 से होता है, तो एलईडी पोर्ट 1 के पिन 1 से जुड़ा होता है। जब रुकावट स्रोत पोर्ट 2 से संबंधित होता है, तो एलईडी पोर्ट 1 की चमक के पिन 2 से जुड़ा होता है।
#pragma वेक्टर = PORT1_VECTOR __interrupt void Port_1 (शून्य) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; for (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } #pragma वेक्टर = PORT2_VECTOR __interrupt void Port_2 (शून्य) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; for (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
CCS से MSP430 में प्रोग्राम अपलोड करना
प्रोजेक्ट को लॉन्चपैड पर लोड करने और उसे डीबग करने के लिए, प्रोजेक्ट का चयन करें, और टूलबार में डीबग आइकन पर क्लिक करें। वैकल्पिक रूप से, F11 दबाएँ या डिबग मोड में प्रवेश करने के लिए RunàDebug पर क्लिक करें।
डिबग मोड में प्रवेश करने के बाद, एमसीयू में लोड किए गए कोड को स्वतंत्र रूप से चलाने के लिए हरे रंग के रन बटन को दबाएं। अब, जब पुश बटन को नीचे दबाया जाता है, तो किनारे में परिवर्तन से व्यवधान उत्पन्न होता है, इस प्रकार एलईडी की स्थिति में परिवर्तन को प्रेरित किया जाता है।
MSP430 पर बाधित कार्यक्रम
कोड सफलतापूर्वक अपलोड होने के बाद, हम बस पुश बटन का उपयोग करके इसका परीक्षण कर सकते हैं। जब भी पुश बटन का उपयोग करके कोई रुकावट दी जाती है, तो हमारे कार्यक्रम के अनुसार एलईडी पैटर्न बदल जाएगा।
पूरा काम नीचे दिए गए वीडियो में पाया जा सकता है। आशा है कि आपने ट्यूटोरियल का आनंद लिया और कुछ उपयोगी सीखा। यदि आपके कोई प्रश्न हैं, तो उन्हें टिप्पणी अनुभाग में छोड़ दें या अन्य तकनीकी प्रश्नों के लिए हमारे मंचों का उपयोग करें।