مقاطعة على وحدة تحكم AVR في Atmel AVR Studio. المقاطعات - دراسة AVR - كتالوج المقالات - وحدات التحكم الدقيقة - إنها سهلة! في أي بيئة لبرمجة المقاطعات متحكم

تعد أنظمة المقاطعة جزءًا مهمًا من أي نظام تحكم.

تعتمد مدى كفاءة أداء نظام المعالجات الدقيقة لوظائفه إلى حد كبير على تشغيله. يظهر الشكل العام للهيكل العام لنظام المقاطعة MK-51. 14.3.

توفر المتحكمات الدقيقة من عائلة MK-51 الدعم لخمسة مصادر للمقاطعة:

* وصول مقاطعتين خارجيتين عبر المدخلات INT0 وINT1 (خطوط المنفذ P3: P3.2 وP3.3، على التوالي)؛

* انقطاعان من المؤقتات/العدادات T/C0 وT/C1؛

* مقاطعة المنفذ التسلسلي.

يتم تسجيل طلبات المقاطعة في سجلات الوظائف الخاصة لوحدة التحكم الدقيقة: العلامات IE0، IE1، TF0، TF1 طلبات المقاطعة من INT0، INT1، T/C0 و T/C1 موجودة في سجل التحكم TCON (الجدول 14.4)، والأعلام RI وطلبات TI للمقاطعة من المنفذ التسلسلي - في سجل SCON للتحكم في المنفذ التسلسلي.

الجدول 14.4. تنسيق تسجيل TCON

0 IT0 تحديد نوع المقاطعة INT0

1 علامة طلب المقاطعة IE0 INT0

2 IT1 تحديد نوع المقاطعة INT1

3 IE1 إشارة طلب المقاطعة INT1

4 TR0 تمكين المؤقت/العداد 0

5 علامة تجاوز السعة TF0 (طلب المقاطعة) مؤقت/عداد 0

6 TR1 تمكين المؤقت/العداد 1

7 علامة تجاوز سعة TF1 (طلب المقاطعة) للمؤقت/العداد 1

يتم تعيين العلامات TF0 وTF1 بواسطة الأجهزة عند تجاوز سعة المؤقت/العداد المقابل (بشكل أكثر دقة، عندما ينتقل T/Cx من حالة "كل الآحاد" إلى حالة "كل الأصفار").

يتم تعيين العلامات IE0 وIE1 بواسطة الأجهزة من المقاطعات الخارجية IT0 وIT1، على التوالي. يمكن أن يتسبب طلب خارجي في ضبط العلم إما عندما يكون مستوى الإشارة عند الإدخال المقابل منخفضًا، أو عندما تتحول هذه الإشارة من مستوى مرتفع إلى مستوى منخفض (بتردد لا يتجاوز نصف تردد الساعة الخارجية لـ MK).

يتم تكوين نوع الطلب عن طريق إعداد البرنامج لبتات IT0 وIT1 في سجل التحكم TCON. يؤدي الإعداد ITx = 0 إلى تكوين نظام المقاطعة لطلب مستوى إشارة منخفض، أما ITx = 1 - فيضبط المقاطعة لطلب مستوى إشارة منخفض.

يتم تعيين علامتي TI وRI بواسطة جهاز الواجهة التسلسلية بعد نهاية الإرسال أو بعد نهاية الاستقبال، على التوالي.

جميع إشارات طلب المقاطعة المحددة متاحة برمجيًا للإعداد وإعادة التعيين. يؤدي تعيين علامة طلب المقاطعة في البرنامج إلى نفس الاستجابة من وحدة التحكم الدقيقة مثل تعيين نفس العلامة في الأجهزة.

تتم إعادة تعيين العلامات TF0 وTF1 بواسطة الأجهزة عند نقل التحكم إلى روتين المقاطعة المقابل.

يتم إجراء إعادة تعيين إشارات IEx في الأجهزة عند خدمة المقاطعة فقط إذا تم تكوين المقاطعة لاستشعار سقوط إشارة INTx. إذا تم تكوين المقاطعة لاستشعار مستوى إشارة الطلب، فيجب إجراء إعادة تعيين علامة IEx بواسطة برنامج خدمة المقاطعة، الذي يعمل على مصدر المقاطعة لإزالة الطلب.

لا يمكن إعادة ضبط علامتي TI وRI إلا عن طريق البرنامج.

يتم تمكين أو تعطيل كل نوع من المقاطعات بشكل فردي عن طريق تعيين أو مسح البتات المقابلة لسجل تمكين مقاطعة IE. يحتوي هذا السجل أيضًا على بت تعطيل عام لجميع المقاطعات. ويرد تنسيق سجل IE في الجدول. 14.5.

الجدول 14.5. تعيين بتات تسجيل IE

تسجيل الموقف

فن الإستذكار قليلا

وظيفة

تعطيل المقاطعات من جميع المصادر

غير مستعمل

غير مستعمل

تعطيل المقاطعة من منفذ تسلسلي

تعطيل مقاطعة المؤقت/العداد T/C1

تعطيل المقاطعة من مصدر خارجيإنت1

تعطيل المؤقت/عداد المقاطعة T/C0

تعطيل المقاطعة من مصدر خارجي INT0

يمكن تعيين كل نوع من المقاطعات برمجيًا بإحدى الأولويتين المحتملتين: 0 - الأدنى أو 1 - الأعلى.

يتم تكوين الأولويات عن طريق تعيين أو مسح البت المقابل في سجل أولوية مقاطعة IP. ويرد شكل هذا السجل في الجدول. 14.6.

عند تلقي طلبات المقاطعة في وقت واحد من مصادر لها أولويات مختلفة، تتم معالجة الطلب من المصدر ذي الأولوية الأعلى أولاً.

في حالة الاستلام المتزامن لعدة طلبات مقاطعة بنفس الأولوية، يتم تحديد ترتيب معالجتها بواسطة أجهزة المتحكم الدقيق ولا يمكن تغييرها بواسطة البرنامج. يتوافق هذا الترتيب مع تسلسل إشارات طلب مقاطعة الاستقصاء، والذي يبدو كما يلي:

IT0 -> TF0 -> IT1 -> TF1 -> (RI، TI)

الجدول 14.6. تعيينات بت تسجيل IP

تسجيل وظيفة ذاكري الموقف

7- غير مستخدم

6- غير مستخدم

5- غير مستخدم

4 PS أولوية مقاطعة المنفذ التسلسلي

3 مؤقت PT1/أولوية عداد المقاطعة T/C1

2 PX1 أولوية المقاطعة من مصدر خارجي INT1

1 مؤقت PT0/أولوية عداد المقاطعة T/C0

0 PX0 أولوية المقاطعة من مصدر خارجي INT0

يتكون استدعاء معالج المقاطعة الذي يتم تنفيذه بواسطة الأجهزة من الإجراءات التالية:

* حفظ قيمة عداد البرنامج على المكدس؛

يتم إصلاح نقاط إدخال معالج المقاطعة لكل مصدر مقاطعة في الأجهزة. وترد قيمها في الجدول. 14.7.

الجدول 14.7. عناوين نقاط الدخول لمعالجات المقاطعة

مصدر المقاطعة

عناوين نقاط الدخول لمعالجات المقاطعة

المقاطعة الخارجية( ايتو)

عداد الموقت (TFO)

المقاطعة الخارجية (IT1)

عداد الموقت (TF1)

