Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторна робота №10 «Вивчення використання переривань мікроконтролера AVR»Содержание книги
Поиск на нашем сайте
Ціль роботи - вивчити принципів роботи переривань AVR мікроконтролера - закріпити знання попередніх лабораторних роботах Програма виконання роботи - проініціалізувати таймер на фіксацію проміжку часу у 2 мс (період можна змінити) з генерацією переривань, коли таймер-лічильник зафіксує вказаний період - дозволити роботу переривань - при написати обробник переривань від таймера - у симуляторі переконатися, що період між подіями справді становить вказану величину (2 мс по замовчуванню)[54]
Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи Переривання (Interrupt – англ.) – це сигнал, що повідомляє процесор про настання якої-небудь події. При цьому виконання поточної послідовності команд призупиняється і керування передається обробнику переривання, який реагує на подію та обслуговує її, після чого повертає управління в перерваний код. Залежно від джерела виникнення сигналу переривання поділяються на: Асинхронні або зовнішні (апаратні) — події, які створені зовнішніми джерелами (наприклад, периферійними пристроями) та можуть відбутися в довільний момент, наприклад, сигнал від таймера; Синхронні або внутрішні — події в самому процесорі як результат порушення якихось умов при виконанні машинного коду: поділ на нуль або переповнення, звернення до неприпустимих адрес або неприпустимий код операції; Програмні (частковий випадок внутрішнього переривання) — ініціюються виконанням спеціальної інструкції в коді програми. Програмні переривання, як правило використовуються для звернення до функцій вбудованого програмного забезпечення (firmware), драйверів й операційної системи. Маскування переривань Залежно від можливості заборони зовнішні переривання поділяються на: ті, що можна маскувати — переривання, які можна забороняти установкою відповідних бітів у регістрі маскування переривань ті, що не можна маскувати (англ. Non maskable interrupt, NMI) — обробляються завжди, незалежно від заборон на інші переривання. Обробники переривань зазвичай пишуться таким чином, щоб час їх обробки був якомога меншим, оскільки під час їх роботи можуть не оброблятися інші переривання, а якщо їх буде багато (особливо від одного джерела), то вони можуть губитися. Вектор переривання — закріплений за джерелом переривання номер, який ідентифікує відповідний обробник переривань. Вектори переривань об'єднуються в таблицю векторів переривань, що містить адреси обробників переривань. Розташування таблиці залежить від типу та режиму роботи процесора. Пріоритет переривань вказує яке переривання відбудеться першим (або чи обробник текучого переривання буде перерваним іншим перериванням) за умови перебування обох (обо більше) у черзі на обробку. зазвичай пріоритет переривань визначається номером і по його порядковому номеру визначається яке переривання є більш чи менш пріоритетним. Вкладеність переривань – дозвіл більш пріоритетному перериванню переривами обробник переривань менш пріоритетного переривання. AVR мікроконтролери володіють модулем переривань, який дозволяє мікроконтролеру реагувати на асинхронні зовнішні чи внутрішні події. Гнучкий модуль переривань містить свої керуючі регістри в просторі вводу-виводу і має додатковий біт загального дозволу роботи системи переривань у регістрі статусу (I -біт). У всіх переривань є свій вектор переривання відповідно до таблиці векторів переривань. Переривання мають пріоритет відповідно до позиції їх вектора. Переривання з меншою адресою переривання мають більш високий пріоритет.
Скидання й обробка переривань AVR-мікроконтролери підтримують декілька різних джерел переривань. Всі переривання, а також скидання мають свій індивідуальний вектор в пам'яті програм. Для кожного переривання є власний біт дозволу. Крім того, є можливість загального дозволу роботи переривань за допомогою управління відповідним бітом в регістрі статусу (I -біт). Найменші адреси в пам'яті програм за замовчуванням визначені як вектора переривань. Менші адреси володіють більш високим рівнем пріоритету. Після виникнення переривання біт I загального дозволу переривань апаратно скидається і всі переривання забороняються. Користувач може програмно записати лог. 1 в біт I для дозволу вкладених переривань. В цьому випадку всі дозволені переривання можуть перервати поточну процедуру обробки переривань. Біт I автоматично встановлюється після виконання інструкції виходу з переривання RETI. Є два основних типи переривань. Перший тип переривань активізується подією, яка призводить до встановлення мітки переривань. Для даних переривань програмний лічильник змінюється на відповідний вектор переривання для виконання процедури його обробки і потім апаратно очищає мітку переривання. Мітки переривання також скидаються шляхом запису лог.1 до відповідного розряду. Якщо виникає умова переривання, але дане переривання заборонено, то мітка встановлюється і запам'ятовується до дозволу цього переривання або скидається програмно. Аналогічно, якщо виникає одне і більше умов переривань при скинутій мітці загального дозволу переривань, то відповідна мітка встановлюється і запам'ятовується до відновлення роботи переривань, а потім переривання будуть виконані у відповідності з пріоритетом. Другий тип переривань активізується відразу після виконання умови переривання. Дані переривання не обов'язково мають мітки переривань. Якщо умова переривання зникає до його дозволу, то даний запит ігнорується. Після виходу з переривання AVR-мікроконтроллер повертається до виконання основної програми. Зверніть увагу, що регістр статусу автоматично не запам'ятовується при виклику процедури обробки переривання і не відновлюється при виході з цієї процедури. Дані дії необхідно виконати програмно. Приклад обробника переривань у Асамблелі з запам’ятовуванням регістру статусу /*Збереження регістру статусу у стек*/ in r16, SREG push r16 … корисні дії обробника переривань … /*Відновлення регістру статусу із стеку*/ pop r16 out SREG, r16
/*Вихід з обробника переривань і перехід на програму, виконання якої було перерване*/ Reti
При виконанні інструкції CLI всі переривання забороняються. Запит на переривання не буде відпрацьований після виконання інструкції CLI, навіть якщо воно виникає одночасно з виконанням команди CLI. Для дозволу переривань використовується інструкція SEI, а наступна за SEI інструкція буде виконана перед відпрацюванням будь-якого відкладеного переривання.
Час реакції на переривання Реакція на відпрацювання запиту на переривання триває мінімум 4 машинних цикли. Після закінчення цього часу програма продовжує своє виконання з вектора відповідного переривання. Протягом 4 машинних циклів стан програмного лічильника поміщається в стек. Як правило, за адресою вектора переривань зберігається команда переходу на процедуру обробку переривань, а на даний перехід витрачається ще 3 машинних цикли. Якщо запит на переривання виникає в процесі виконання інструкції, що вимагає більш 1 машинних цикли на виконання, то переривання буде оброблено тільки після виконання цієї інструкції. Якщо переривання виникає під час перебування мікроконтролера в режимі сну (SLEEP MODE), то реакція на переривання збільшиться ще на 4 цикли. Дана затримка пов'язана з часом старту з обраного режиму сну. Вихід з процедури обробки переривання вимагає 4 машинних цикли. Протягом цього часу двобайтовий програмний лічильник витягується з стека, покажчик стека двічі інкрементується і встановлюється біт I в регістрі статусу SREG.
Таблиця векторів переривань для мікроконтролера ATMEGA128
У таблиці 24 показано розташування векторів скидання і переривань в залежності від різних установок BOOTRST і IVSEL. Якщо програма не використовує переривання, то вона може бути розміщена рівномірно, використовуючи комірки з адресами векторів переривань для зберігання програмного коду. Можливий також випадок, коли вектор скидання розташовується в секторі прикладної програми, а вектори переривань - в завантажувальному секторі або навпаки.
Таблиця розміщення векторів скидання і переривань
Нижче наведено більшість типових і спільних програмних установок адрес скидання і векторів переривань у ATmega128: Адреса Інструкція Коментар jmp RESET; Перехід на обробку скидання jmp EXT_INT0; Перехід на обробку запиту IRQ0 jmp EXT_INT1; Перехід на обробку запиту IRQ1 jmp EXT_INT2; Перехід на обробку запиту IRQ2 jmp EXT_INT3; Перехід на обробку запиту IRQ3 jmp EXT_INT4; Перехід на обробку запиту IRQ4 jmp EXT_INT5; Перехід на обробку запиту IRQ5 jmp EXT_INT6; Перехід на обробку запиту IRQ6 jmp EXT_INT7; Перехід на обробку запиту IRQ7 jmp TIM2_COMP; Перехід на обробку при виконанні умови порівняння таймера 2 jmp TIM2_OVF; Перехід на обробку при переповненні таймера 2 jmp TIM1_CAPT; Перехід на обробку при захопленні фронту таймером 1 jmp TIM1_COMPA; Перехід на обробку при спрацьовуванні компаратора А таймера 1 jmp TIM1_COMPB; Перехід на обробку при спрацьовуванні компаратора В таймера 1 jmp TIM1_OVF; Перехід на обробку при переповненні таймера 1 jmp TIM0_COMP; Перехід на обробку при виконання умови порівняння таймера 0 jmp TIM0_OVF; Перехід на обробку при переповненні таймера 0 jmp SPI_STC; Перехід на обробку при завершенні передачі SPI jmp USART0_RXC; Перехід на обробку при завершенні прийому УСАПП0 jmp USART0_DRE; Перехід на обробку при звільненні регістра даних UDR УСАПП0 jmp USART0_TXC; Перехід на обробку при завершенні передачі УСАПП0 jmp ADC; Перехід на обробку при завершенні перетворення АЦП jmp EE_RDY; Перехід на обробку при готовності ЕСППЗУ jmp ANA_COMP; Перехід на обробку при спрацьовуванні аналогового компаратора jmp TIM1_COMPC; Перехід на обробку при спрацьовуванні компаратора З таймера 1 jmp TIM3_CAPT; Перехід на обробку при захопленні фронту таймером 3 jmp TIM3_COMPA; Перехід на обробку при спрацьовуванні компаратора А таймера 3 jmp TIM3_COMPB; Перехід на обробку при спрацьовуванні компаратора В таймера 3 jmp TIM3_COMPC; Перехід на обробку при спрацьовуванні компаратора З таймера 3 jmp TIM3_OVF; Перехід на обробку при переповненні таймера 3 jmp USART1_RXC; Перехід на обробку по завершенні прийому УСАПП1 jmp USART1_DRE; Перехід на обробку при звільненні регістра даних UDR УСАПП1 jmp USART1_TXC; Перехід на обробку при завершенні передачі УСАПП1 jmp TWI; Перехід на обробку переривання по двопровідному послідовному інтерфейсу jmp SPM_RDY; Перехід на обробку переривання при готовності виконання команди SPM ; RESET: ldir16, high (RAMEND); Початок основної програми out SPH, r16; Установка покажчика стека в кінці ОЗУ Ldi r16, low (RAMEND) Out SPL, r16 sei; Дозвіл переривань
............
(!) Це може бути вам корисно У випадку, коли використовуються тільки деякі переривання, але прийьому перехід на обробник переривань треба встановити у свій вектор переривань (наперед визначену комірку), то зручно використати такий шаблон: /**********************************************************************************/ jmp RESET; Перехід на обробку скидання jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp TIM0_COMP; Перехід на обробку при виконання умови порівняння таймера 0 jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT jmp NO_INT ; RESET: ldir16, high (RAMEND); Початок основної програми out SPH, r16; Установка покажчика стека в кінці ОЗУ Ldi r16, low (RAMEND) Out SPL, r16 sei; Дозвіл переривань
............ CONTINUE: ............ Jmp CONTINUE /*Обробник неіснуючого переривання*/ NO_INT: reti /*Обробник переривання від таймеру-лічильнику 0 при досягненні умови порівняння*/ TIM0_COMP: In r16, SREG Push r16 … корисні дії обробника переривань … /*Відновлення регістру статусу із стеку*/ Pop r16 out SREG, r16
/*Вихід з обробника переривань і перехід на програму, виконання якої було перерване*/ Reti ............ /**********************************************************************************/ Загальний регістр управління перериваннями задає розміщення таблиці векторів переривань.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-18; просмотров: 421; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.247.221 (0.009 с.) |