في التدوينة السابقة اخذنا
المقاطعات الداخلية (شرح المعالج 8086) - Internal Interrupts
تعتبر تدوينة اليوم هي الاخير في مجال لغة التجميع والدوائر والموائمة والمعالجات الدقيقة وعنوانها المقاطعات الخارجية External Interrupts – شرح المعالج 8088/8086
يحتوي المعالج 8088/8086 على ثلاث مقاطعات خارجية: إعادة تشغيل النظام RESET مقاطعة غير قابلة للحجب NMI والمقاطعة INTR .
إعادة تشغيل النظام System Reset
يمكن اعتبار مغرز إعادة تشغيل النظام RESET إحدى مقاطعات المعالج غير القابلة للحجب. عندما يكتشف المعالج 8088/8086 جبهة صاعدة موجبة على المغرز RESET فإنه ينهي كل نشاط للمعالج بانتظار أن تعود الإشارة على المغرز RESET إلى الـ 0 عندها يصفَّر رتل التعليمات ويشحن القيم الابتدائية التالية في سجلاته الداخلية.
يمكن اعتبار مغرز إعادة تشغيل النظام RESET إحدى مقاطعات المعالج غير القابلة للحجب. عندما يكتشف المعالج 8088/8086 جبهة صاعدة موجبة على المغرز RESET فإنه ينهي كل نشاط للمعالج بانتظار أن تعود الإشارة على المغرز RESET إلى الـ 0 عندها يصفَّر رتل التعليمات ويشحن القيم الابتدائية التالية في سجلاته الداخلية.
وبالتالي، فإن أول تعليمة ينفذها البرنامج، بعد إعادة التشغيل، تبدأ بالموقع الفيزيائي FFFF0h
المقاطعة NMI
لا يمكن حجب هذه المقاطعة وَتحدث من أجل كل جبهة صاعدة على المغرز NMI للمعالج. عندما يستجيب المعالج لهذه المقاطعة فإنه ينفذ المقاطعة ذات النمط 2 تستخدم هذه المقاطعة لإعلام المعالج عن حدوث خطأ فادح في النظام مثل انقطاع الكهرباء، وبالتالي تمكِّن المعالج من تخزين المعطيات الضرورية ضمن ذاكرة EEPROM على سبيل المثال. يبين الشكل التالي دارًة تولد نبضة موجبة عندما يحدث انقطاع في التيار الكهربائي.
المقاطعة INTR
يستجيب المعالج للمقاطعات على المغرز INTR إذا كان IF=1 .
يمكننا تأهيل هذه المقاطعة بتنفيذ التعليمة STI , كما يمكننا حجبها بتصفير الراية IF باستخدام التعليمة CLI عندما يستجيب المعالج لهذه المقاطعة يحجب هذه المقاطعة عن طريق تصفير IF ومن ثم يعيد تأهيلها بالتعليمة IRET مع نهاية إجرائية خدمة هذه المقاطعة.
عادًة ما تكون هذه المقاطعة مشتركة بين عدة تجهيزات محيطية في نظام صغري أو في الحاسوب الشخصي , يسند لكل تجهيزة نمط مقاطعة خاص يقرأه المعالج من مسرى المعطيات بعد الاستجابة مباشرة لهذه المقاطعة.
عندما يقرر المعالج الاستجابة لطلب مقاطعة على المغرز INTR فإنه يولد دورة آلة مسرى مقاطعة، يولد خلالها المعالج نبضة سالبة على المغرز INTR' ليعلم التجهيزة الخارجية، التي طلبت المقاطعة، أنه قد جرى الاستجابة لهذا الطلب. ثم يولد المعالج، مرًة أخرى، نبضة على المغرز نفسه لقراءة رقم شعاع المقاطعة الذي تضعه التجهيزة الخارجية. يجب على التجهيزة الخارجية وضع رقم شعاع المقاطعة على مسرى المعطيات D0-D7 مع بداية النبضة الثانية على المخرج INTR' انظر المخطط الزمني. يمكننا استخدام أي شعاع مقاطعة من 00h وحتى FFh ولكننا عادة ما نستخدم المقاطعات [20h-FFh] لكون المقاطعات [00h-1Fh] محجوزة إما داخليًا أو من أجل التطوير المستقبلي للمعالج.
طرق إدخال رقم شعاع المقاطعة
اولا الطريقة الأبسط
يبين الشكل التالي دارة بسيطة تعمل على وضع شعاع المقاطعة FFh على مسرى معطيات المعالج D0-D7 عند الاستجابة لطلب المقاطعة على المغرز INTR لا داعي، في هذا المثال، استخدام المخرج INTA' بما أننا وصلنا خطوط المعطيات إلى التغذية عبر مقاومات رفع فإن المعالج سوف يقرأ القيمة FFh عندما يستجيب للمقاطعة على المغرز INTR ,
ثانياً استخدام عازل ثلاثي الحالات
يبين الشكل التالي كيفية استخدام دارة عزل ثلاثي الحالات 74LS244 لتطبيق شعاع مقاطعة رقم 80h على خطوط المعطيات عندما يستجيب المعالج للمقاطعة على المغرز INTR تضع الدارة 74LS244 رقم شعاع المقاطعة على خطوط المعطيات بالتزامن مع النبضة على المخرج INTA' يمكننا من خلال البدالة DIP تغيير نمط شعاع المقاطعة بسهولة.
ثالثاً توسعة بنيان المقاطعة
بينا سابقًا طريقتين لإدخال رقم شعاع مقاطعة وحيد. يمكننا عمليًا توسعة عمل مقاطعة المعالج 8088/ 8086 بحيث يقبل المدخل INTR سبع مقاطعات مختلفة لكل منها رقم شعاع مقاطعة مختلف، كما في الشكل التالي.
نربط في هذا البنيان سبع مقاطعات (IR0)' – (IR6)' عبر بوابة NAND لها سبع مداخل (يمكننا استخدام الدارة المتكاملة 74LS30 لهذا الغرض) , يجري توليد طلب مقاطعة عبر المدخل INTR إذا أصبح على الأقل أحد المداخل (IR0)' – (IR6)' يساوي الـ 0 يقرأ المعالج رقم شعاع المقاطعة بالتزامن مع النبضة على المخرج INTA' تتغير قيمة شعاع المقاطعة تبعًا للمدخل الذي طلب المقاطعة .
يبين الجدول التالي رقم شعاع المقاطعة في حال وجود طلب مقاطعة واحد بآن واحد.
ولكن عندما تطلب أكثر من تجهيزة مقاطعة المعالج بآن واحد فإنه يجري توليد رقم شعاع مقاطعة جديد (غير متضمن في الجدول) على سبيل المثال، إذا جرى طلب مقاطعة على المدخلين IR0' و IR1' فإنه يجري توليد رقم شعاع المقاطعة FCH لماذا؟ (لأن جميع مداخل المقاطعة تساوي 1 منطقي ما عدا IR0' و IR1' وبالتالي فإن قيمة شعاع المقاطعة في هذه الحالة يساوي 11111100b أو FCh ).
إذا كان للمقاطعة IR0' الأولوية الأعلى، فإنه يجب تخزين عنوان شعاع مقاطعة IR0' في الموقع FCH من جدول أشعة المقاطعات. ويجب، في هذه الطريقة، استخدام النصف الأعلى من الجدول المكون من 128 موقع للأخذ بالحسبان جميع التراكيب الممكنة لطلبات المقاطعات المختلفة. بالطبع هذه الطريقة ليست المثلى ومع ذلك فإن هذه الطريقة تمثل ح ً لا وسطًا بين تعقيد النظام وكلفته.
مثال:
يبين الشكل التالي مثالا على ربط لوحة مفاتيح مع الرقاقة 8255A في نظام صغري مبني حول المعالج 8086 يسبب الضغط على أي مفتاح من لوحة المفاتيح توليد مقاطعة ذات النمط 40h عبر مدخل المقاطعة INTR .
تحتل سجلات الرقاقة 8255A في هذا المثال العناوين 0504h ،0502h ،0500h و 0506h جرى استخدام الرقاقة 16L8 لفك ترميز خطوط العنونة. تعمل الرقاقة 8255A بالنمط 1 (نمط دخل مقدوح ) لذلك كلما جرى الضغط على أحد المفاتيح يصبح المخرج (PC3) INTR للرقاقة 8255A مساويًا الـ 1 ويجري بالتالي توليد طلب مقاطعة من النمط 40h عبر المدخل INTR للمعالج. يبقى المخرج INTR للرقاقة 8255A مساويًا ال 1 حتى يقرأ المعالج ترميز ASCII للمعطيات على مدخل البوابة A نتيجة للنبضة على المخرج DAV' من لوحة المفاتيح ُتمسك البوابة A المعطيات على مداخلها كلما جرى الضغط على أحد المفاتيح وتجعل INTR=1 .
يقرأ برنامج المقاطعة التالي، في كل مرةٍ يجري فيها الضغط على أحد مفاتيح اللوحة، ترميز ASCII للمفتاح المضغوط ويضعه في المصفوفة FIFO يكتشف برنامج المقاطعة بعد قراءة 256 بايت أن المصفوفة FIFO قد امتلأت فيجب بالتالي المقاطعة على المدخل INTR للمعالج.
; interrupt service routine to read a key from the keyboard
PORTA EQU 500h
CNTR EQU 506h
FIFO DB 256 DUP (?)
INP DW ? ; SET AS OFFSET FIFO IN MAIN PROG
FIFOSize DW 256
KEY PROC FAR
PUSH AX
PUSH BX
PUSH DI
PUSH DX
MOV BX, INP
MOV DX, PORTA
IN AL,DX ; read the key
MOV [BX], AL
INC BX
CMP BX, FIFOSize ;test for queue full
JE FULL ; if queue is full
INC WORD PTR INP
JMP DONE
FULL: MOV AL, 8 ;DISABLE THE INTERRUPT
MOV DX, CNTR
OUT DX,AL
POP DX
POP DI
POP BX
POP AX
DONE: IRET
KEY END
هذه اخر تدوينة في هذا المجال ارجو ان يستفيد طلابنا مما قمنا بنشرة من احد الكتب في مجال الدوائر الموائمة و المعالجات الدقيقة ولغة التجميع
إرسال تعليق
لا تبخل علينا باقتراحك او قم بمشاركة الموضوع ليستفيد الاخرين ايضاً شكرا لزيارتك عزيزي الزائر