وقفه واحدی است که در تمام میکروکنترلرها وجود دارد و به طور مستقیم با ورودیهای واحد GPIO درگیر میباشد، برای درک وقفه اول باید بدونید که در میکروها برنامهها خط به خط یا دستور به دستور اجرا میشوند چون CPU نمیتواند چند کار هم زمان انجام دهد در کامپیوتر هم همین طور است، مثلا زمانی که دارید با لپ تاپ یک فایل را انتقال میدهید و همزمان به موسیقی هم گوش میدهید و با ماشین حساب هم کار میکنید، CPU برای اینکه شما متوجه نشوید و بتواند تمام این کارها را انجام دهد تمام این کارها ذره ذره و در مدت زمان کم در حد میکرو نانو و پیکو ثانیه انجام میدهد، یکم از موسیقی را پخش میکند بعد میره سراغ محاسبات ماشین حساب و بعد یک مقدار از فایل را انتقال میدهد و این کار انقدر سریع انجام میشود که گسسته بودن آن را متوجه نمیشوید.
در میکرو هم همین اتفاق میافتد اما مشکل اینجاست به عنوان مثال اگر یه برنامه داشته باشیم که با فشرده شدن یک کلید خارجی قرار باشد کار خاصی را انجام دهد و میکرو در آن لحظه مشغول پردازش دیگری باشد و در حال چک کردن آن پایه نباشد متوجه این موضوع نمیشود و ممکن است وقتی دوباره به چک کردن آن پایه رسید شراط به حالب اول بازگشته باشد و میکرو چیزی را متوجه نشود که وقفهها این قضیه را حل کردهاند میتوان میکروها را طوری برنامه ریزی کرد که وقتی رخداد خاصی اتفاق افتاد هر کاری دارد را رها کند و به آن رویداد بپردازد و بعد که کاری رو که ازش خواستیم انجام داد برود و از همانجایی که پردازش رو رها کرد دوباره به ادامه پردازش بپردازد اینطوری دیگر تاخیری هم از زمان رخداد تا انجام عمل مورد نظر بوجود نمیآید این اتفاقات در کسری از ثانیه اتفاق میافتد و چون برنامههای مربوط به وقفه هم نباید برنامههای سنگینی باشند مشکلی در پردازش بوجود نمیآید، وقفه میتواند خارجی یا داخلی باشد یعنی با تغییر مقدار یک پایه اتفاق بیفتد یا اینکه توسط یکی از واحدهای داخلی رخ دهد مثلا فرض کنید یک ساعت دیجیتال دارید که باید سر زمان ثانیه شمار تغییر کند حتی یک نانو ثانیه هم نباید تاخیر داشته باشد چون اگر در هر ثانیه فقط یک نانو ثانیه تاخیر داشته باشیم تقریبا بعد هر ۱۱ روز یک ثانیه عقب میافتد و باید این رویداد به صورت وقفه سریعا ترتیب اثر داده شود تا این تاخیر زمانی اتفاق نیفتد.
در PIC و AVR وقفه طراح تراشه با توجه به ویژگیهای آن شماره از میکرو تشخیص داده که شما این تعداد وقفه بیشتر نیاز ندارید و اون رو به پایههایی تخصیص داده که مشکلی هم پیش نیاد و تا یه مقداری هم میتوانید آن پایه را جابجا کنید ولی در Armها تمامی پایهها که واحد GPIO دارند وقفه هم دارند و اگر بخواهید که از وقفه آن استفاده کنید باید تنظیمات آن را به صورت نرم افزاری خودتان انجام دهید.
این امکان وجود دارد که چندین وقفه را تعریف کنیم اما اگر دو تا وقفه با هم رخداد چه میشود! وقفهها دارای اولویت هستند یعنی اونی که اولویت بالاتری دارد اول اجرا میشود و بعد اولویتهای بعدی، در PIC و AVR آن اولویتها به دو اولویت زیاد و کم تقسیم میشوند ولی در Armها میتوان اولویتهای بیشتری تعریف کرد.