इंटेल 8253

इंटेल 8253 और 8254 प्रोग्रामयोग्य अंतराल टाइमर (पीआईटी) हैं, जो तीन 16-बिट काउंटर का उपयोग करके समय और गिनती कार्य करते हैं।

825x परिवार मुख्य रूप से Intel 8080/Intel 8085-प्रोसेसर के लिए डिज़ाइन किया गया था, लेकिन बाद में x86 संगत सिस्टम में उपयोग किया गया। 825x चिप्स, या एक बड़ी चिप में एम्बेडेड समकक्ष सर्किट, सभी आईबीएम पीसी संगत और वेक्टर -06 सी जैसे सोवियत कंप्यूटरों में पाए जाते हैं।

पीसी कंपैटिबल्स में, टाइमर चैनल 0 को व्यवधान अनुरोध (पीसी आर्किटेक्चर)  -0 (उच्चतम प्राथमिकता हार्डवेयर इंटरप्ट) को सौंपा गया है। टाइमर चैनल 1 को DRAM रिफ्रेश के लिए असाइन किया गया है (कम से कम 80386 से पहले के शुरुआती मॉडल में)। टाइमर चैनल 2 पीसी स्पीकर को सौंपा गया है।

इंटेल 82c54 (सीएमओएस लॉजिक के लिए सी) वेरिएंट 10 मेगाहर्ट्ज क्लॉक सिग्नल तक संभालता है।

इतिहास
8253 का वर्णन 1980 इंटेल कंपोनेंट डेटा कैटलॉग प्रकाशन में किया गया है। 8254, जिसे उच्च क्लॉक स्पीड रेटिंग के साथ 8253 के सुपरसेट के रूप में वर्णित किया गया है, की 1982 इंटेल कंपोनेंट डेटा कैटलॉग में प्रारंभिक डेटा शीट है।

8254 को एचएमओएस में लागू किया गया है और इसमें रीड बैक कमांड 8253 पर उपलब्ध नहीं है, और एक ही काउंटर को इंटरलीव करने के लिए पढ़ने और लिखने की अनुमति देता है। आधुनिक पीसी कंपेटिबल, या तो चिप सीपीयू या साउथब्रिज (कंप्यूटिंग) पर सिस्टम का उपयोग करते समय आमतौर पर बैकवर्ड संगतता और इंटरऑपरेबिलिटी के लिए पूर्ण 8254 संगतता लागू करते हैं। रीड बैक कमांड मल्टीकोर सीपीयू और जीपीयू के साथ इंटरऑपरेबिलिटी के लिए एक महत्वपूर्ण I/O सुविधा है।

वेरिएंट
-55°C से +125°C के तापमान रेंज के साथ Intel M8253 का सैन्य संस्करण है, जिसमें ±10% 5V पावर सहनशीलता भी है। उपलब्ध 82C53 CMOS संस्करण को ओकी इलेक्ट्रिक इंडस्ट्री|ओकी इलेक्ट्रॉनिक इंडस्ट्री कंपनी लिमिटेड को आउटसोर्स किया गया था। Intel 82C54 का उपलब्ध पैकेज संस्करण 1986 की पहली तिमाही में सैंपलिंग के 28-पिन चिप_कैरियर#प्लास्टिक-लीडेड_चिप_कैरियर में था।

विशेषताएँ
टाइमर में तीन काउंटर हैं, जिनकी संख्या 0 से 2 है। प्रत्येक चैनल को छह मोड में से एक में संचालित करने के लिए प्रोग्राम किया जा सकता है। एक बार प्रोग्राम हो जाने पर, चैनल स्वतंत्र रूप से काम करते हैं। प्रत्येक काउंटर में दो इनपुट पिन होते हैं - सीएलके ( घड़ी इनपुट) और गेट - और डेटा आउटपुट के लिए एक पिन, आउट। तीन काउंटर एक-दूसरे से स्वतंत्र 16-बिट डाउन काउंटर हैं, और इन्हें केंद्रीय प्रसंस्करण इकाई द्वारा आसानी से पढ़ा जा सकता है।
 * डेटा बस बफ़र में माइक्रोप्रोसेसर और आंतरिक रजिस्टरों के बीच डेटा बस को बफ़र करने का तर्क होता है। इसमें 8 इनपुट पिन हैं, जिन्हें आमतौर पर D7..D0 के रूप में लेबल किया जाता है, जहां D7 सबसे महत्वपूर्ण बिट है।
 * रीड/राइट लॉजिक में 5 पिन होते हैं, जो नीचे सूचीबद्ध हैं।$\overline{X}$ दर्शाता है कि X एक सक्रिय निम्न सिग्नल है।
 * $\overline{RD}$: संकेत पढ़ें
 * $\overline{WR}$: संकेत लिखें
 * $\overline{CS}$: चिप चयन सिग्नल
 * A0, A1: पता पंक्तियाँ

उपरोक्त हार्डवेयर सिग्नल सेट करके पीआईटी का ऑपरेशन मोड बदल दिया जाता है। उदाहरण के लिए, कंट्रोल वर्ड रजिस्टर पर लिखने के लिए, किसी को सेट करना होगा $\overline{CS}$=0, $\overline{RD}$=1, $\overline{WR}$=0, ए1=ए0=1.


 * कंट्रोल वर्ड रजिस्टर में प्रोग्राम की गई जानकारी होती है जिसे (माइक्रोप्रोसेसर द्वारा) डिवाइस पर भेजा जाएगा। यह परिभाषित करता है कि पीआईटी का प्रत्येक चैनल तार्किक रूप से कैसे काम करता है। इन बंदरगाहों तक प्रत्येक पहुंच में लगभग 1 µs का समय लगता है।

काउंटरों को आरंभ करने के लिए, माइक्रोप्रोसेसर को इस रजिस्टर में एक नियंत्रण शब्द (सीडब्ल्यू) लिखना होगा। यह रीड/राइट लॉजिक ब्लॉक के पिन के लिए उचित मान सेट करके और फिर डेटा/बस बफर ब्लॉक में नियंत्रण शब्द भेजकर किया जा सकता है।

नियंत्रण शब्द रजिस्टर में 8 बिट्स हैं, जिन्हें D7..D0 लेबल किया गया है (D7 सबसे महत्वपूर्ण बिट है)। डिकोडिंग कुछ जटिल है. अधिकांश मान तीन काउंटरों में से एक के लिए पैरामीटर सेट करते हैं:
 * सबसे महत्वपूर्ण दो बिट्स (यदि 11 नहीं) उस काउंटर रजिस्टर का चयन करें जिस पर कमांड लागू होता है।
 * अगले दो बिट्स (यदि 00 नहीं हैं) उस प्रारूप का चयन करें जिसका उपयोग काउंटर रजिस्टर में बाद में पढ़ने/लिखने की पहुंच के लिए किया जाएगा। इसे आमतौर पर एक ऐसे मोड पर सेट किया जाता है जहां एक्सेस सबसे कम-महत्वपूर्ण और सबसे-महत्वपूर्ण बाइट्स के बीच वैकल्पिक होता है। 8253 और 8254 के बीच एक अंतर यह है कि पहले वाले में एक आंतरिक बिट था जो पढ़ने और लिखने दोनों को प्रभावित करता था, इसलिए यदि प्रारूप 2-बाइट पर सेट किया गया था, तो lsbyte को पढ़ने से निम्नलिखित लेखन को msbyte पर निर्देशित किया जाएगा। 8254 में पढ़ने और लिखने के लिए अलग-अलग बिट्स का उपयोग किया गया।
 * अगले तीन बिट्स उस मोड का चयन करें जिसमें काउंटर काम करेगा।
 * सबसे कम महत्वपूर्ण बिट यह चुनता है कि काउंटर बाइनरी या बाइनरी-कोडित दशमलव में काम करेगा या नहीं। (बीसीडी गिनती लगभग कभी भी उपयोग नहीं की जाती है और इसे एमुलेटर या साउथब्रिज में ठीक से लागू नहीं किया जा सकता है।)

हालाँकि, दो अन्य रूप भी हैं:
 * किसी दिए गए टाइमर के लिए गिनती को लॉक करें। अगला रीड, रीड के समय काउंटर वैल्यू लौटाने के बजाय, लैच कमांड के पल में काउंटर वैल्यू लौटाएगा। रीड पूरा होने के बाद, बाद में पढ़ा गया वर्तमान काउंटर लौटा देगा। जब लैच कमांड का उपयोग किया जाता है, तो मोड और बीसीडी स्थिति नहीं बदली जाती है।
 * (केवल 8254) एकाधिक टाइमर के लिए स्थिति को लॉक करें और/या गिनती करें। यह बिटमैप का उपयोग करके एक साथ कई लैच कमांड की अनुमति देता है। साथ ही, वर्तमान चैनल कॉन्फ़िगरेशन को गिनती के अतिरिक्त वापस पढ़ा जा सकता है।

पीआईटी सेट करते समय, माइक्रोप्रोसेसर पहले एक नियंत्रण संदेश भेजता है, फिर पीआईटी को एक गिनती संदेश भेजता है। गिनती की प्रक्रिया पीआईटी को ये संदेश प्राप्त होने के बाद शुरू होगी, और, कुछ मामलों में, अगर यह गेट इनपुट संकेत किनारा बढ़ते सिग्नल किनारे का पता लगाता है। स्थिति बाइट प्रारूप. बिट 7 सॉफ़्टवेयर को OUT पिन की वर्तमान स्थिति की निगरानी करने की अनुमति देता है। बिट 6 इंगित करता है कि गिनती कब पढ़ी जा सकती है; जब यह बिट 1 होता है, तो गिनती तत्व अभी तक लोड नहीं हुआ है और प्रोसेसर द्वारा वापस पढ़ा नहीं जा सकता है। बिट्स 5 से 0 नियंत्रण रजिस्टर में लिखे गए अंतिम बिट्स के समान हैं।

ऑपरेशन मोड
नियंत्रण शब्द के D3, D2 और D1 बिट्स टाइमर के ऑपरेटिंग मोड को सेट करते हैं। कुल मिलाकर 6 मोड हैं; मोड 2 और 3 के लिए, डी3 बिट को नजरअंदाज कर दिया जाता है, इसलिए गायब मोड 6 और 7 मोड 2 और 3 के लिए उपनाम हैं।

सभी मोड GATE इनपुट के प्रति संवेदनशील हैं, GATE उच्च के कारण सामान्य ऑपरेशन होता है, लेकिन GATE कम का प्रभाव मोड पर निर्भर करता है:
 * मोड 0 और 4: GATE कम होने पर गिनती निलंबित कर दी जाती है, और GATE अधिक होने पर गिनती फिर से शुरू हो जाती है।
 * मोड 1 और 5: GATE के बढ़ते किनारे की गिनती शुरू होती है। गिनती को प्रभावित किए बिना GATE नीचे जा सकता है, लेकिन एक और बढ़ती बढ़त शुरुआत से ही गिनती को फिर से शुरू कर देगी।
 * मोड 2 और 3: गेट लो फोर्स को तुरंत हाई आउट करें (क्लॉक पल्स की प्रतीक्षा किए बिना) और काउंटर को रीसेट करता है (अगली क्लॉक गिरने वाले किनारे पर)। जब GATE फिर से ऊपर चला जाता है, तो गिनती फिर से शुरू हो जाती है।

मोड 0 (000): टर्मिनल गिनती पर व्यवधान
मोड 0 का उपयोग सॉफ्टवेयर नियंत्रण के तहत सटीक समय विलंब उत्पन्न करने के लिए किया जाता है। इस मोड में, काउंटर इसमें लोड किए गए प्रारंभिक COUNT मान से 0 तक गिनती शुरू कर देगा। गिनती दर इनपुट घड़ी आवृत्ति के बराबर है।

कंट्रोल वर्ड लिखे जाने के बाद OUT पिन को कम सेट किया जाता है, और COUNT प्रोग्राम होने के बाद गिनती एक घड़ी चक्र शुरू होती है। काउंटर 0 तक पहुंचने तक OUT कम रहता है, जिस बिंदु पर OUT को तब तक उच्च सेट किया जाएगा जब तक कि काउंटर पुनः लोड न हो जाए या नियंत्रण शब्द न लिखा जाए। काउंटर चारों ओर से लपेटता है  आंतरिक रूप से और गिनती जारी रहती है, लेकिन OUT पिन फिर कभी नहीं बदलता है। सामान्य गणना के लिए गेट सिग्नल को उच्च स्तर पर सक्रिय रहना चाहिए। यदि गेट नीचे चला जाता है, तो गिनती रोक दी जाती है, और फिर से ऊपर जाने पर गिनती फिर से शुरू हो जाती है।

नई गिनती की पहली बाइट गिनती रजिस्टर में लोड होने पर पिछली गिनती को रोक देती है।

मोड 1 (001): प्रोग्रामयोग्य एक शॉट
इस मोड में 8253 का उपयोग मोनोस्टेबल मल्टीवाइब्रेटर के रूप में किया जा सकता है। GATE इनपुट का उपयोग ट्रिगर इनपुट के रूप में किया जाता है।

प्रारंभ में OUT उच्च होगा। एक-शॉट पल्स शुरू करने के लिए ट्रिगर के बाद क्लॉक पल्स पर OUT कम हो जाएगा, और जब तक काउंटर शून्य तक नहीं पहुंच जाता तब तक कम रहेगा। फिर OUT उच्च स्तर पर जाएगा और अगले ट्रिगर के बाद CLK पल्स तक उच्च बना रहेगा।

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

वन-शॉट पुनः ट्रिगर करने योग्य है, इसलिए किसी भी ट्रिगर के बाद एन सीएलके पल्स के लिए आउट कम रहेगा। एक-शॉट पल्स को काउंटर में समान गिनती दोबारा लिखे बिना दोहराया जा सकता है। GATE का OUT पर कोई प्रभाव नहीं पड़ता. यदि ऑनशॉट पल्स के दौरान काउंटर पर एक नई गिनती लिखी जाती है, तो वर्तमान वन-शॉट प्रभावित नहीं होता है जब तक कि काउंटर को फिर से चालू न किया जाए। उस स्थिति में, काउंटर को नई गिनती के साथ लोड किया जाता है और नई गिनती समाप्त होने तक वनशॉट पल्स जारी रहता है।

मोड 2 (X10): दर जनरेटर
इस मोड में, डिवाइस डिवाइड-बाय-एन काउंटर के रूप में कार्य करता है, जिसका उपयोग आमतौर पर वास्तविक समय घड़ी व्यवधान उत्पन्न करने के लिए किया जाता है।

अन्य तरीकों की तरह, COUNT भेजे जाने के बाद गिनती प्रक्रिया अगला घड़ी चक्र शुरू कर देगी। तब तक OUT ऊंचा रहेगा जब तक काउंटर 1 तक नहीं पहुंच जाता, और एक क्लॉक पल्स के लिए कम हो जाएगा। अगले चक्र में, गिनती पुनः लोड की जाती है, OUT फिर से उच्च हो जाता है, और पूरी प्रक्रिया खुद को दोहराती है।

उच्च दालों के बीच का समय काउंटर के रजिस्टर में पूर्व निर्धारित गिनती पर निर्भर करता है, और निम्न सूत्र का उपयोग करके गणना की जाती है:

काउंटर में लोड किया जाने वाला मान = $$f_{\rm input}\over f_{\rm output}$$ ध्यान दें कि COUNT रजिस्टर में मानों की सीमा होती है $$n$$ से 1; रजिस्टर कभी भी शून्य तक नहीं पहुंचता.

