- لماذا نحتاج المقاطعة؟
- أنواع المقاطعة في MSP430
- مقاطعة برنامج التحكم في MSP430
- دائرة MSP430 لاختبار مقاطعة GPIO
- برمجة MSP430 للمقاطعات
- تحميل البرنامج إلى MSP430 من CCS
- برنامج المقاطعة MSP430
فكر في ساعة رقمية بسيطة تمت برمجتها لتظهر لك الوقت فقط ، والآن تخيل أنك تريد تغيير منطقتها الزمنية. ماذا كنت ستفعل؟ ما عليك سوى الضغط على زر يتغير إلى القائمة التي تمكنك من تغيير المنطقة الزمنية. هنا ، لا يستطيع النظام التنبؤ بمقاطعتك الخارجية لعمليات حفظ الوقت ولا يمكنه أن يطلب منك الانتظار لأنه مشغول بزيادة قيمة الثواني على ساعتك. هذا هو المكان الذي تأتي فيه المقاطعات في متناول اليد.
لا يجب أن تكون المقاطعات دائمًا خارجية ؛ يمكن أن يكون داخليًا أيضًا. في معظم الأوقات في المقاطعة المضمنة يسهل الاتصال بين اثنين من الأجهزة الطرفية لوحدة المعالجة المركزية. ضع في اعتبارك أنه يتم إعادة تعيين عداد الوقت المحدد مسبقًا ويتم تشغيل المقاطعة عندما يصل الوقت إلى القيمة في سجل المؤقت. يمكن استخدام معالج المقاطعة لبدء الأجهزة الطرفية الأخرى مثل DMA.
في هذا البرنامج التعليمي ، استخدمنا المقاطعات الخارجية على MSP430 لتبديل مصابيح LED المختلفة. عندما يتم إعطاء مقاطعة خارجية عن طريق تغيير الحالة باستخدام زر ضغط ، يتم نقل التحكم (مسبقًا) إلى ISR ويقوم بالمطلوب. لمعرفة الأساسيات مثل إعداد بيئة CCS للوحة التشغيل MSP430G2 ، اتبع هذا الرابط لبدء MSP430 باستخدام CCS لأننا لن ندخل في تفاصيل ذلك في هذا البرنامج التعليمي. تحقق أيضًا من البرامج التعليمية الأخرى المستندة إلى MSP430 باستخدام Energia IDE و CCS باتباع الرابط.
لماذا نحتاج المقاطعة؟
المقاطعات مطلوبة لحفظ حمل الاقتراع في نظام مضمن. يتم استدعاؤها عند الحاجة إلى تنفيذ المهام ذات الأولوية العالية عن طريق استباق مهمة التشغيل الحالية. يمكن استخدامه أيضًا لتنبيه وحدة المعالجة المركزية من أوضاع الطاقة المنخفضة أيضًا. عندما يتم إيقاظه من خلال انتقال حافة إشارة خارجية عبر منفذ GPIO ، يتم تنفيذ ISR وتعود وحدة المعالجة المركزية مرة أخرى إلى وضع الطاقة المنخفضة.
أنواع المقاطعة في MSP430
و المقاطعات في MSP430 تأتي تحت types- التالية
- إعادة تعيين النظام
- مقاطعة غير قابلة للإخفاء
- المقاطعة المخفية
- المقاطعات الموجهة وغير الموجهة
إعادة تعيين النظام:
ويمكن أن تحدث بسبب امدادات التيار الكهربائي (VCC)، ونظرا لإشارة منخفضة في RST / NMI دبوس مع وضع إعادة تعيين المختارة ويمكن أن يحدث أيضا نتيجة لأسباب مثل تجاوز الوكالة الدولية للطاقة الموقت و انتهاك مفتاح أمان.
مقاطعة غير قابلة للإخفاء:
لا يمكن إخفاء هذه المقاطعات بواسطة تعليمات وحدة المعالجة المركزية. بمجرد تمكين المقاطعة العامة ، لا يمكن تحويل المقاطعة غير القابلة للقناع من المعالجة. يتم إنشاء هذا من خلال مصادر مثل أخطاء المذبذب والحافة الممنوحة يدويًا إلى RST / NMI (في وضع NMI).
المقاطعة القابلة للإخفاء:
عند حدوث مقاطعة وإذا كان من الممكن إخفاءها بواسطة تعليمات وحدة المعالجة المركزية ، فإنها تكون قابلة للمقاطعة. لا يجب أن يكونوا خارجيين دائمًا. كما أنها تعتمد على الأجهزة الطرفية ووظائفها. تندرج مقاطعات المنفذ الخارجي المستخدمة هنا ضمن هذه الفئة.
المقاطعات المتجهة والمقاطعات غير الموجهة:
Vectored: في هذه الحالة ، تزودنا الأجهزة التي تقاطعنا بمصدر المقاطعة بتمرير عنوان متجه المقاطعة. هنا يتم إصلاح عنوان ISR ويتم نقل التحكم إلى هذا العنوان ويتولى ISR الباقي.
Non-Vectored: هنا جميع المقاطعات لها ISR مشتركة. عند حدوث مقاطعة من مصدر غير موجه ، يتم نقل عنصر التحكم إلى العنوان المشترك ، حيث تشترك جميع المقاطعات غير الموجهة إليه.
مقاطعة برنامج التحكم في MSP430
عند حدوث المقاطعة ، يتم تشغيل MCLK ويتم استدعاء وحدة المعالجة المركزية مرة أخرى من حالة إيقاف التشغيل. نظرًا لأنه يتم نقل التحكم في البرنامج إلى عنوان ISR بعد حدوث المقاطعة ، يتم نقل القيم الموجودة في عداد البرنامج وسجل الحالة إلى المكدس.
على التوالي ، يتم مسح سجل الحالة ، وبالتالي مسح GIE وإنهاء وضع الطاقة المنخفضة. يتم تحديد وتنفيذ المقاطعة ذات الأولوية القصوى عن طريق وضع عنوان متجه المقاطعة في عداد البرنامج. قبل أن نصل إلى رمز مثال مقاطعة MSP430 GPIO الخاص بنا ، من المهم أن نفهم عمل سجلات المنفذ المشاركة فيه.
تسجيلات المنافذ للتحكم في GPIO على MSP430:
PxDIR: هو سجل للتحكم في اتجاه المنفذ. يسمح للمبرمج بتحديد وظيفته على وجه التحديد عن طريق كتابة 0 أو 1. إذا تم تحديد دبوس كـ 1 ، فإنه يعمل كمخرج. ضع في اعتبارك أن المنفذ 1 عبارة عن منفذ 8 بت ، وإذا تم تعيين الدبابيس 2 و 3 كمنافذ إخراج ، فيجب تعيين سجل P1DIR بالقيمة 0x0C.
PxIN: إنه سجل للقراءة فقط ويمكن قراءة القيم الحالية في المنفذ باستخدام هذا السجل.
PxOUT: يمكن استخدام هذا السجل الخاص لكتابة القيم إلى المنافذ مباشرة. هذا ممكن فقط عندما يتم تعطيل سجل السحب / الانسحاب.
PxREN: هو سجل 8 بت يستخدم لتمكين أو تعطيل سجل السحب / الانسحاب. عندما يتم ضبط الدبوس على 1 في كل من سجل PxREN و PxOUT ، يتم سحب الدبوس المعين لأعلى.
PxDIR |
PxREN |
PxOUT |
تكوين الإدخال / الإخراج |
0 |
0 |
X |
المدخلات مع مقاومات معطلة |
0 |
1 |
0 |
الإدخال مع تمكين السحب الداخلي |
0 |
1 |
1 |
الإدخال مع تمكين السحب الداخلي |
1 |
X |
X |
الإخراج - ليس لـ PxREN أي تأثير |
PxSEL و PxSEL2: نظرًا لأن جميع المسامير في MSP430 متعددة الإرسال ، يجب تحديد الوظيفة المعينة قبل استخدامها. عندما يتم تعيين كل من مسجلي PxSEL و PxSEL2 على 0 لدبوس معين ، يتم تحديد الإدخال / الإخراج للأغراض العامة. عندما يتم ضبط PxSEL على 1 ، يتم تحديد الوظيفة الطرفية الأساسية ، وهكذا.
PxIE: يقوم بتمكين أو تعطيل المقاطعات لدبوس معين في منفذ x.
PxIES: يحدد الحافة التي يتم عندها إنشاء المقاطعة. بالنسبة إلى 0 ، يتم تحديد حافة صاعدة وللحافة 1 يتم تحديد حافة ساقطة.
دائرة MSP430 لاختبار مقاطعة GPIO
يتم عرض دائرة MSP430 المستخدمة لاختبار رمز مثال المقاطعة MSP430 أدناه.
يتم استخدام أرضية اللوحة لتأريض كلاً من LED والزر. عادةً ما تكون الجوانب المتقابلة قطريًا لزر الدفع هي أطراف مفتوحة ويتم توصيلها عند الضغط على زر الضغط لأسفل. يتم توصيل المقاوم قبل مؤشر LED لتجنب الاستهلاك الحالي المرتفع بواسطة LED. عادة ، يتم استخدام مقاومات منخفضة في حدود 100 أوم - 220 أوم.
نحن نستخدم 3 أكواد مختلفة للحصول على فهم أفضل لمقاطعات المنفذ. يستخدم أول رمزين نفس الدائرة كما في مخطط الدائرة 1. دعونا نتعمق في الكود. بعد إجراء الاتصالات ، يبدو الإعداد الخاص بي هكذا.
برمجة MSP430 للمقاطعات
يمكن العثور على برنامج المقاطعة MSP430 الكامل في أسفل هذه الصفحة ، ويكون شرح الكود كما يلي.
السطر أدناه يوقف مؤقت المراقبة عن العمل. عادة ما يقوم جهاز ضبط وقت المراقبة بإجراء عمليتين. أحدهما يمنع جهاز التحكم من الحلقات اللانهائية عن طريق إعادة ضبط جهاز التحكم والآخر هو أنه يطلق أحداثًا دورية باستخدام المؤقت المدمج. عندما تتم إعادة تعيين متحكم دقيق (أو تشغيله) ، يكون في وضع المؤقت ويميل إلى إعادة ضبط MCU بعد 32 مللي ثانية. هذا الخط يمنع وحدة التحكم من القيام بذلك.
WDTCTL = WDTPW + WDTHOLD ،
يؤدي تعيين سجل P1DIR إلى القيمة 0x07 إلى تعيين اتجاه pin0 و pin1 و pin2 كإخراج. يؤدي تعيين P1OUT إلى 0x30 إلى تكوين مدخلات مع تمكين مقاومات السحب الداخلية على pin4 و pin5. يتيح ضبط P1REN على 0x30 السحب الداخلي على هذه المسامير. يتيح P1IE المقاطعة ، حيث يختار P1IES الانتقال من الأعلى إلى المنخفض كحافة المقاطعة على هذه المسامير.
P1DIR - = 0x07 ؛ P1OUT = 0x30 ؛ P1REN - = 0x30 ؛ P1IE - = 0x30 ؛ P1IES - = 0x30 ؛ P1IFG & = ~ 0x30 ؛
يتيح السطر التالي وضع الطاقة المنخفضة ويمكّن GIE في سجل الحالة بحيث يمكن استقبال المقاطعات.
__bis_SR_register (LPM4bits + GIE)
يتم تعيين عداد البرنامج بعنوان متجه المنفذ 1 باستخدام الماكرو.
PORT1_VECTOR . # متجه براغما = PORT1_VECTOR __interrupt void Port_1 (باطل)
يقوم الكود أدناه بتبديل كل من مصابيح LED المتصلة بـ pin0 و pin1 و pin2 واحدًا تلو الآخر.
إذا (عدد٪ 3 == 0) { P1OUT ^ = BIT1 ؛ P1IFG & = ~ 0x30 ؛ العد ++ ؛ } else if (count٪ 3 == 1) { P1OUT ^ = BIT1 ؛ P1IFG & = ~ 0x30 ؛ العد ++ ؛ } else { P1OUT ^ = BIT2 ؛ P1IFG & = ~ 0x30 ؛ العد ++ ؛ }
مخطط الدائرة 2:
وبالمثل ، دعنا نجرب دبوسًا مختلفًا لفهم المفهوم بشكل أفضل. لذلك هنا يتم توصيل زر الضغط بالدبوس 2.0 بدلاً من الدبوس 1.5. الدائرة المعدلة على النحو التالي. مرة أخرى يتم استخدام هذه الدائرة لاختبار برنامج مقاطعة الزر MSP430.
هنا يتم استخدام المنفذ 2 للإدخال. لذلك يجب استخدام ناقل مقاطعة مختلف. تأخذ المدخلات P1.4 و P2.0.
نظرًا لاستخدام المنفذ 2 فقط للإدخال ، يتم تعيين P2DIR على أنه 0. لتعيين pin0 للمنفذ 2 كمدخل مع تمكين مقاومات السحب الداخلية ، يجب ضبط المسجلين P2OUT و P2REN بقيمة 1. لتمكين المقاطعة على pin0 من المنفذ 2 وأيضًا لتحديد حافة المقاطعة ، يتم تعيين P2IE و P2IES بقيمة 1. لإعادة تعيين العلم في المنفذ 2 ، يتم مسح P2IFG ، بحيث يمكن تعيين العلم مرة أخرى على حدوث المقاطعة.
P2DIR - = 0x00 ؛ P2OUT = 0x01 ؛ P2REN - = 0x01 ؛ P2IE - = 0x01 ؛ P2IES - = 0x01 ؛ P2IFG & = ~ 0x01 ؛
عندما يكون مصدر المقاطعة من المنفذ 1 ، يضيء مؤشر LED المتصل بالدبوس 1 من المنفذ 1. عندما ينتمي مصدر المقاطعة إلى المنفذ 2 ، فإن مؤشر LED المتصل بالطرف 2 من المنفذ 1 يضيء.
#pragma vector = PORT1_VECTOR __interrupt void Port_1 (باطل) { P1OUT ^ = BIT1؛ P1IFG & = ~ 0x10 ؛ لـ (i = 0؛ i <20000؛ i ++) { } P1OUT ^ = BIT1 ؛ } #pragma vector = PORT2_VECTOR __interrupt void Port_2 (فارغ) { P1OUT ^ = BIT2؛ P2IFG & = ~ 0x01 ؛ لـ (j = 0؛ j <20000؛ j ++) { } P1OUT ^ = BIT2 ؛ }
تحميل البرنامج إلى MSP430 من CCS
لتحميل المشروع على لوحة التشغيل وتصحيحه ، حدد المشروع ، وانقر فوق رمز التصحيح في شريط الأدوات. بدلاً من ذلك ، اضغط على F11 أو انقر فوق RunàDebug للدخول في وضع التصحيح.
بمجرد إدخال وضع التصحيح ، اضغط على زر تشغيل اللون الأخضر لتشغيل الشفرة المحملة في MCU بحرية. الآن ، عند الضغط على زر الضغط لأسفل ، يتم تشغيل المقاطعة من خلال التغيير في الحافة ، مما يؤدي إلى التغيير في حالة LED.
برنامج المقاطعة MSP430
بعد أن يتم تحميل الكود بنجاح ، يمكننا اختباره ببساطة باستخدام زر الضغط. سيتغير نمط LED وفقًا لبرنامجنا كلما تمت مقاطعة باستخدام زر الضغط.
يمكن العثور على العمل الكامل في الفيديو المرتبط أدناه. آمل أن تكون قد استمتعت بالبرنامج التعليمي وتعلمت شيئًا مفيدًا. إذا كانت لديك أي أسئلة ، فاتركها في قسم التعليقات أو استخدم منتدياتنا لأسئلة فنية أخرى.