मुझे पहले एक एम्बेडेड प्रोसेसर में GPIO का मान और फिर दिशा निर्धारित करने की आवश्यकता क्यों है?


16

मेरे पास फर्मवेयर इंजीनियर के रूप में पूर्णकालिक नौकरी है। मुझे हाल ही में GPIO कॉन्फ़िगरेशन की समीक्षा करने और आवश्यकतानुसार सेटिंग बदलने का काम दिया गया है। मुझे कुछ पिन मिले जो गलत तरीके से कॉन्फ़िगर किए गए थे इसलिए स्वाभाविक रूप से मैंने उन्हें पुन: कॉन्फ़िगर किया, हालांकि मुझे बताया गया था कि मैंने इसे गलत क्रम में किया था। यहाँ मैं बात कर रहा हूँ:

पहले:
GPIO1.direction = INPUT;

के बाद:
GPIO1.direction = OUTPUT;
GPIO1.value = 0;

हालाँकि कोड समीक्षा के दौरान मुझे बताया गया है कि मुझे निम्नलिखित के लिए आरंभीकरण के क्रम को बदलना होगा:

GPIO1.value = 0;
GPIO1.direction = OUTPUT;

दूसरे शब्दों में, पहले मूल्य निर्धारित करें और फिर पिन की दिशा निर्धारित करें। मुझे यह भी बताया गया है कि आधुनिक प्रोसेसर पर ऐसा होना आवश्यक है क्योंकि वे दो रजिस्टरों का उपयोग करते हैं, एक इनपुट के लिए और एक आउटपुट के लिए, हालांकि पुराने प्रोसेसर केवल एक रजिस्टर का उपयोग करते हैं, इसलिए संचालन का क्रम कोई मायने नहीं रखेगा।
(नोट: आधुनिक = एआरएम कोर्टेक्स एम ३ और उससे ऊपर, पुराना = इंटेल ARM०५१)

मैंने काम पर बेहतर स्पष्टीकरण मांगा, लेकिन मुझे अच्छा जवाब नहीं मिला। इसलिए मैंने यहां पूछने का फैसला किया।

तो यहाँ मेरे सवाल हैं:

  1. नए प्रोसेसर पर इनिशियलाइज़ेशन का क्रम क्यों मायने रखता है?
  2. पुराने प्रोसेसर पर इनिशियलाइज़ेशन का क्रम क्यों मायने नहीं रखता?
  3. आधुनिक प्रोसेसर में वे कौन से दो रजिस्टर की बात कर रहे हैं?
  4. पुराने प्रोसेसर पर वे किस एकल रजिस्टर के बारे में बात कर रहे हैं?

यदि कोई व्यक्ति किसी प्रकार का आरेख प्रदान कर सकता है, तो यह और भी बेहतर होगा।


1
"आधुनिक" और "पुराने" प्रोसेसर एक उपयोगी उत्तर देने के लिए बहुत अस्पष्ट है। विभिन्न आर्किटेक्चर में अलग-अलग रजिस्टर सेटिंग्स हैं; बिना यह जाने कि आप किस बारे में बात कर रहे हैं, समझदारी से उन पर टिप्पणी करने का कोई तरीका नहीं है।
निक जॉनसन

@ इग्नासियोवेज़ज़-अब्राम्स नहीं, वास्तव में नहीं। कमरे में बहुत अनुभवी इंजीनियर थे जिन्होंने कहा था कि अगर मेरे रास्ते में किया जाता है तो आपको लाइन पर गड़बड़ होगी।
फ्लैशबुल जूल

@ निकीजॉनसन मॉडर्न = एआरएम कॉर्टेक्स एम 4 और उससे ऊपर, ओल्ड = इंटेल
8051।

@BrianDrummond LOL। बहुत अच्छी व्याख्या। लेकिन पुराने प्रोसेसर के बारे में क्या, उदाहरण के लिए 8051। यह उनके लिए क्यों मायने नहीं रखता?
फ्लैश

2
Q4 को डेटाशीट लिंक के साथ उत्तर देना आसान होगा।
pjc50

जवाबों:


22

मूल 8051 में तथाकथित छद्म-द्विदिश आउटपुट पोर्ट (पुलअप के साथ खुले-नाली) का उपयोग किया गया था, इसलिए वास्तव में कोई पोर्ट दिशा सेटिंग नहीं थी।

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

उदाहरण के लिए मेरा जवाब यहां देखें ।

संपादित करें: यहाँ (अपेक्षाकृत) आधुनिक CMOS माइक्रोकंट्रोलर के लिए I / O पिन संरचना है :

यहाँ छवि विवरण दर्ज करें

