Система переривань у мікроконтролері AVR атmega 128

Переривання – процес, що порушує виконання нормального ходу програми. Переривання ініціюються внутрішніми або зовнішніми подіями мікроконтролера. При виникненні переривання мікроконтролер зберігає в стеці вміст лічильника команд PC і завантажує в нього адреса відповідного вектора переривання, у якому, як правило, утримується команда безумовного переходу до підпрограми обробки переривання. Останньою командою підпрограми – оброблювача переривань повинна бути команда reti, що забезпечує повернення в основну програму шляхом відновлення значення попередньо збереженого лічильника команд.

Вектор переривання являє собою адресу процедури обробки переривання. Вектора переривань від різних джерел об'єднані в структуру, названу таблицею векторів переривань. У мікроконтролері AVR АТMEGA 128 таблиця векторів переривань перебуває, починаючи з адреси 0002h. Положення вектора в таблиці переривань визначає пріоритет відповідного переривання, що зменшується зі збільшенням адреси в таблиці переривання (чим менше адреса - тим вище пріоритет). Розміщення векторів переривань мікроконтролера AVR АТMEGA 128 приводиться в таблиці 4.1. Регістр стану SREG апаратно не обробляється процесором, як при виклику підпрограм, так і при обслуговуванні переривань. Якщо програма вимагає збереження SREG, то це повинне вироблятися програмою користувача.

 

 

Таблиця 4.1 - Номера векторів переривань і ідентифікатори процедур-оброблювачів переривань мікроконтролера AVR АТMEGA 128.

Номер вектора Адреса Джерело переривання Ідентифікатор переривання Опис переривання
  0000h RESET   Вивід скидання, відключення електроживлення, скидання від сторожового таймера
  0002h INT0 EXT_INT0 Зовнішнє переривання по лінії запиту 0
  0004h INT1 EXT_INT1 Зовнішнє переривання по лінії запиту 1
  0006h INT2 EXT_INT2 Зовнішнє переривання по лінії запиту 2
  0008h INT3 EXT_INT3 Зовнішнє переривання по лінії запиту 3
  000Аh INT4 EXT_INT4 Зовнішнє переривання по лінії запиту 4
  000Сh INT5 EXT_INT5 Зовнішнє переривання по лінії запиту 5
  000Еh INT6 EXT_INT6 Зовнішнє переривання по лінії запиту 6
  0010h INT7 EXT_INT7 Зовнішнє переривання по лінії запиту 7
  0012h TIMER2 COMP TIM2_COMP Збіг таймера/лічильника Т2
  0014h TIMER2_OVF TIM2_OVF Переповнення таймера/лічильника Т2
  0016h TIMER1 CAPT1 TIM1_CAPT Захоплення таймера/лічильника Т1
  0018h TIMER1 COMP1 TIM1_COMPA Збіг «А» таймера/лічильника Т1
  001Аh TIMER1 COMPB TIM1_COMPB Збіг «В» таймера/лічильника Т1
  001Сh TIMER1 OVF TIM1_OVF Переповнення таймера/лічильника Т1
  001Еh TIMER0 COMP TIM0_COMP Збіг таймера/лічильника Т0
  0020h TIMER0 OVF TIM0_OVF Переповнення таймера/лічильника Т0
  0022h SPI STC SPI_STC Передача даних по SPI закінчена
  0024h USART0 RXC USART0_RXC Прийом по інтерфейсі UART0 завершений
  0026h USART0 DRE USART0_DRE Регістр даних UART0 порожній
  0028h USART0 TXC USART0_TXC Передача по USART0 завершена
  002Аh ADC INT ADC_INT Перетворення АЦП завершене
  002Сh EE RDY EE_RDY Переривання при готовності EEPROM
  002Еh ANA COMP ANA_COMP Переривання від аналогового компаратора
  0030h TIMER1 COMPC TIM1_COMPC Збіг «С» таймера-лічильника Т1
  0032h TIMER3 CAPT TIM3_CAPT Захоплення таймера-лічильника Т3
  0034h TIMER3_COMPA TIM3_COMPA Збіг «А» таймера-лічильника Т3
  0036h TIMER3_COMPB TIM3_COMPB Збіг «В» таймера-лічильника Т3
  0038h TIMER3_COMPC TIM3_COMPC Збіг «В» таймера-лічильника Т3
  003Аh TIMER3_OVF TIM3_OVF Переповнення таймера-лічильника Т3
  003Сh USART1_RXC USART1_RXC Прийом по інтерфейсі UART1 завершений
  003Еh USART1_DRE USART1_DRE Регістр даних UART1 порожній
  0040h USART1_TXC USART1_TXC Передача по USART1 завершена
  0042h TWI TWI Переривання від модуля TWI
  0044h SPM_RDY SPM_RDY Готовність SPM

 

Функція - оброблювач переривання записується в компіляторі Code Vision AVR С у відповідність із наступними правилами:

interrupt [ ідентифікатор переривання ]

тип повертаємого значення ім'я функції (список аргументів)

{

тіло функції обробки переривання

}

Приклад декларації оброблювача переривання ADC_INT по вектору 002Аh, що виробляється при завершенні перетворення АЦП:

interrupt [ADC_INT] void adc_interrupt ( void )

{

тіло функції обробки переривання

}

Мінімальний час реакції переривання становить 4 періоди тактової частоти, у результаті яких значення програмного лічильника записується в стек, а покажчик стека зменшується на 2. Після цього виконується відносний перехід на підпрограму (функцію), що обробляє дане переривання. Якщо переривання відбувається під час виконання команди триваючої кілька циклів, перед викликом переривання завершується виконання цієї команди. Вихід із програми обслуговування переривання займає 4 періоди актової частоти, під час яких зі стека відновлюється значення програмного лічильника. Після виходу з переривання процесор завжди виконує ще одну команду, перш ніж обслужити будь-яке відкладене переривання.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: