इंटेल 8253

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

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

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

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

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

8254 को एचएमओएस में लागू किया गया है और इसमें रीड बैक कमांड 8253 पर उपलब्ध नहीं है, और एक ही काउंटर को इंटरलीव करने के लिए पढ़ने और लिखने की अनुमति देता है।

आधुनिक पीसी कंपेटिबल, या तो चिप सीपीयू या साउथब्रिज (कंप्यूटिंग) पर सिस्टम का उपयोग करते समय सामान्यतः बैकवर्ड संगतता और अंतरप्रचालनीयता के लिए पूर्ण 8254 संगतता लागू करते हैं। रीड बैक कमांड मल्टीकोर सीपीयू और जीपीयू के साथ अंतरप्रचालनीयता के लिए महत्वपूर्ण आई/ओ सुविधा है।

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

विशेषताएँ
टाइमर में तीन काउंटर हैं, जिनकी संख्या 0 से 2 है। प्रत्येक चैनल को छह मोड में से में संचालित करने के लिए प्रोग्राम किया जा सकता है। एक बार प्रोग्राम हो जाने पर, चैनल स्वतंत्र रूप से कार्य करते हैं। प्रत्येक काउंटर में दो इनपुट पिन होते हैं - "CLK" (कालद इनपुट) और "GATE" - और डेटा आउटपुट के लिए पिन, "OUT"। तीन काउंटर एक-दूसरे से स्वतंत्र 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, A1=A0=1 सेट करना होगा।


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

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

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

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

पीआईटी सेट करते समय, माइक्रोप्रोसेसर पहले नियंत्रण संदेश भेजता है, फिर पीआईटी को गणना संदेश भेजता है। गणना की प्रक्रिया पीआईटी को ये संदेश प्राप्त होने के पश्चात प्रारंभ होगी, और, कुछ स्थितियों में, यदि यह "GATE" इनपुट संकेत एज बढ़ते सिग्नल एज को ज्ञात करता है। स्थिति बाइट फॉर्मैट। बिट 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" निम्न बल को तुरंत हाई आउट करें (कालद पल्स की प्रतीक्षा किए बिना) और काउंटर को रीसेट करता है (अगली कालद गिरने वाले एज पर)। जब GATE पुनः ऊपर चला जाता है, तो गणना पुनः प्रारंभ हो जाती है।

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

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

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

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

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

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

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

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

अन्य विधियों के जैसे, 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 में उनकी प्रारंभ के पश्चात से आईबीएम पीसी संगतों में किया गया था। आधुनिक समय में, इस पीआईटी को x86 PC में अलग चिप के रूप में सम्मिलित नहीं किया गया है। यद्यपि, इसकी कार्यक्षमता मदरबोर्ड चिपसेट के साउथब्रिज (कंप्यूटिंग) के भाग के रूप में सम्मिलित है। आधुनिक चिपसेट में, यह परिवर्तन x86 आई/ओ एड्रेस स्पेस में पीआईटी के रजिस्टरों तक अत्यधिक तीव्र एक्सेस के रूप में दिखाई दे सकता है।

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

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

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

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

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

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

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

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

यह भी देखें

 * लैपिक प्रोग्रामेबल टाइमर प्रदान करता है
 * एचपीईटी

बाहरी संबंध

 * 82C54 Datasheet
 * Overview of the इंटेल 8253 पीआईटी chip
 * इंटेल 8253 complete datasheets
 * 8254/82C54 Programmable Interval Timer FAQ
 * Programmable Interval Timer - OSDev Wiki