المنفذ التسلسلي (R1 أو T1)

يجب أن يكون الأمر الأول لمعالج المقاطعة موجودًا في العنوان المحدد. كقاعدة عامة، مثل هذا الأمر هو أمر للانتقال دون قيد أو شرط إلى المكان الموجود في البرنامج حيث يوجد المعالج بالفعل.

عند التبديل إلى روتين معالجة المقاطعة، تلقائيًا، بغض النظر عن حالة سجل IE، يتم تعطيل جميع المقاطعات التي لها مستوى أولوية مساوٍ لمستوى أولوية المقاطعة الخاضعة للخدمة - أي يتم تعطيل المقاطعات المتداخلة ذات مستوى أولوية متساوٍ . وبالتالي، يمكن مقاطعة المقاطعة ذات الأولوية المنخفضة (التي تحتوي على "0" في البت المقابل من سجل IP) عن طريق مقاطعة ذات أولوية عالية (التي تحتوي على "1" في البت المقابل من سجل IP)، ولكن ليس ذات الأولوية المنخفضة. لا يمكن مقاطعة خدمة المقاطعة ذات الأولوية العالية بواسطة مصدر آخر.

تتم العودة من معالج المقاطعة باستخدام تعليمات RETI، التي تستعيد من المكدس قيمة عداد برنامج الكمبيوتر المخزن هناك في وقت استدعاء معالج المقاطعة، ومنطق أولوية المقاطعة.


دعونا نتحدث عن الانقطاعات.كلمة المقاطعة تتحدث عن نفسها، حيث يتم إيقاف العملية لبعض الوقت من أجل تنفيذ إجراءات إضافية. يمكن أن تكون المقاطعات خارجية أو داخلية. دعني أعطيك مثالاً بسيطاً سمعته من صديقي..

استعد لغسل الأطباق في المطبخ، بدأ بحماس وهو يشمر عن سواعده... لكن تبين أن الأطباق كانت دهنية واضطر للتوقف ليجد منظفًا لغسل الأطباق الدهنية على أحد رفوف المطبخ. وبعد ذلك واصل مهمته مرة أخرى. ولكن في مرحلة ما رن الهاتف، وتوقف مرة أخرى عن عمله، ورفع الهاتف، اتصلت حماته وقالت إنها قادمة للزيارة، لذلك كان عليه الذهاب إلى المتجر لشراء البقالة قبل أن تذهب وصل. ذهبت إلى المتجر وبعد ذلك فقط غسلت الأطباق.

يوضح هذا المثال نوعين من الانقطاعات، الأول يرتبط بتنفيذ العمل الرئيسي - البحث عن منظف للأطباق الدهنية - انقطاع داخلي، الثاني - مكالمة هاتفية- انقطاع خارجي.
في المتحكم الدقيق، تنشأ المقاطعات الخارجية بسبب الإشارات القادمة من مصادر أخرى، وتنشأ المقاطعات الداخلية بسبب الأجهزة المضمنة في المتحكم الدقيق نفسه. لماذا الانقطاعات جذابة للغاية؟
الأول هو أنه يمكننا إيقاف العملية الرئيسية لأداء وظيفة أخرى، ثم مواصلة هذه العملية.
والثاني، وربما الرئيسي في كثير من الحالات، يعتبر تسريع عملية أداء جميع الوظائف، وذلك بسبب الداخلية أجهزة إضافية. دعنا نعود إلى مثالنا. لنفترض أن صديقي بدأ في غسل الأطباق عندما وصلت زوجته إلى المنزل بالفعل. عندما رأى الأطباق الدهنية، طلب منها العثور على سائل لغسل الأطباق، وأثناء غسله، ستحضر له هذا السائل بالفعل. ولكن بعد ذلك رن الهاتف، التقطت زوجتي الهاتف وتحدثت مع والدتها وذهبت إلى المتجر. معًا، تم كل شيء بسرعة كبيرة!
ومن الأسهل أن تتعثر - على سبيل المثال. لا يوجد برنامج رئيسي.
صديقي يجلس على الأريكة ولا يفعل شيئًا، ترى مدبرة المنزل الأطباق المتسخة، وتخبره عنها، وبعد أن حصلت على الإذن، تبدأ في غسل نفسها. وعندما يرن الهاتف يقول لزوجته ارفعي سماعة الهاتف، والزوجة تتحدث في الهاتف، ويذهب الحديث إلى محل البقالة... جمال! في هذه الحالة، تعمل العديد من أجهزة الإدخال / الإخراج في وقت واحد في وحدة التحكم الدقيقة (في وحدات التحكم الدقيقة الحديثة يمكن أن يكون هناك الكثير منها) ويزداد الأداء الإجمالي للمعالج عدة مرات، ولكن تتم معالجة المقاطعات من الأجهزة بالتتابع واحدًا تلو الآخر (وليس في وقت واحد) )، حسب الأولوية (في مثالنا، الزوجة لها أولوية أعلى من مدبرة المنزل).

العديد من السجلات مسؤولة عن إدارة المقاطعات
SREG - سجل الحالة(تنص على). نحن ننظر إلى جدول أجهزة الإدخال / الإخراج. البت السابع من سجل SREG هو علامة I (المقاطعة)، والتي تسمى علامة تمكين المقاطعة العامة.إذا تم حذف العلامة (البت السابع هو صفر)، فسيتم تعطيل كافة المقاطعات. إذا تم رفع العلم (اضبط I على 1)، فإننا نقوم بتمكين المقاطعات.

يتم تعيين علامة I وإعادة تعيينها باستخدام الأوامر:
SEI - تمكين المقاطعات
CLI - تعطيل المقاطعات
يتم تعيين المقاطعات التي ستعمل باستخدام سجلات تسمى - أقنعة المقاطعة.
يتم تعيين أقنعة المقاطعة على النحو التالي:
TIMSK,..,..,.. – إدارة المقاطعات من أجهزة ضبط الوقت وغيرها من الأجهزة المدمجة.
GIMSK (GIKR في عائلة Mega) - إدارة جميع المقاطعات الخارجية.
تعتمد أقنعة المقاطعة بدورها على إشارات المقاطعة:
TIFR وGIFR على التوالي(يجب عدم الخلط بينه وبين علامة تمكين المقاطعة العامة).

