انستیتو تحقیقات ماهیان

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

۱ اردیبهشت ۱۳۹۶

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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