GPIO पिन एक 'सामान्य प्रयोजन इनपुट / आउटपुट' पिन है। यह डिफ़ॉल्ट रूप से केवल उच्च या निम्न (वोल्टेज स्तर, उच्च माइक्रो नियंत्रक की आपूर्ति वोल्टेज, कम आमतौर पर जमीन, या 0 वी) है। लेकिन 'हाई' और 'लो' के स्तर को आमतौर पर वोल्टेज की आपूर्ति वोल्टेज के अनुपात के रूप में दिया जाता है। इसलिए आमतौर पर आपूर्ति वोल्टेज के 66% से ऊपर कुछ भी एक तर्क स्तर 'उच्च' माना जाता है, जिसका अर्थ है कि कुछ कम वोल्टेज डिवाइस उच्च वोल्टेज उपकरणों के साथ बात कर सकते हैं जब तक कि स्तर 'उच्च' माना जाता है। उदाहरण के लिए 1.8-2.7V के लो पावर माइक्रोकंट्रोलर या GPS रिसीवर को 5V माइक्रोकंट्रोलर से सीधे संवाद करने में परेशानी होगी क्योंकि जो लो वोल्टेज डिवाइस हाई वोल्टेज डिवाइस को 'हाई' के रूप में देखता है, वह यह नहीं सोचता कि यह हाई है। यह एक इनपुट पिन के रूप में GPIO का उपयोग करने के लिए है,
कभी-कभी 'एनालॉग' से 'डिजिटल' (एडीसी) कनवर्टर जैसे अन्य जहाज के उपकरणों द्वारा उपयोग किए जाने वाले जीपीआईओ पिन को कॉन्फ़िगर करके 'एनालॉग' मूल्यों के लिए आप एक सिंगल पिन का उपयोग कर सकते हैं। पिन ADC पर एक चैनल पर सेट है और यह ADC के इनपुट के रूप में कार्य करता है, सामान्य GPIO पिन नहीं। फिर आप नमूना लेने के लिए एडीसी को सेट कर सकते हैं, और अगर 10-बिट रिज़ॉल्यूशन है तो 0-1024 जैसे नंबरों के लिए एडीसी के परिणाम रजिस्टर मूल्य को पढ़ें।
जैसा कि किसी ने उल्लेख किया है, आमतौर पर GPIO टॉगल करने के लिए कम गति पर स्पंदित चौड़ाई मॉड्यूलेशन (PWM) सिग्नल के प्रभाव को देने के लिए सॉफ्टवेयर में GPIO पिन का उपयोग किया जा सकता है। अधिकांश माइक्रोकंट्रोलर्स ने पीडब्लूएम जनरेटर को समर्पित किया है जिसे एक आउटपुट पिन के रूप में GPIO पिन का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है, और ये PWM सिग्नल उत्पन्न करने के लिए GPIO को नियंत्रित करने के लिए सॉफ़्टवेयर का उपयोग करने की तुलना में बहुत तेज़ और कहीं अधिक स्थिर हैं। PWM का उपयोग 'औसत' या '%' शैली संकेतों के लिए किया जाता है और आपको मंद रोशनी जैसी चीजों को करने और मोटर की गति को नियंत्रित करने की अनुमति देता है।
GPIO पिन आमतौर पर समूहों में व्यवस्थित होते हैं, जिन्हें पोर्ट कहा जाता है। छोटे नियंत्रकों में, वे 8-बिट आर्किटेक्चर हो सकते हैं, इसलिए बंदरगाहों को अक्सर 8 के बहुत सारे समूहों में बांटा जाता है, और उनके मूल्यों को एक ही समय में एक 'डेटा रजिस्टर' पढ़कर पढ़ा जा सकता है जो उन लोगों के उच्च / निम्न मानों का प्रतिनिधित्व करता है पिंस। इसी तरह, आप पिन को आउटपुट के रूप में सेट कर सकते हैं और फिर 8-बिट्स को डेटा रजिस्टर में लिख सकते हैं, और माइक्रोकंट्रोलर जीपीआईओ नियंत्रक रजिस्टर के बदले हुए मूल्यों को पढ़ेंगे, और पिन को हाई ड्राइव करेंगे या पिन को कम से कम खींचेंगे जो आपके द्वारा निर्धारित मूल्य पर निर्भर करता है।
एआरएम कॉर्टेक्स ए 8 और ए 9 जैसे नए नियंत्रकों में जैसे रास्पबेरी पाई और बीगलबोन, उनके जीपीआईओ नियंत्रक और विभिन्न विकल्प बहुत जटिल हैं। वे 32-बिट आर्किटेक्चर का उपयोग करते हैं, इसलिए अधिकांश GPIO पिन को 32-पिन ब्लॉक में व्यवस्थित किया जाता है, भले ही सभी वास्तव में उपयोग करने योग्य न हों (कुछ समर्पित या सक्षम नहीं हो सकते हैं)। बीगलबोन (जो मैंने पहले काम किया है) में इसकी बड़ी मात्रा में पिन के लिए कुछ बहुत ही बढ़िया विकल्प हैं, और कभी-कभी आपको 'पिन मक्स' टूल का उपयोग करने की आवश्यकता होगी, जो आपको चीजों के लिए कुछ निश्चित पिनों के विशेष मोड को स्थापित करने की अनुमति देता है। PWM की तरह, पल्स कैप्चर, टाइमर आउटपुट, एनालॉग (ADC) चैनल इनपुट, और यहां तक कि (बीगलबोन पर) एआरएम कोर पर उपलब्ध औद्योगिक उप-प्रोसेसर के लिए मैपिंग, लेकिन स्वतंत्र प्रोसेसर माना जाता है और क्रम में अपने स्वयं के पिन मैपिंग की आवश्यकता होती है बाहरी दुनिया से जुड़ा होना।