تسلسل تنفيذ المقاطعة:
عند تشغيل وحدة التحكم الدقيقة، يتم إعادة تعيين كافة أعلام المقاطعة إلى 0. لتمكين المقاطعات، يجب على البرنامج تعيين العلامة I الخاصة بسجل SREG على 1. بعد ذلك، قم بتسجيل سجلات القناع مع مجموعة المقاطعات المحلية (المقاطعات التي نحتاجها) .
عند وصول طلب (إشارة) مقاطعة، فإنه يرفع إشارة المقاطعة (حتى لو كانت المقاطعة معطلة، وذلك لتنظيم المقاطعات المتداخلة والأولوية بين المقاطعات المختلفة). إذا لم يتم تعطيل المقاطعات، فسوف تقوم وحدة التحكم بالاتصال بالجهة المناسبة (ناقلات المقاطعة) - ناقلات المقاطعة، إيقاف البرنامج الحالي مؤقتًا.
ناقلات المقاطعةهو خط ثابت في منطقة البرنامج حيث يذهب البرنامج عند حدوث المقاطعة.
يتم استدعاء القائمة الكاملة لنواقل المقاطعة مقاطعة جدول المتجهات، الذي يقع في بداية كود البرنامج.
لذلك، في لحظة الوصول إلى متجه المقاطعة، تتم إعادة تعيين علامة I الخاصة بسجل SREG والعلامة التي تسببت في المقاطعة إلى 0، مما يؤدي إلى تعطيل المقاطعات الأخرى. في حالة حدوث طلبات مقاطعة أخرى أثناء تنفيذ المقاطعة، تظل إشارات هذه المقاطعات مرفوعة. عند الانتهاء من المقاطعة الحالية، يتم رفع علامة I الخاصة بسجل SREG، مما يسمح بتنفيذ المقاطعة التالية. إذا وصلت عدة طلبات وتم رفع أعلامها، فسيتم تنفيذ المقاطعة التي يكون متجهها أصغر عند العنوان الموجود في الجدول، الأقرب إلى بداية الذاكرة، أولاً. ويتبعه الثاني، وهكذا. بالإضافة إلى ذلك، يمكن للمبرمج تنظيم ما يسمى بالمقاطعة المتداخلة، عندما تحدث مقاطعة أخرى أثناء تنفيذ برنامج المقاطعة. ثم يتم إيقاف تنفيذ المقاطعة الحالية وتنفيذ مقاطعة جديدة، وبعد ذلك يتم استئناف تنفيذ المقاطعة المتوقفة.

على سبيل المثال، يتم إعطاء جدول متجهات المقاطعة لـ ATtiny2313

جدول متجه المقاطعة لـ Atmega16 هو كما يلي:

عند المقارنة، الجداول غير متطابقة على الإطلاق.
في عائلة ATtiny، يشغل خط متجه المقاطعة 16 بت، وفي عائلة Mega يستغرق 32 بت (انتبه إلى عناوين متجهات المقاطعة؛ دعني أذكرك أن سطر العنوان في منطقة البرنامج يمثله 16 بت -كلمة بت).

قد يبدو رمز البرنامج الخاص بـ ATtiny2313 كما يلي:
.cseg .org 0 rjmp إعادة تعيين rjmp INT_0 rjmp INT_1 rjmp Timer1_capt1 rjmp Timer1_comp1 rjmp Timer1_OVF1 rjmp Timer0_OVF0 rjmp UART_RX rjmp UART_UDRE rjmp UART_TX rjmp ANA_COMP rjmp PCINT rjmp Timer1_compB rjmp Timer0_ compA rjmp Timer0_compB rjmp USI_START rjmp USI_OVERFLOW rjmp EE_READY rjmp WDT_ OVERFLOW

كما ترون، يقوم متجه المقاطعة بإنشاء قفزة نسبية إلى تسميات برنامج المقاطعة. ويبين الجدول أدناه الخيارات؛ 1. عندما لا تكون هناك انقطاعات؛ 2، 3. مع المقاطعة الخارجية عند الإدخال INT_1.
إذا كانت التسميات "فارغة" (لا يوجد برنامج تحت التسمية)، فلن يحدث شيء، ويقوم البرنامج "بتشغيل" التسميات المتبقية بشكل تسلسلي ويصل بأمان إلى الأمر RETI- عودة المقاطعة - الخروج من معالج المقاطعةكما هو موضح في العمود الأول من الجدول.

لتنفيذ برنامج مقاطعة، على سبيل المثال، عند إدخال INT_1، تحتاج إلى إزالة تسمية INT_1: من القائمة. يظهر هذا بشكل تخطيطي في العمود الثاني من الجدول.
ولكن، من غير المناسب للمبرمج أن يكتب جميع المقاطعات ويفصل بينها تسميات في كل مرة، خاصة في النماذج الأحدث، حيث يكون الجدول كبيرًا جدًا؛ فمن الأسهل كتابة أمر RETI على الفور في سطر متجه المقاطعة إذا كان لا يتم استخدام المقاطعة. ثم سيظهر البرنامج كما هو موضح في العمود الثالث من الجدول.

يمكن أن تحتوي وحدات التحكم AVR، وفقًا للطراز، من 1 إلى 8 مدخلات المقاطعات الخارجية.
دعونا ننظر في نظام إدارة المقاطعة الخارجية. لهذا الغرض، يتم توفير المجموعات التالية من سجلات الإدخال/الإخراج اعتمادًا على النموذج (راجع ورقة البيانات المقابلة):
- GIMSK، EIFR، PCMSK، MCUCR؛
- جيكر، جيفر، مكوكر؛
- إيمسك، إيكر، إيفر؛
GIMSK، GIKR، EIMSK - أقنعة المقاطعة،
EIFR، PCMSK، GIFR، EIFR - أعلام المقاطعة
للإذن أو المنع المقاطعات الخارجيةتهدف سجلات التحكم إلى: GIMSK- (سجل قناع المقاطعة العام) (Tiny)، GICR- (سجل التحكم العام في المقاطعة) (Mega)، MCUCR - (سجل التحكم MCU)




EIFR- تسجيل علامة المقاطعة الخارجية: 1 - ممكّن، 0 - معطل. تسمح كل بتة (علامة) للدبوس المقابل بالعمل كمصدر للمقاطعة.

تسجيل GIMSK بتات التحكم:
البت 7 - INT1: طلب المقاطعة الخارجية 1 تمكين - بت تمكين المقاطعة INT1: 1 - ممكّن، 0 - معطل. سيتم إنشاء المقاطعة حتى لو تم تكوين طرف INT1 كمخرج. يتم تعيين البت INT1 للمقاطعة في سجل إشارة EIFR. تتم مزامنة طرف INT1 مع مولد الساعة.

البت 6 - INT0: طلب المقاطعة الخارجية 0 تمكين - بت تمكين المقاطعة INT0: 1 - ممكّن، 0 - معطل. سيتم إنشاء المقاطعة حتى لو تم تكوين طرف INT0 كمخرج. يتم تعيين بت INT0 للمقاطعة في سجل إشارة EIFR. تتم مزامنة دبوس INT10 مع مولد الساعة.

البت 5 – PCIE: تمكين تغيير المقاطعة - بت تمكين المقاطعة على PCINT0... 7 دبابيس: 1 - ممكّن، 0 - معطل. سيؤدي أي تغيير في أي من أطراف PCINT0...7 إلى إنشاء مقاطعة. يتم تكوين الدبابيس PCINT0...7 للمقاطعة بشكل فردي، عن طريق البتات الموجودة في سجل إشارة PCMSK.

بي إم إس كيه- دبوس تغيير قناع المسجل - سجل العلم PCMSK: 1 - مسموح، 0 - معطل. تسمح كل بتة (علامة) للدبوس المقابل بالعمل كمصدر للمقاطعة. لا تتم مزامنة أطراف PCINT0...7 مع مولد الساعة، أي. تحدث المقاطعة عند حدوث تغيير في أي من الأطراف.

ميجا8

وسجل العلم المقابل


بت 7

البت 6 - INT0: طلب المقاطعة الخارجية 0 تمكين - بت تمكين المقاطعة INT0: 1 - ممكّن، 0 - معطل. سيتم إنشاء المقاطعة حتى لو تم تكوين طرف INT0 كمخرج. تم تعيين بت INT0 للمقاطعة في سجل إشارات GIFR



GIFR - تسجيل علامة المقاطعة العامة: 1 - ممكّن، 0 - معطل. تسمح كل بتة (علامة) للدبوس المقابل بالعمل كمصدر للمقاطعة.

