Система переривань

Початкова система переривань в архітектурі MCS - 51 включає п'ять джерел - два зовнішніх і три внутрішніх. Система розвивається, з по¬явищем мікроконтроллерів типу 80С52 число джерел переривань в архітектурі сімейства постійно збільшується, що визначається збільшенням кількості внутрішніх блоків введення/виведення. Деякі удосконалення зазнав механізм пріоритетів переривань. Тут ми розглянемо початкову систему переривань, а усі відмінності будуть вказані при описі старших версій мікроконтроллерів.

З п'яти джерел переривань зовнішніми є входи INT0# і INT1#, а внутрішніми - два лічильники/таймера і послідовний порт. Активні сигнали на входах INT0#, INT1# встановлюють прапори IEO, IE1 регістра TCON. Таймер 0 і Таймер 1 використовують для вироблення запитів переривань прапори переповнювання TFO, TF1 в регістрі управління TCON, а послідовний порт використовує для цього два прапори - приймачі RI і передавача TI в регістрі управління SCON. Кожен з прапорів послідовного порту може викликати переривання, а конкретне джерело визначає процедура обслуговування за допомогою опитування.

Реакція на будь-який запит, дозволений до обслуговування, полягає в передачі управління від поточної програми спеціальній процедурі обслуговування переривання цього типу. Здійснюється ця передача за допомогою команди LCALL, код якої не вибирається з пам'яті, а формується усередині мікроконтроллера. Адреса переходу в архітектуру MCS - 51 відповідає вектору переривання і фіксований для кожного джерела:

Векторы системы прерываний

Джерело переривання Вектор переривання
Зовнішнє переривання INTO 0003Н
Таймер/лічильник Т/Із 000ВН
Зовнішнє переривання INT1 0013Н
Таймер/лічильник Т/С1 001ВН
Послідовний порт 0023Н

 

З таблиці видно, що інтервал між адресами складає всього 8 елементів пам'яті програм, тому по перших чотирьох адресах може розташовуватися або дуже коротка процедура, або команда JMP переходу на область пам'яті, де знаходиться довша процедура обслуговування. За адресою послідовного порту місця більше. Якщо по адресах векторів переривань знаходяться команди JMP, то має місце так звана таблиця переходів системи переривань.

Коли запит переривання прийнятий на обслуговування, виконується наступна послідовність дій. Поточна команда виконується до кінця. Потім внутрішньо формована команда LCALL зберігає поточне значення лічильника команд PC(адреса наступної команди) в стеку. Це дозволяє після завершення процедури обслуговування переривання повернутися в перервану програму. Далі ця команда завантажує в PC адресу-вектор. Збереження в стеку інших регістрів мікроконтроллера, окрім PC, здійснюється програмістом командами PUSH на початку процедури обслуговування. У кінці процедури повинні стояти відповідні команди вивантаження POP. Цей процес відданий на розсуд розробника, оскільки від об'єму інформації, що зберігається, сильно залежить час реакції на переривання. Процедура обслуговування переривання завершується командою RETI, яка вивантажує із стека адресу повернення і поміщає її в PC.

Кожне з джерел переривань може бути дозволене або заборонене з використанням відповідного біта регістра IE. Крім того, в цьому регістрі битий загальної заборони усіх переривань.

При появі запитів від декількох джерел черговість їх обслуговування визначається за допомогою механізму пріоритетів переривань. У архітектурі MCS - 51 має місце двоступінчатий механізм визначення пріоритетів.

У початковій системі переривань мікроконтроллерів 8051 АН пріоритети на першому ступені мають два рівні: " високий" і " низький", і визначаються значеннями бітів регістра IP.

Ім'я біта Номер біта Функція
- IP.7 Зарезервований
- IP.6 Зарезервований
- IP.5 Зарезервований
PS IP.4 Визначає пріоритет послідовного порту
PT1 IP.3 Визначає пріоритет Таймера 1
РХ1 IP.2 Визначає пріоритет входу INT1 #
PT0 IP.1 Визначає пріоритет Таймера 0
РХО IP.0 Визначає пріоритет входу INT0#

При " 1" в певному розряді регістра IP пріоритет відповідного джерела переривання високий, а при " Про" - низький. При одно¬тимчасовій появі декількох запитів одного рівня черговість обслуговування визначається за допомогою внутрішньої процедури полінгу (послідовного опитування), який робиться в порядку фіксованого старшинства джерел усередині одного рівня пріоритету. Цей порядок наступний:

Пріоритети переривань при полінгу

 

Джерело Пріоритет усередині рівня
Вхід INT0# Вищий
Таймер 0  
Вхід INT1#  
Таймер 1  
Послідовний порт Нижчий

 

Дія механізму пріоритетів переривань полягає у виборі для обслуговування одного з джерел при одночасному приході декількох запитів, а також в ухваленні рішення про переривання поточної процедури обслуговування запитом, що знову поступив. Усі джерела переривань перевіряються на наявність запиту під час S5P2 кожного машинного циклу(мал. 2.9). У течії наступного машинного циклу аналізуються біти пріоритетів регістра IP і виконується внутрішня процедура полінгу.

На основі двоступінчатого аналізу вибирається запит з найбільш високим пріоритетом з тих, що поступили. Якщо яке або переривання вже обслуговується, то його процедуру може перервати тільки переривання з більш високим пріоритетом. Механізм пріоритетів переривань використовує два внутрішніх програмно недоступних прапора поточного рівня обслуговування(першому ступеню). Прийом на обслуговування переривання встановлює прапор того рівня пріоритету, до якого відноситься запит. Цей прапор визначає поріг чутливості системи переривань. Команда RETI у кінці процедури обслуговування очищає прапор свого рівня і, таким чином, ліквідовує поріг чутливості.

Мал. 2.9. Виклик процедури обслуговування переривання.

 

З мал. 2.9 видно, що між запитом і початком процедури обслуговування проходить не менше трьох машинних циклів.

Запит переривання не приймається на обслуговування і відкладається на пізніший час при наступних обставинах:

виконується процедура обслуговування переривання з більш високим пріоритетом;

поточний машинний цикл не є останнім в циклі команди;

виконується команда RETI, команди звернення до регістрів IE, IP або що йдуть за ними.

У текст процедури обслуговування будь-якого джерела переривання рекомендується включити команду скидання прапора цього джерела.

Особливості запитів зовнішніх переривань. По входах INT0#, INT1# можуть сприйматися сигнали запитів, активними значеннями яких є або низький рівень вхідного сигналу, або перепад " 1" - " О". Тип активного значення визначається бітами ITO, IT1 регістра TCON. При Itx = 0 запит фіксується по низькому рівню сигналу на відповідному вході INTx#, а при Itx = 1 по перепаду.

Якщо запит переривання формується перепадом сигналу на вході INTx#, високий і низький рівні сигналу повинні утримуватися не менше одного машинного циклу кожен.

При запиті у вигляді низького рівня сигналу активне значення повинне утримуватися на вході до початку обробки цього запиту. Далі сигнал повинен стати пасивним до завершення процедури обслуговування.