- מדוע אנו זקוקים להפרעה?
- סוגי הפרעות ב- MSP430
- הפסק את בקרת התוכנית ב- MSP430
- מעגל MSP430 לבדיקת הפרעת GPIO
- תכנות MSP430 להפסקות
- מעלה תוכנית ל- MSP430 מ- CCS
- תוכנית הפרעה ב- MSP430
שקול שעון דיגיטלי פשוט שתוכנת רק להראות לך זמן, עכשיו דמיין שאתה רוצה לשנות את אזור הזמן שלו. מה היית עושה? אתה פשוט לוחץ על כפתור שמשתנה לתפריט שמאפשר לך לשנות את אזור הזמן. כאן, המערכת לא יכולה לחזות את ההפרעה החיצונית שלך לתהליכי שמירת הזמן שלה ולא יכולה לבקש ממך לחכות מכיוון שהיא עסוקה בהגדלת ערך השניות בשעון שלך. זה המקום בו ההפרעות מועילות.
הפרעות לא תמיד צריכות להיות חיצוניות; זה יכול להיות גם פנימי. לרוב בהפרעה מוטמעת, ניתן גם לתקשורת בין שני ציוד היקפי של המעבד. קחו בחשבון שעצבי טיימר מוגדרים מראש מתאפסים והפסקה מופעלת כאשר הזמן מגיע לערך בפנקס הטיימר. ניתן להשתמש במטפל הפסיקה ליזום ציוד היקפי אחר כמו DMA.
במדריך זה השתמשנו בהפרעות החיצוניות ב- MSP430 כדי להחליף נוריות שונות. כאשר ניתנת הפרעה חיצונית על ידי שינוי המצב באמצעות לחצן כפתור, השליטה מועברת (מונעת מראש) ל- ISR והיא עושה את הנדרש. כדי לדעת את היסודות כמו הגדרת סביבת CCS עבור לוח השיגור MSP430G2, עקוב אחר קישור זה להתחיל בעבודה עם MSP430 באמצעות CCS מכיוון שלא נפרט על כך במדריך זה. בדוק גם הדרכות אחרות מבוססות MSP430 באמצעות Energia IDE ו- CCS על ידי לחיצה על הקישור.
מדוע אנו זקוקים להפרעה?
נדרשים הפרעות כדי לשמור על תקורה של הקלפי במערכת משובצת. הם נקראים כאשר יש צורך לבצע את המשימות עם עדיפות גבוהה יותר על ידי הקדמת משימת הריצה הנוכחית. ניתן להשתמש בו גם להעיר את המעבד ממצבי הספק נמוך. כאשר הוא מתעורר על ידי מעבר קצה של אות חיצוני דרך יציאת GPIO, ה- ISR מבוצע והמעבד חוזר שוב למצב צריכת חשמל נמוכה.
סוגי הפרעות ב- MSP430
קוטעת MSP430 לבוא תחת סוגי שאלות- הבאים
- איפוס המערכת
- הפרעה שאינה ניתנת למסכה
- הפסקת Maskable
- הפרעות וקטוריות ולא וקטוריות
איפוס מערכת:
זה יכול להתרחש עקב מתח אספקה (VCC) ובשל אות נמוכה ב פיני RST / NMI עם מצב איפוס שנבחר והוא יכול להתרחש גם עקב סיבות כמו הצפת כלב השמירה טיימר ו פרת מפתח אבטחה.
הפרעה שאינה ניתנת למסכה:
לא ניתן להסוות את ההפרעות הללו על פי הוראות המעבד. ברגע שההפרעה הכללית מופעלת, לא ניתן להסיט את ההפרעה שאינה ניתנת להסוואה מעיבוד. זה נוצר על ידי מקורות כמו תקלות מתנד וקצה הניתן ידנית ל- RST / NMI (במצב NMI).
הפסקה ניתנת למסכה:
כאשר מתרחשת הפרעה ואם ניתן להסוות אותה על ידי הוראת מעבד, אז מדובר בהפסקה ניתנת להסרה. הם לא צריכים להיות חיצוניים תמיד. הם תלויים גם בציוד היקפי ובפונקציות שלהם. הפרעות היציאה החיצוניות המשמשות כאן נכנסות לקטגוריה זו.
הפרעות וקטוריות והפרעות שאינן וקטוריות:
וקטור: במקרה זה, מכשירים המפריעים מספקים לנו את מקור ההפרעה על ידי העברת כתובת וקטור ההפרעה. כאן כתובת ה- ISR קבועה והשליטה מועברת לכתובת זו וה- ISR דואג לשאר.
ללא וקטור: כאן לכל ההפרעות יש ISR משותף. כאשר מתרחשת הפרעה ממקור שאינו וקטורי, הפקד מועבר לכתובת המשותפת, אליה משתפים כל הפרעים הלא וקטוריים.
הפסק את בקרת התוכנית ב- MSP430
כאשר מתרחשת ההפרעה, MCLK מופעל והמעבד נקרא חזרה ממצב OFF. כאשר השליטה בתוכנית מועברת לכתובת 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 |
איקס |
קלט עם נגדים מושבת |
0 |
1 |
0 |
קלט עם הפעלת הנפתח הפנימי |
0 |
1 |
1 |
קלט עם אפשרות משיכה פנימית |
1 |
איקס |
איקס |
תפוקה - ל- PxREN אין כל השפעה |
PxSEL ו- PxSEL2: מכיוון שכל הסיכות ב- MSP430 מרובות, יש לבחור את הפונקציה המסוימת לפני השימוש בה. כאשר רושמי PxSEL ו- PxSEL2 מוגדרים כ- 0 עבור סיכה מסוימת, נבחר קלט / פלט למטרה הכללית. כאשר מוגדר ה- PxSEL כ- 1, נבחרת הפונקציה ההיקפית הראשית וכן הלאה.
PxIE: הוא מאפשר או מבטל הפרעות לסיכה מסוימת ביציאה x.
PxIES: הוא בוחר את הקצה שבו נוצרת הפרעה. עבור 0, נבחר קצה עולה ועל 1 נבחר קצה נופל.
מעגל MSP430 לבדיקת הפרעת GPIO
מעגל MSP430 המשמש לבדיקת קוד דוגמת הפרעה MSP430 שלנו מוצג להלן.
קרקע הלוח משמשת להארקת הן את הנורית והן את הכפתור. הצדדים המנוגדים באלכסון של כפתור הלחיצה הם מסופים פתוחים בדרך כלל ומתחברים כאשר לוחצים על כפתור הלחיצה כלפי מטה. נגד מחובר לפני ה- 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 . # pragma vector = PORT1_VECTOR __ הפרעה בטל Port_1 (בטל)
הקוד שלהלן מחליף כל אחד מ- LED המחוברים ל- pin0, pin1, pin2 בזה אחר זה.
אם (ספירת% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; ספירת ++; } אחר אם (ספירת% 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; ספירת ++; } אחר { 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, אז הנורית המחוברת לסיכה 1 של יציאה 1 זוהרת. כאשר מקור ההפרעה שייך ליציאה 2, אז הנורית המחוברת לסיכה 2 של יציאה 1 זוהרת.
#pragma vector = PORT1_VECTOR __ הפרעה בטל Port_1 (בטל) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; עבור (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } וקטור # פרגמה = PORT2_VECTOR __ הפרעה בטלה Port_2 (ריק) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; עבור (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
מעלה תוכנית ל- MSP430 מ- CCS
כדי לטעון את הפרויקט ללוח ההשקה וליפוי באגים, בחרו בפרויקט ולחצו על סמל הבאגים בסרגל הכלים. לחלופין, לחץ על F11 או לחץ על RunàDebug כדי להיכנס למצב איתור באגים.
לאחר כניסת מצב הבאגים, לחץ על כפתור הפעלת הצבע הירוק להפעלת החופשית של הקוד הנטען ב- MCU. כעת, כאשר לוחצים על כפתור הלחיצה כלפי מטה, הפרעה מופעלת על ידי שינוי הקצה, ובכך גורם לשינוי במצב הנורית.
תוכנית הפרעה ב- MSP430
לאחר העלאת הקוד בהצלחה, אנו יכולים לבדוק אותו באמצעות לחצן הלחיצה. דפוס ה- LED ישתנה בהתאם לתוכנית שלנו בכל פעם שניתנה הפרעה באמצעות כפתור הלחיצה.
את העבודה המלאה ניתן למצוא בסרטון המקושר למטה. מקווה שנהנית מההדרכה ולמדת משהו שימושי. אם יש לך שאלות, השאיר אותן בסעיף ההערות או השתמש בפורומים שלנו לשאלות טכניות אחרות.