بتات التحكم في تسجيل GICR:
بت 7– : تمكين طلب المقاطعة الخارجية 1 – تمكين المقاطعة بت INT1: 1 – مسموح، 0 – ممنوع. سيتم إنشاء المقاطعة حتى لو تم تكوين طرف INT1 كمخرج. تم تعيين بت INT1 للمقاطعة في سجل إشارات GIFR

البت 6 - INT0: طلب المقاطعة الخارجية 0 تمكين - تمكين المقاطعة بت INT0: 1 – مسموح، 0 – ممنوع. سيتم إنشاء المقاطعة حتى لو تم تكوين طرف INT0 كمخرج. تم تعيين بت INT0 للمقاطعة في سجل إشارات GIFR

البت 5 - INT2: تمكين طلب المقاطعة الخارجية 2 - تمكين المقاطعة بت INT2: 1 – مسموح، 0 – ممنوع. سيتم إنشاء المقاطعة حتى لو تم تكوين طرف INT2 كمخرج. تم تعيين بت INT2 للمقاطعة في سجل إشارات GIFR

يتم التحكم في وظائف مدخلات INT0 وINT1 في جميع وحدات التحكم بواسطة البتات ذات الترتيب المنخفض لسجل MCUCR

MCUCR - سجل التحكم MCU
بت التحكم:
البتات 1، 0 - ISC01، ISC00 (التحكم في تحسس المقاطعة 0 البت 1 والبت 0) - تحدد حالة هذه البتات الحدث على طرف INT0، مما يؤدي إلى إنشاء مقاطعة INT0:
ISC01=0، ISC00=0 - مستوى الصفر المنطقي؛
ISC01=0، ISC00=1 – أي تغيير في الحالة المنطقية؛
ISC01=1، ISC00=0 – على حافة السقوط؛
ISC01=1، ISC00=1 – على حافة صاعدة.

البتات 3، 2 - ISC11، ISC10 (التحكم في تحسس المقاطعة 1 بت 1 وبت 0) - تحدد حالة هذه البتات مستوى الإشارة عند طرف INT1، الذي يولد مقاطعة INT1:
ISC11=0، ISC10=0 – مستوى الصفر المنطقي؛
ISC11=0، ISC10=1 – أي تغيير في الحالة المنطقية؛
ISC11=1، ISC10=0 – على حافة السقوط؛
ISC11=1، ISC10=1 – على حافة صاعدة.

حسنًا، يبدو أننا تحدثنا إلى الحد الأدنى عن المقاطعات الخارجية.
من الواضح أنه لكي تعمل المقاطعات، يجب تسجيلها وفقًا لذلك.
دعونا نضيف تهيئة المقاطعة على INT1 التي بدأت صغيرة على الحافة الصاعدة للإشارة:

إل دي آر 16.0x80؛ اكتب في r16 الرقم 0b10000000 ldi r17.0x0C ؛ اكتب في r17 الرقم 0b00001100 خارج MCUCR,r17 ؛ سيتم إنشاء المقاطعة على الحافة الصاعدة ISC11=1, ISC10=1 خارج GIMSK,r16 ؛ اضبط القناع INT0 sei
بالمناسبة، يمكنك إنشاء مقاطعة على tiny2313 على أي PCINT0...7 دبابيس, على ميجا حتى السلسلة 48 هذه المميزات غير متوفرة...
هناك عمليات قد تحدث خلالها مقاطعات يمكن أن تتسبب في تعطل البرنامج. في مثل هذه الحالات، قبل بدء العملية نكتب CLI، وبعد SEI. تسمى مثل هذه العمليات - الذري.
من المستحسن أن تكون برامج المقاطعة مضغوطة ويتم تنفيذها بأقصى سرعة، لأن الغرض من أي مقاطعة هو التقاط حدث ما. إذا وفقا ل أسباب مختلفةيعمل البرنامج ببطء، وهو ما يكفي لتسجيل الحدث ومعالجته في وقت لاحق قليلا.

من أجل عدم ازدحام المواد المقدمة بمعلومات غير ضرورية، أوصي بأن يستخدم القراء أوراق البيانات، وإذا كان كل شيء غير واضح، فطرح الأسئلة في كثير من الأحيان على المنتديات.
بعد ذلك، سننظر بالتفصيل في المقاطعات الداخلية بناءً على المؤقتات المضمنة. القراء. للمشاركة في التصويت، قم بالتسجيل والدخول إلى الموقع باستخدام اسم المستخدم وكلمة المرور الخاصة بك.

إحدى مزايا وحدة التحكم الدقيقة ATmega8 هي نطاقها الواسع من المقاطعات المختلفة.

مقاطعةهو حدث يتم عند حدوثه تعليق تنفيذ البرنامج الرئيسي ويتم استدعاء دالة تعالج مقاطعة من نوع معين.

وتنقسم المقاطعات إلى داخلية وخارجية. تتضمن مصادر المقاطعات الداخلية وحدات التحكم الدقيقة المضمنة (المؤقتات، وجهاز الإرسال والاستقبال USART، وما إلى ذلك). تحدث المقاطعات الخارجية عندما تصل الإشارات الخارجية إلى أطراف المتحكم الدقيق (على سبيل المثال، الإشارات الموجودة عند أطراف RESET و INT). يتم تحديد طبيعة الإشارات المؤدية إلى حدوث المقاطعة في سجل التحكم MCUCR، ولا سيما في البتات - ISC00 (البت 0) وISC01 (البت 1) للإدخال INT 0؛ ISC10 (bit2) وISC11 (bit3) لإدخال INT1.

في وحدة التحكم الدقيقة ATmega8، كل مقاطعة لها مقاطعتها الخاصة ناقلات المقاطعة(العنوان الموجود في بداية منطقة ذاكرة البرنامج حيث يتم تخزين أمر الانتقال إلى روتين المقاطعة المحدد). في Mega8، جميع المقاطعات لها نفس الأولوية. في حالة حدوث عدة مقاطعات في وقت واحد، ستتم معالجة المقاطعة ذات رقم المتجه الأقل أولاً.

ناقلات المقاطعة في Atmega8

عنوان مصدر المقاطعة وصف
0x0000 إعادة ضبط إعادة ضبط الإشارة
0x0001 إنت0 طلب المقاطعة الخارجية عند إدخال INT0
0x0002 إنت1 طلب المقاطعة الخارجية عند إدخال INT1
0x0003 تي/C1 التقاط الموقت T/C1
0x0004 تي/C1 تطابق مؤقت T/C1 قارن التسجيل أ
0x0005 تي/C1 تطابق مع سجل المقارنة B للمؤقت T/C1
0x0006 تي/C1 تجاوز العداد T/C1
0x0007 T/C0 تجاوز العداد T/C0
0x0008 SPI اكتمل نقل بيانات SPI
0x0009 UART أكمل جهاز الإرسال والاستقبال UART استقبال البيانات.
0x000أ UART سجل بيانات UART فارغ
0x000B UART تم الانتهاء من نقل البيانات عن طريق جهاز الإرسال والاستقبال UART
0x000C ANA_COMP مقاطعة من المقارنة التناظرية

إدارة المقاطعة

4 سجلات مسؤولة عن إدارة المقاطعات في ATmega8:

جيمسك(المعروف أيضًا باسم GICR) - حظر/تمكين المقاطعات بناءً على الإشارات عند المدخلات INT0 وINT1