मोड 3 (X11): वर्ग तरंग जनरेटर
यह मोड मोड 2 के समान है। हालाँकि, आउटपुट की उच्च और निम्न क्लॉक पल्स की अवधि मोड 2 से भिन्न होगी।

कल्पना करना $$n$$ काउंटर में लोड की गई संख्या (COUNT संदेश) है, तो आउटपुट अधिक होगा $$\left\lceil{n\over2}\right\rceil$$ मायने रखता है, और इसके लिए कम है $$\left\lfloor{n\over2}\right\rfloor$$ मायने रखता है. इस प्रकार, अवधि होगी $$n$$ मायने रखता है, और यदि $$n$$ अजीब है, अतिरिक्त आधा चक्र OUT उच्च के साथ व्यतीत होता है।

मोड 4 (100): सॉफ्टवेयर ट्रिगर स्ट्रोब
कंट्रोल वर्ड और COUNT लोड होने के बाद, काउंटर शून्य तक पहुंचने तक आउटपुट उच्च रहेगा। फिर काउंटर 1 घड़ी चक्र (एक स्ट्रोब) के लिए कम पल्स उत्पन्न करेगा - उसके बाद आउटपुट फिर से उच्च हो जाएगा।

GATE निम्न गिनती को निलंबित कर देता है, जो GATE के दोबारा उच्च होने पर फिर से शुरू हो जाती है।

मोड 5 (101): हार्डवेयर ट्रिगर स्ट्रोब
यह मोड मोड 4 के समान है। हालाँकि, गिनती प्रक्रिया GATE इनपुट द्वारा ट्रिगर होती है।

कंट्रोल वर्ड और COUNT प्राप्त करने के बाद, आउटपुट हाई सेट कर दिया जाएगा। एक बार जब डिवाइस GATE इनपुट पर बढ़ते किनारे का पता लगा लेता है, तो यह गिनती शुरू कर देगा। जब काउंटर 0 पर पहुंचता है, तो आउटपुट एक घड़ी चक्र के लिए कम हो जाएगा - उसके बाद यह GATE के अगले बढ़ते किनारे पर चक्र को दोहराने के लिए फिर से उच्च हो जाएगा।

आईबीएम पीसी प्रोग्रामिंग
8253 का उपयोग 1981 में उनकी शुरूआत के बाद से आईबीएम पीसी संगतों में किया गया था। आधुनिक समय में, इस PIT को x86 PC में एक अलग चिप के रूप में शामिल नहीं किया गया है। बल्कि, इसकी कार्यक्षमता मदरबोर्ड चिपसेट के साउथब्रिज (कंप्यूटिंग) के हिस्से के रूप में शामिल है। आधुनिक चिपसेट में, यह परिवर्तन x86 I/O एड्रेस स्पेस में PIT के रजिस्टरों तक काफ़ी तेज़ पहुंच के रूप में दिखाई दे सकता है।

सभी पीसी संगत पीआईटी को 105/88 = 1.193 की क्लॉक दर पर संचालित करते हैं$\overline{count}$ मेगाहर्ट्ज, $\overline{status}$ एनटीएससी रंग-विस्फोट  फ्रीक्वेंसी जो सिस्टम क्लॉक (14.31818 मेगाहर्ट्ज) को 12 से विभाजित करने से आती है। यह सबसे पहले  रंग ग्राफ़िक्स एडाप्टर  पीसी का होल्डओवर है - उन्होंने एक ही क्रिस्टल थरथरानवाला से सभी आवश्यक आवृत्तियों को प्राप्त किया, और टीवी आउटपुट को संभव बनाने के लिए, इस ऑसिलेटर को एनटीएससी रंग सबकैरियर आवृत्ति के गुणक पर चलाना था। यह आवृत्ति, 2 से विभाजित है16 (सबसे बड़ा विभाजक जो 8253 सक्षम है) MS-DOS और संबंधित ऑपरेटिंग सिस्टम में उपयोग किए जाने वाले ≈18.2 Hz टाइमर इंटरप्ट का उत्पादन करता है।