TRIS (TRIState) को कई अन्य माइक्रो में DDR (डेटा डायरेक्शन रजिस्टर) कहा जाता है। इस मामले में, यदि TRIS कुंडी का उत्पादन अधिक है, तो दोनों ट्रांजिस्टर 'बंद' हैं, लेकिन पोर्ट अभी भी पढ़ा जा सकता है।

यहाँ एक नया माइक्रोचिप माइक्रो के लिए थोड़ा और अधिक जटिल I / O पिन संरचना है ।

यहाँ छवि विवरण दर्ज करें

फिर से, TRIS लैच आउटपुट को निष्क्रिय कर देता है। इसमें एक LAT कुंडी शामिल है जो पढ़ने-संशोधित-लिखने के मुद्दों से बचने में मदद करती है । PIC श्रृंखला पर आपको केवल LAT रजिस्टर पर लिखना चाहिए (और पोर्ट रजिस्टर से पढ़ें)।

यहाँ मूल 8051 और CMOS 8051 क्लासिक I / O पोर्ट पिन आंतरिक सर्किट्री ( इस स्रोत से ) है:

यहाँ छवि विवरण दर्ज करें

इसमें कुछ अतिरिक्त जटिलता है कि पुल-अप के समानांतर एक गति-अप ट्रांजिस्टर है जो बाहरी समाई को दूर करने के लिए संक्षेप में चालू है। जैसा कि आप देख सकते हैं, कोई टीआरआईएस / डीडीआर नियंत्रण बिल्कुल नहीं है। सामान्य ऑपरेशन में उपयोग किए जाने वाले पुल-अप MOSFETs 'कमजोर' होते हैं - वे काफी छोटे (निम्न Ids) होते हैं जो पिन से जुड़ा एक बाहरी आउटपुट छद्म-द्विदिशीय पोर्ट लाइन को कम खींच सकता है।


स्पष्टीकरण के लिए धन्यवाद। मैंने कुछ समय में हार्डवेयर के साथ काम नहीं किया है इसलिए मुझे विवरण से विवरण समझने में कठिन समय लगता है। क्या आप चित्र प्रदान करना चाहेंगे? कहो कि कैसे एक पिन कॉन्फ़िगरेशन हार्डवेयर एक आधुनिक प्रोसेसर पर दिखेगा बनाम यह 8051 को कैसे दिखता है? मुझे वास्तव में इसकी प्रशंसा करनी होगी।
फ्लैशबर्न

हार्डवेयर से आपका क्या अभिप्राय है? चिप का आंतरिक GPIO सर्किटरी?
स्पायरो पेफेनी

यह सही है। आरेख के कुछ प्रकार वास्तव में सहायक होंगे।
फ्लैशबुल

16

यदि आप पहले दिशा निर्धारित करते हैं, तो पिन को संक्षेप में आउटपुट में कॉन्फ़िगर किया जाएगा जो कि इसका वर्तमान आउटपुट मूल्य है। यदि आप पहले मूल्य निर्धारित करते हैं, तो ऐसा नहीं होगा।

तो, इसे जिस तरह से करने की सिफारिश की गई है, वह आउटपुट पर ग्लिट्स से बचा जाता है, जो हानिरहित से लेकर तबाही तक हो सकता है, जो इस बात पर निर्भर करता है कि पिन किससे जुड़ा है।


धन्यवाद। तो पुराने प्रोसेसर के बारे में क्या, यह उनके लिए क्यों मायने नहीं रखता? ओल्ड = इंटेल 8051
फ्लैशबर्न

मैं 8051 से परिचित नहीं हूं। आपके सहयोगियों ने जो कहा है, उसके आधार पर यदि एक ही रजिस्टर दिशा और मूल्य दोनों को कॉन्फ़िगर करता है, तो इससे कोई फर्क नहीं पड़ेगा क्योंकि कंपाइलर एक में दो लिखने का अनुकूलन करेगा।
निक जॉनसन

2
यह शायद अभी भी एक अच्छा आदत है यह पुराने प्रोसेसर के लिए यह "नया" तरीका करने के लिए ऊपर भी कारण होगा। अलग-अलग orocessors की अलग-अलग आवश्यकताएं हो सकती हैं, विभिन्न विक्रेता दूसरों की तुलना में बेहतर सुझाव दे सकते हैं, और विभिन्न कंपनियों / नियोक्ताओं / टीमों के पास इस तरह के विवरणों के लिए अलग-अलग नीतियां हो सकती हैं।
बिल

2
वास्तव में ... हमेशा माना जाता है कि डीआईओ कयामत की परिक्रमा लेजर से जुड़ा है;)
माइकल

4

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

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