GIFR- إدارة كافة المقاطعات الخارجية

تيمسك, تيفر- إدارة الانقطاعات من أجهزة ضبط الوقت / العدادات

يسجل جيمسك (جيكر)

INTFx=1: حدثت مقاطعة عند إدخال INTx. عند الدخول إلى روتين معالجة المقاطعة، تتم إعادة تعيين INTFx تلقائيًا إلى حالة السجل. 0

يسجل تيمسك

7 6 5 4 3 2 1 0
TOIE1
OCIE1A
OCIE1B
-
تيسي
-
توي0
-

TOIE1 = 1: تم تمكين مقاطعة تجاوز السعة T/C1

أوسيي1A=1: المقاطعة عندما يتطابق سجل المقارنة A مع محتويات العداد T/C1 الممكّن

أوسيي1B=1: المقاطعة عندما يتطابق سجل المقارنة B مع محتويات العداد T/C1 الممكّن

تيسي=1: تم تمكين المقاطعة عند استيفاء شرط الالتقاط

توي0=1: تمكين مقاطعة تجاوز السعة T/C0

يسجل تيفر

7 6 5 4 3 2 1 0
TOV1
OCF1A
OCF1B
-
ICF1
-
TOV0
-

TOV1=1: حدث تجاوز T/C1

OCF1A=1: سجل المقارنة A يتزامن مع محتويات العداد T/C1 المسموح بها

OCF1B=1: سجل المقارنة B يطابق محتويات العداد T/C1 المسموح بها

ICF = 1: تم استيفاء شروط الالتقاط

TOV0=1: حدث تجاوز T/C0

عند الدخول إلى الروتين الفرعي لمعالجة المقاطعة، تتم إعادة تعيين علامة تسجيل TIFR المقابلة للمقاطعة تلقائيًا إلى حالة السجل. 0

تعمل المقاطعات فقط عند تمكين المقاطعات العامة في سجل حالة SREG (البت 7 = 1). عند حدوث مقاطعة، تتم إعادة تعيين هذا البت تلقائيًا إلى 0، مما يؤدي إلى تعطيل المقاطعات اللاحقة.

في هذا المثال، يتم تمكين طرف INT0 في وضع الإدخال المنسدل. عندما يتم تقصير الدبوس إلى الأرض باستخدام زر، يتم تعيين المنطق 0 عليه (تنخفض حافة الإشارة من جهد الإمداد إلى 0) ويتم تشغيل معالج المقاطعة، مما يؤدي إلى تشغيل المصباح الكهربائي المتصل بالدبوس الصفري للمنفذ ب

لامبون باطلة ()
{
بورتب.0=1;
DDRB.0=1;
}

مقاطعة باطلة ext_int0_isr(void)
{
لامبون();
}

DDRD.2=0;
PORTD.2=1;