मूल आईबीएम पीसी में, काउंटर 0 का उपयोग टाइमकीपिंग व्यवधान उत्पन्न करने के लिए किया जाता है। काउंटर 1 का उपयोग DRAM मेमोरी के रिफ्रेश को ट्रिगर करने के लिए किया जाता है। काउंटर 2 का उपयोग पीसी स्पीकर के माध्यम से टोन उत्पन्न करने के लिए किया जाता है।

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

पीसी पर टाइमर0 (चिप) का पता पोर्ट 40h..43h पर है और दूसरे टाइमर1 (चिप) का पता 50h..53h पर है।

x86 पीसी पर, कई वीडियो कार्ड BIOS और सिस्टम BIOS अपने स्वयं के उपयोग के लिए दूसरे काउंटर को पुन: प्रोग्राम करेंगे। रीप्रोग्रामिंग आम तौर पर वीडियो मोड में बदलाव के दौरान होती है, जब वीडियो BIOS निष्पादित किया जा सकता है, और सिस्टम प्रबंधन मोड और पावर सेविंग स्थिति में परिवर्तन के दौरान, जब सिस्टम BIOS निष्पादित किया जा सकता है। यह कई x86 सिस्टमों पर टाइमर के दूसरे काउंटर के किसी भी गंभीर वैकल्पिक उपयोग को रोकता है।

जैसा कि ऊपर कहा गया है, चैनल 0 को एक काउंटर के रूप में लागू किया गया है। आमतौर पर, काउंटर का प्रारंभिक मान कंट्रोल को बाइट्स भेजकर सेट किया जाता है, फिर डेटा I/O पोर्ट रजिस्टर करता है (36h का मान पोर्ट 43h पर भेजा जाता है, फिर कम बाइट पोर्ट 40h पर भेजा जाता है, और उच्च बाइट के लिए फिर से पोर्ट 40h भेजा जाता है). काउंटर शून्य तक गिनती करता है, फिर सीपीयू को एक हार्डवेयर व्यवधान  (आईआरक्यू 0, आईएनटी 8) भेजता है। फिर काउंटर अपने प्रारंभिक मूल्य पर रीसेट हो जाता है और फिर से उलटी गिनती शुरू कर देता है। सबसे तेज़ संभव व्यवधान आवृत्ति मेगाहर्ट्ज़ के आधे से थोड़ा अधिक है। सबसे धीमी संभावित आवृत्ति, जो आमतौर पर MS-DOS या संगत ऑपरेटिंग सिस्टम चलाने वाले कंप्यूटरों द्वारा उपयोग की जाती है, लगभग 18.2 Hz है। इन वास्तविक मोड ऑपरेटिंग सिस्टम के तहत, BIOS वास्तविक मोड पते 0040:006c में प्राप्त होने वाली INT 8 कॉल की संख्या जमा करता है, जिसे एक प्रोग्राम द्वारा पढ़ा जा सकता है।

जैसे ही एक टाइमर उलटी गिनती करता है, इसके मूल्य को सीधे इसके I/O पोर्ट को दो बार पढ़कर भी पढ़ा जा सकता है, पहले कम बाइट के लिए, और फिर उच्च बाइट के लिए। हालाँकि, फ्री-रनिंग काउंटर एप्लिकेशन जैसे कि x86 पीसी में, पहले नियंत्रण रजिस्टर में वांछित चैनल के लिए एक कुंडी (इलेक्ट्रॉनिक्स)  कमांड लिखना आवश्यक है, ताकि पढ़े गए दोनों बाइट्स एक ही मान के हों।

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

यह भी देखें

 * LAPIC एक प्रोग्रामयोग्य टाइमर प्रदान करता है
 * एचपीईटी

बाहरी संबंध

 * 82C54 Datasheet
 * Overview of the Intel 8253 PIT chip
 * Intel 8253 complete datasheets
 * 8254/82C54 Programmable Interval Timer FAQ
 * Programmable Interval Timer - OSDev Wiki