واحد کنترل اینتراپت بخش سوم(آخر)

در ادامه دو بخش قبلی سعی می کنیم در این قسمت (واحد کنترل اینتراپت بخش سوم(آخر)) توضیحی در مورد نحوه اولویت بندی وقفه ها در این واحد ارائه کنیم

 بخش اول(NVIC)

 بخش دوم(NVIC)

حق تقدم و اولویت

واحد کنترل اینتراپت شامل گروهی از رجیستر ها با ۸ بیت فضا برای هر منبع اینتراپت میباشد.

در پیکربندی اولیه ۷ بیت بالایی به شما اجازه میدهد که حق تقدم(Preemption) را مشخص کنید .هر چه این عدد کمتر باشه اهمیت اینتراپت بالاتر است .پس اگر یک اینتراپت در حال سرویس دهی باشد و اینتراپتی با حق تقدم پایین تری رخ دهد باعث می شود وضعیت اینتراپت فعلی ذخیره شود و به اینتراپت جدید سرویس دهی کند  .زمانی که اینتراپت با حق تقدم پایین پایان یافت ادامه اینتراپت قبلی در دستور کار قرار می گیرد .

واحد کنترل اینتراپت

کم ارزش ترین بیت از فضای ۸ بیتی به اولویت(Priority) اختصاص میابد . اگر دو اینتراپت با حق تقدم یکسان رخ دهند, اینتراپت با اولویت کمتر اجرا می شود .این بدین معنی هست که ما ۱۲۸ حق تقدم داریم که هر کدام دو سطح اولویت دارند .

گروه ها و زیر گروه ها

به طور پیش فرض در واحد کنترل اینتراپت, ۷ بیت از رجیستر اولویت , حق تقدم را مشخص می کند و کم ارزش ترین بیت اولویت را مشخص می کند . مرز بین گروه اولویت و گروه حق تقدم را می توان با نوشت در برنامه اینتراپت و رجیستر ARIC تغییر داد

مطلب پیشنهادی:  کتابخانه CMSIS بخش اول

واحد کنترل اینتراپت

سه اینتراپت ریست و NMI و استثنا سخت در بعضی از میکروکنترلر ها دارای اولویت زیر ۰ هستند !!

کنترل اولویت زمان اجرا

سه رجیستر وجود دارد که می توانند به صورت پویا برای غیر فعال کردن منابع اینتراپت انتخاب شوند که عبارتند از  PRIMASK , FAULTMASK و BASEPRI .

PRIMASK برای غیر فعال کردن همه اینتراپت ها به جز Hard fault و NMI

FAULTMASK برای غیر فعال کردن همه اینتراپت ها به جز NMI

BASEPRI برای غیر فعال کردن همه اینتراپت ها در حق تقدم مشخص شده است

این رجیستر ها MEMORY MAP نشده اند و در رجیستر های CPU قرار دارند و میتوانند فقط با دستور های MSR و MRS تغییر کنند

این هم آخرین بخش از کنترل وقفه امیدوارم کمکی کرده باشم برای درک بهتر از روند اجرای وقفه

سعی می کنم براتون یک مثال از راه اندازی وقفه هم درست کنم تا به صورت عملی این واحد رو ببینید

اگر سوالی داشتید در پرسیدنش شک نداشته باشید  😉

کتابخانه CMSIS بخش اول

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>
به اشتراک گذاری این نوشته:

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

2 دیدگاه

  1. سلام مهندس لطفا یه مثال بصورت ریجستری از وقفه قرار بده ممنونم — مطالبت واقعا ارزشمنده ممنون از زحمت و وقت خیلی زیادی که صرف میکنی

  2. سلام و خسته نباشید من از دو usart با وقفه برای ارتباط با یک دستگاه جانبی و کامپیوتر استفاده کردم و درست کار میکنه ودیتاها رد و بدل میشن ولی ظاهرا بعضی مواقع که تداخل وقفه پیش میاد یکی از uartها دیگ وقفه دریافت نمیزنه و دیتا دریافت نمیکنه. میدونید مشکل از کجاست. چون بعضیمواقع پیش میاد نتونستم دیباگ کنم