سرج|= (1 بينما(1) (

يوضح المثال أعلاه أيضًا كيفية تعيين متجهات المقاطعة في Code Vision AVR (interrupt void ext_int0_isr(void)). يتم تعيين نواقل المقاطعة بشكل مشابه للحالات الأخرى:

EXT_INT0 2
EXT_INT1 3
تيم2_كومب 4
TIM2_OVF 5
تيم1_كابت 6
تيم1_كومبا 7
تيم1_كومبب8
تيم1_أوف 9
تيم0_أوف 10
SPI_STC11
USART_RXC 12
USART_DRE 13
USART_TXC 14
أدك_ينت 15
EE_RDY 16
آنا_كومب 17
تي واي 18
SPM_READY 19

جزء المتحكمات الدقيقة AVRيتضمن عددًا كبيرًا من الأجهزة الطرفية (ADC، وTimer/عدادات، وEXTI، وAnalog Comparator، وEEPROM، وUSART، وSPI، وI2C، وما إلى ذلك)، ويمكن لكل منها تنفيذ إجراءات معينة على البيانات/الإشارات والمعلومات الأخرى. يتم دمج هذه الأجهزة في وحدة التحكم الدقيقة لتحسين كفاءة التطبيق وتقليل التكاليف عند تطوير جميع أنواع الأجهزة المعتمدة على وحدات التحكم الدقيقة AVR.

يقوم المعالج بالاتصال/التحكم في الأجهزة الطرفية من خلال سجلات الإدخال/الإخراج الموجودة في ذاكرة البيانات، مما يسمح باستخدامها مثل المتغيرات العادية. يحتوي كل جهاز على سجلات الإدخال/الإخراج الخاصة به.

يمكن تقسيم كافة سجلات الإدخال/الإخراج إلى ثلاث مجموعات: مسجلات البيانات، وسجلات التحكم، وسجلات الحالة.

باستخدام سجلات التحكم يتم تهيئة الجهاز ليعمل في وضع أو آخر وبتردد ودقة معينة وغيرها، وباستخدام سجلات البيانات تتم قراءة نتيجة العمل من هذا الجهاز(التحويل التناظري إلى الرقمي، البيانات المستلمة، قيمة المؤقت/العداد، وما إلى ذلك). يبدو أنه لا يوجد شيء معقد هنا (في الواقع، لا يوجد شيء معقد حقًا هنا :))، وتشغيل الجهاز، والإشارة إلى وضع التشغيل المطلوب، وبعد ذلك يبقى فقط قص الكوبونات، وقراءة البيانات الجاهزة واستخدامها في العمليات الحسابية. السؤال برمته هو "متى" قراءة هذه البيانات بالذات (هل أكمل الجهاز عمله أم لا يزال يعالج البيانات)، لأن جميع الأجهزة الطرفية تعمل بالتوازي مع نواة المتحكم الدقيق، وحتى على ترددات مختلفة.يطرح السؤال حول تنفيذ الاتصال والتزامن بين المعالج و الجهاز الطرفي.

كما خمنت على الأرجح، لتنفيذ الاتصال والمزامنة بين الجهاز والمعالج، يتم استخدام "سجلات الحالة"، التي تخزن حالة التشغيل الحالية لجهاز معين. كل حالة قد يكون فيها الجهاز تتوافق مع "بت في" حالة التسجيل" (العلم)، قيمتها الحالية "تتحدث" عن الحالة الحالية لهذا الجهاز أو وظيفته الفردية (العمل مكتمل / غير مكتمل، خطأ أثناء معالجة البيانات، التسجيل فارغ، وما إلى ذلك).

يتم تنفيذ آلية الاتصال بين المعالج والجهاز الطرفي عن طريق استقصاء العلم، وهو المسؤول عن وظيفة معينة لهذا الجهاز. اعتمادًا على قيمة علامة معينة (حالة الجهاز)، يمكنك تغيير تدفق تنفيذ البرنامج (التفرع). على سبيل المثال:

التحقق من تعيين علامة معينة (حدث بعض الأحداث):

إذا (RegX & (1<< Flag) ) // إذا تم تعيين العلامة في سجل RegX
{
// قم بعمل ما
}

في انتظار الانتهاء من بعض الإجراءات (الحدث):

بينما(!(RegX & (1<

يعد الاستعلام عن العلامات مهمة كثيفة الاستخدام للموارد، سواء من حيث حجم البرنامج أو سرعته. نظرًا لأن إجمالي عدد العلامات في متحكمات AVR كبير جدًا (ميزة)، فإن تنفيذ الاتصال بين المعالج والجهاز عن طريق إشارات الاقتراع يؤدي إلى انخفاض في كفاءة (سرعة الكود / حجم الكود) للبرنامج الذي تكتبه، بالإضافة إلى ذلك، يصبح البرنامج مربكًا للغاية، مما يساهم في ظهور أخطاء يصعب اكتشافها حتى مع التصحيح التفصيلي للكود.

من أجل زيادة كفاءة برامج المتحكمات الدقيقة AVR، وكذلك لتسهيل عملية إنشاء وتصحيح هذه البرامج، قام المطورون بتجهيز جميع الأجهزة الطرفية بـ "مصادر المقاطعة" ( مصادر المقاطعة)، قد تحتوي بعض الأجهزة على مصادر مقاطعة متعددة.

باستخدام مصادر المقاطعة، يتم تنفيذه آلية المزامنة، بين المعالج والجهاز الطرفي، أي أن المعالج سيبدأ في تلقي البيانات وعلامات الاستقصاء والإجراءات الأخرى على الجهاز الطرفي فقط عندما يكون الجهاز جاهزًا لذلك (سيبلغ عن اكتمال معالجة البيانات، خطأ أثناء معالجة البيانات، السجل فارغ، وما إلى ذلك). وما إلى ذلك)، عن طريق إنشاء "طلب مقاطعة" ( طلب المقاطعة)، اعتمادًا على قيمة بعض العلامات (الجهاز/الوظيفة/حالة الحدث).

في الأدبيات، في كثير من الأحيان، يتم اختصار سلسلة الأحداث بأكملها، من "طلب المقاطعة" (IRQ) إلى "إجراء خدمة المقاطعة" (ISR)، على أنها مقاطعة ( مقاطعة).

ما هي المقاطعة؟


المقاطعة هي إشارة تُعلم المعالج بحدوث حدث ما. في هذه الحالة، يتم تعليق تنفيذ التسلسل الحالي للأوامر ويتم نقل التحكم إلى إجراء معالجة المقاطعة المطابق لهذا الحدث، وبعد ذلك يستمر تنفيذ التعليمات البرمجية تمامًا من النقطة التي تمت مقاطعتها فيها (عودة التحكم). (ويكي)

روتين المقاطعة(روتين خدمة المقاطعة) ليس أكثر من مجرد وظيفة/روتين فرعي يجب تنفيذه عند وقوع حدث معين. وسوف نستخدم كلمة "إجراء" للتأكيد على اختلافها عن جميع الوظائف الأخرى.

الفرق الرئيسي بين الإجراء والوظائف البسيطة هو أنه بدلاً من "العودة من الوظيفة" المعتادة (أمر التجميع RET)، يجب عليك استخدام "العودة من المقاطعة" (أمر المجمع RETI) - " العودة من المقاطعة".

خصائص مقاطعة AVR:

  • يحتوي كل جهاز طرفي يشكل جزءًا من وحدات التحكم الدقيقة AVR على مصدر مقاطعة واحد على الأقل. من بين كل هذه المقاطعات، يجب أيضًا تضمين مقاطعة إعادة التعيين، والتي يختلف الغرض منها عن جميع المقاطعات الأخرى.
  • تحتوي كل مقاطعة على ناقل (رابط) معين بشكل صارم يشير إلى روتين خدمة المقاطعة. توجد جميع متجهات المقاطعة في بداية ذاكرة البرنامج وتشكل معًا "جدول متجهات المقاطعة".
  • ترتبط كل مقاطعة بـ "بت تمكين المقاطعة" المحدد، وبالتالي، من أجل استخدام مقاطعة معينة، يجب عليك الكتابة في سجل "بت تمكين المقاطعة" الخاص بها. وحدة. علاوة على ذلك، بغض النظر عما إذا كنت قد قمت بتمكين مقاطعات معينة أم لا، فلن يبدأ المتحكم الدقيق في معالجة هذه المقاطعات حتى تتم كتابة مقاطعة منطقية إلى "بت تمكين المقاطعة العامة" في سجل حالة SREG. وأيضًا، لتعطيل كافة المقاطعات (لـ إلى أجل غير مسمى)، يجب كتابة صفر منطقي إلى بتة تمكين المقاطعة العامة.

لا يمكن تعطيل مقاطعة إعادة التعيين، على عكس جميع المقاطعات الأخرى. تسمى هذه الانقطاعات أيضًا بالمقاطعات غير القابلة للإخفاء.

  • كل مقاطعة لها أولوية محددة بدقة. تعتمد أولوية المقاطعة على موقعها في "جدول متجهات المقاطعة"، فكلما انخفض رقم المتجه في الجدول، زادت أولوية المقاطعة، أي أن الأولوية العليا هي إعادة تعيين المقاطعة، والتي تقع أولاً في الجدول، وبالتالي في برامج الذاكرة.المقاطعة الخارجية INT0، التي تتبع مقاطعة إعادة التعيين في "جدول متجهات المقاطعة"، لها أولوية أقل من أولوية إعادة التعيين، ولكنها أعلى من أولوية جميع المقاطعات الأخرى، وما إلى ذلك.

يمكن نقل جدول متجه المقاطعة، باستثناء ناقل إعادة الضبط، إلى بداية قسم التمهيد في ذاكرة Flash عن طريق تعيين بت IVSEL في سجل GICR. يمكن أيضًا نقل متجه إعادة التعيين إلى بداية قسم التمهيد في ذاكرة الفلاش عن طريق برمجة بت المصهر - BOOTRST.



الشكل 1: جدول ناقلات المقاطعة ATmega16

مقاطعة النموذج الروتيني


للإعلان عن وظيفة باعتبارها روتين معالجة المقاطعة، يجب عليك اتباع قواعد معينة للنماذج الأولية حتى يتمكن المترجم/الرابط من تحديد المقاطعة التي تحتاجها وربطها بشكل صحيح مع روتين المعالجة الخاص بها.

أولاً، لا يمكن لروتين خدمة المقاطعة قبول أي شيء كوسيطة (باطل)، ولا يمكنه أيضًا إرجاع أي شيء (باطل). ويرجع ذلك إلى حقيقة أن جميع المقاطعات في AVR غير متزامنة، لذلك ليس من المعروف أين سيتم مقاطعة تنفيذ البرنامج، ومن الذي سيتم استلامه ومن الذي سيتم إرجاع القيمة إليه، وكذلك لتقليل وقت الإدخال و الخروج من المقاطعة.

باطلة (باطلة)

ثانيًا، قبل النموذج الأولي للوظيفة، يجب أن تشير إلى أنه إجراء معالجة المقاطعة. كما تعلم، في لغة C يتم تنفيذ الكود المستخدم في الوظيفة الرئيسية فقط. نظرًا لعدم استخدام إجراء معالجة المقاطعة في الوظيفة الرئيسية في أي مكان، بحيث لا "يتخلص" المترجم منه باعتباره غير ضروري، يجب الإشارة قبل النموذج الأولي للإجراء إلى أن هذه الوظيفة هي إجراء معالجة المقاطعة.

نموذج أولي لإجراءات معالجة المقاطعة في بيئة AVR Studio

#يشمل

ISR (XXX_vect)
{

}

في AVR Studio (AVRGC)، يبدأ كل روتين مقاطعة بتعريف ماكرو ISR، متبوعًا بالبنية التالية بين قوسين:

XXX_vect

حيث "XXX" هو اسم متجه المقاطعة. يمكن العثور على جميع أسماء المتجهات الخاصة بوحدة التحكم الدقيقة AVR المحددة في "جدول متجه المقاطعة" بورقة بيانات وحدة التحكم الدقيقة أو في ملف الرأس الخاص بها. على سبيل المثال، يظهر "جدول متجهات المقاطعة" للمتحكم الدقيق ATmega16 في الشكل 1، حيث يتم إدراج جميع أسماء متجهات المقاطعة في العمود المصدر، ويمكن أيضًا العثور على الأسماء في ملف الرأس الخاص بهذا المتحكم الدقيق (C :\Program Files\Atmel\AVR Tools\AVR Toolchain\avr\include\avr\iom16.h)، انظر الشكل 2. كل ما يتعين علينا فعله هو العثور على اسم المتجه الذي نحتاجه في الجدول وإضافة اللاحقة "_vect" إليها.


الشكل 2: ملف رأس ATmega16 لـ AVR Studio

على سبيل المثال، لنكتب إجراء معالجة المقاطعة لتلقي بايت عبر USART (USART, Rx Complete):

ISR (USART_RXC_vect)
{
// مقاطعة جسم المعالج
}

بالمناسبة: قبل استخدام أي مقاطعة في AVR Studio، يجب عليك تضمين ملفات الرأس io.h وinterrupt.h في المشروع:

#يشمل
#يشمل

يمكنك قراءة المزيد حول معالجات المقاطعة في AVR Studio (AVRGC) في مقدمة قسم معالجة المقاطعة في avr-libc.

النموذج الأولي لإجراء معالجة المقاطعة في بيئة ImageCraft

#pragmainterrupt_handler : iv_XXX
فارغ< handler_name>(فارغ)
{
// مقاطعة جسم المعالج
}

في بيئة ImageCraft، يبدو روتين مقاطعة النموذج الأولي كما يلي:

فارغ< handler_name>(فارغ)

أين ، هذا هو الاسم الذي تريد منحه لمعالج المقاطعة هذا. أحد متطلبات الإعلان عن إجراءات معالجة المقاطعة هو أنه قبل النموذج الأولي للوظيفة، يجب الإشارة إلى أنه معالج المقاطعة. يتم ذلك باستخدام توجيه براغما interrupt_handler :

#pragmainterrupt_handler : iv_XXX

أين هذا هو اسم الوظيفة التي سيتم استخدامها كمعالج للمقاطعة، والبناء "iv_XXX" هو اسم متجه المقاطعة (XXX) مع البادئة "iv_". كما في حالة AVR Studio، جميع أسماء المتجهات يمكن العثور على متحكم AVR محدد في "جدول متجه المقاطعة" الخاص بورقة البيانات الخاصة بوحدة تحكم دقيقة معينة أو في ملف الرأس الخاص به (انظر الشكل 3).


الشكل 3: ملف رأس ATmega16 لـ ImageCraft IDE

على سبيل المثال، الإجراء الخاص بمعالجة المقاطعة لتلقي بايت عبر USART (USART، Rx Complete) في بيئة ImageCraft سيبدو كما يلي:

#pragmainterrupt_handler usart_rxc_isr: iv_USART_RXC
باطلة usart_rxc_isr (باطلة)
{
// مقاطعة جسم المعالج
}

يمكن العثور على مزيد من المعلومات حول إجراءات معالجة المقاطعة في ImageCraft IDE في قائمة التعليمات->برمجة AVR->معالجات المقاطعة في بيئة التطوير.

في بعض الأحيان، إذا احتاجت العديد من معالجات المقاطعة إلى القيام بنفس الشيء، فيمكنك لحفظ ذاكرة البرنامج توجيه عدة متجهات مقاطعة إلى نفس روتين المقاطعة.

في AVR Studio يبدو الأمر كما يلي:

ISR (INT0_vect)
{
// قم بعمل ما
}
ISR(INT1_vect, ISR_ALIASOF(INT0_vect) ) ;

أولاً يأتي إجراء معالجة المقاطعة لمتجه معين، في هذه الحالة INT0. يمكن لجميع الإجراءات الأخرى الرجوع إلى أي معالج مقاطعة باستخدام البنية:

ISR (YYY_vect، ISR_ALIASOF(XXX_vect) ) ;

حيث YYY هو اسم متجه المقاطعة الذي يشير إلى معالج المقاطعة المعلن مسبقًا للمتجه XXX.

في ImageCraft يبدو الأمر كما يلي:

#pragmainterrupt_handler : iv_XXX : iv_YYY
فارغ< handler_name>(فارغ)
{
// مقاطعة جسم المعالج
}

#pragmainterrupt_handler : iv_XXX
#pragmainterrupt_handler : iv_YYY
فارغ< handler_name>(فارغ)
{
// مقاطعة جسم المعالج
}

حيث يشير المتجهان XXX وYYY إلى نفس معالج المقاطعة .

كيف تعمل المقاطعة في المتحكمات الدقيقة AVR؟

1. لنفترض أن " طلب المقاطعة"(IRQ).

بالمناسبة: في حالة حدوث عدة طلبات لمعالجة المقاطعة في وقت واحد، ستتم معالجة المقاطعة ذات الأولوية القصوى أولاً، وستتم معالجة جميع الطلبات الأخرى بعد اكتمال المقاطعة ذات الأولوية العالية.

2. فحص.

إذا تم تعيين بت التمكين لهذه المقاطعة (بت تمكين المقاطعة)، وتم تعيين بت I-bit (بت تمكين المقاطعة العامة) لسجل حالة المعالج (SREG)، فسيبدأ المعالج في إعداد روتين خدمة المقاطعة، بينما يتم تعيين بت التمكين العام لهذه المقاطعة. تتم إعادة تعيين بت تمكين المقاطعة (I-bit من السجل SREG)، وبالتالي تعطيل جميع المقاطعات الأخرى. يحدث هذا حتى لا يتمكن أي حدث آخر من مقاطعة معالجة المقاطعة الحالية.

بالمناسبة: إذا قمت في إجراء معالجة المقاطعة بتعيين I-bit على حالة السجل. وحدات، فإن أي مقاطعة نشطة يمكنها بدورها مقاطعة معالجة المقاطعة الحالية. تسمى هذه المقاطعات المقاطعات المتداخلة.

3. تحضير.

يكمل المعالج تنفيذ تعليمات التجميع الحالية، ثم يضع عنوان التعليمات التالية على المكدس (PC->STACK). بعد ذلك، يتحقق المعالج من مصدر المقاطعة الذي أرسل "طلب مقاطعة" (IRQ)، وبعد ذلك، باستخدام متجه هذا المصدر (الرابط) من جدول المتجهات (الذي تم تعيينه بشكل ثابت لكل مصدر مقاطعة)، ينتقل إلى إجراء معالجة المقاطعة (تعليمات JMP). هذا كل شيء، يقضي المعالج ما لا يقل عن 4 دورات على مدار الساعة (اعتمادًا على لحظة ظهور الطلب ومدة تنفيذ التعليمات الحالية). يعد هذا وقت استجابة جيدًا جدًا لـ IRQ، مقارنة بـ IRQ ميكروكنترولر من الشركات المصنعة الأخرى.

بالمناسبة: إذا حدث IRQ أثناء وجود وحدة التحكم الدقيقة في وضع السكون، فإن وقت الاستجابة لـ IRQ يزيد بأربع دورات ساعة أخرى، بالإضافة إلى الوقت المخزن في بتات المصهر SUT1 وSUT0 (وقت البدء).

المقاطعة - حدث يتطلب استجابة فورية من المعالج. الرد هو أن المعالج يقاطع معالجة البرنامج الحالي ( برنامج متقطع) ويستمر في تنفيذ بعض البرامج الأخرى ( مقاطعة البرنامج)، المصممة خصيصا لهذا الحدث. عند الانتهاء من هذا البرنامج، يعود المعالج إلى تنفيذ البرنامج الذي تمت مقاطعته.

كل حدث يتطلب انقطاعًا يكون مصحوبًا بـ إشارة المقاطعة، وإخطار الكمبيوتر بهذا الأمر، والاتصال به طلب المقاطعة.

حالة البرنامجيمثل مجموعة من الحالات لجميع عناصر التخزين في النقطة الزمنية المقابلة (على سبيل المثال، بعد تنفيذ الأمر الأخير). عند حدوث مقاطعة، يقوم المتحكم الدقيق بتخزين محتويات عداد البرنامج على المكدس ويقوم بتحميل عنوان متجه المقاطعة المقابل فيه. يجب أن يكون الأمر الأخير في روتين خدمة المقاطعة هو الأمر الذي يعود إلى البرنامج الرئيسي ويستعيد عداد البرنامج المخزن مسبقًا. أثناء تنفيذ معالج المقاطعة، قد تتغير بعض المعلومات. لذلك، عند الانتقال إلى معالج المقاطعة، من الضروري حفظ العناصر التي يتم تغييرها. مجموعة هذه العناصر هي ناقل حالة البرنامج. في هذه الحالة، المعلومات الأخرى حول حالة خلايا الذاكرة ليست مهمة أو يمكن استعادتها برمجيًا.

المتجه الحالة الأولية يحتوي على جميع المعلومات اللازمة للإطلاق الأولي للبرنامج. في كثير من الحالات، يحتوي ناقل الحالة الأولي على عنصر واحد فقط - عنوان البداية للبرنامج الذي يتم تشغيله.

ناقلات المقاطعةهو ناقل الحالة الأولية لبرنامج المقاطعة (المعالج) ويحتوي على جميع المعلومات اللازمة للانتقال إلى المعالج، بما في ذلك عنوان البداية الخاص به. كل نوع مقاطعة له متجه المقاطعة الخاص به، والذي يبدأ تنفيذ المعالج المقابل. عادة، يتم تخزين متجهات المقاطعة في مواقع الذاكرة الثابتة المخصصة خصيصًا مع عناوين قصيرة، والتي تمثل مقاطعة جدول المتجهات. للانتقال إلى برنامج المقاطعة المناسب، يجب أن يكون لدى المعالج متجه مقاطعة وعنوان هذا المتجه. في هذا العنوان، كقاعدة عامة، يوجد أمر انتقال غير مشروط إلى الروتين الفرعي لمعالجة المقاطعة.

كقاعدة عامة، يتم تعيين التحكم في التخزين والإرجاع إلى معالج المقاطعة. في هذه الحالة، يتكون المعالج من ثلاثة أجزاء - تحضيرية (مقدمة) ونهائية (خاتمة)، والتي تضمن تبديل البرنامج، وبرنامج المقاطعة الفعلي، الذي ينفذ العمليات المطلوبة حسب الطلب. يتم تعريف وقت الاستجابة على أنه الفاصل الزمني من لحظة تلقي طلب المقاطعة حتى يبدأ تنفيذ برنامج المقاطعة.


ر ص- زمن استجابة النظام للانقطاع؛
ر ض- الوقت اللازم لتخزين حالة البرنامج الذي تمت مقاطعته؛
ر طاعون المجترات الصغيرة- وقت مقاطعة البرنامج الفعلي؛
ر في- الوقت لاستعادة حالة البرنامج المتقطع

إذا كان هناك العديد من مصادر الطلبات، فيجب إنشاء ترتيب معين لخدمة الطلبات الواردة، ودعا العلاقات ذات الأولويةأو انضباط الخدمة. مجموعة جميع أنواع مقاطعة المعالج الممكنة هي نظام المقاطعةمتحكم. يحدد نظام الخدمة أيًا من الطلبات المتعددة التي يتم تلقيها في وقت واحد يجب معالجتها أولاً، وما إذا كان ذلك أم لا هذا الطلبمقاطعة معالج المقاطعة أو آخر.
إذا تم تلقي طلب مقاطعة ذات أولوية أعلى أثناء معالجة المقاطعة، فسيتم نقل التحكم إلى معالج المقاطعة ذي الأولوية الأعلى ويتم تعليق معالج المقاطعة ذي الأولوية الأقل. ينشأ مقاطعة التعشيش. يتم استدعاء الحد الأقصى لعدد البرامج التي يمكنها تعليق بعضها البعض عمق الانقطاعات.

إذا لم تتم خدمة طلب المقاطعة بحلول الوقت الذي يصل فيه طلب جديد من نفس المصدر (نفس الأولوية)، إذن مقاطعة تشبع النظام. في هذه الحالة، سيتم فقدان جزء من طلبات المقاطعة، والتي عملية عاديةغير مسموح بوحدة التحكم الدقيقة.

خصائص نظام المقاطعةنكون:

  • العدد الإجمالي لطلبات المقاطعة عدد مصادر طلبات المقاطعة؛
  • نوع تمثيل المقاطعة - كقاعدة عامة، يتم تمثيل طلب المقاطعة بمستوى إشارة منطقي؛
  • أولوية المقاطعة - تحدد الترتيب الذي تتم به معالجة كل طلب مقاطعة؛ كلما زادت الأولوية، قل التأخير في تنفيذ برنامج المقاطعة له؛
  • وقت الاستجابة - الفاصل الزمني بين ظهور طلب المقاطعة وبدء تنفيذ برنامج المقاطعة؛
  • تأخير الانقطاع - يحدده إجمالي الوقت اللازم لتخزين البرنامج واستعادته؛
  • العمق، يتزامن عادةً مع عدد مستويات الأولوية في نظام المقاطعة؛
  • مقاطعة تشبع النظام؛
  • اللحظات المسموح بها لانقطاع البرنامج (عادةً نهاية تنفيذ الأمر التالي).

اخفاء المقاطعةتستخدم لإخبار وحدة التحكم الدقيقة بالاستجابة لكل نوع من أنواع المقاطعة أو تجاهلها. يمثل قناع المقاطعة رمزًا ثنائيًا يتم تعيين بتاته لمصادر طلب المقاطعة. البت الواحد في الكود الثنائي يخبر المتحكم الدقيق بالتعامل مع هذا النوع من المقاطعة. على العكس من ذلك، فإن البت الصفري لا يسمح لوحدة التحكم الدقيقة بمتابعة معالجة المقاطعات من النوع المحدد.
كقاعدة عامة، بالإضافة إلى إخفاء المقاطعات، هناك أيضًا بتة تمكين المقاطعة العامة، والتي تعمل قيمتها الصفرية على تعطيل كافة معالجات المقاطعة (باستثناء إعادة تعيين الأجهزة والانتقال إلى بداية البرنامج المنفذ).
بالإضافة إلى الكود الثنائي لقناع المقاطعة، يوجد أيضًا كود ثنائي أعلام المقاطعة، والذي يسمح لمعالج المقاطعة بتعيين مصدر المقاطعة إذا كان هناك عدة مصادر مع الطلب المحدد في وحدة التحكم الدقيقة.




قمة