Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Лабораторная работа 2 ОРГАНИЗАЦИЯ ПРЕРЫВАНИЙ ПРИ РАБОТЕ МИКРОКОНТРОЛЛЕРА



 

Цель работы:

1. Ознакомление со способами организации и обработки прерываний при работе МК, закрепление навыков программирования МК.

2. Ознакомление с навыки генерации начального кода программ в пакетах «Code Vision AVR» и «Image Craft C»создание программ, реализующих и обрабатывающих программные и аппаратные прерывания.

3. Осуществление симуляции работы микропроцессорной системы программ в среде «Proteus».

4. Осуществить запись (прошивку) программ в реальный МК, также провести демонстрацию работы программы на реальной схеме.

 

Объект исследования: микроконтроллер ATMega 16.

 

Аппаратные средства: виртуальная лаборатория на ЭВМ IBM PC: программные пакеты «Proteus», «CodeVision AVR», «Image Craft C». МК ATMega 16, кнопки SWT, светодиоды blueLED.

 

Краткие теоретические сведения

 

Внешние электрические сигналы: это напряжения и токи поступающие к МК от подключенных к нему проводниками других компонентов электронного устройства.

Важнейший из них - это напряжение питания МК.

МК AVR серии ATMega могут работать, т.е. исполнять заложенную в них программу уже при подаче одного напряжения питания, а узнать о том, что он работает, можно по изменению тока потребляемого МК по проводу питания.

Диапазон допустимых напряжений питания указан на первой странице DataSheeta и составляет обычно 3, 3 – 5, 5 В постоянного напряжения - плюс которого подключается к выводам VCC МК.

Отрицательный вывод источника питания подключается к выводам МК GND и его потенциал принимается за ноль вольт и относительно него измеряются все другие напряжения на ножках МК.

Проводник, соединенный с выводами GND МК, называют общим или нулевым или " земля" и на схеме обозначают специальным символом - например, жирной горизонтальной черточкой или несколькими горизонтальными полосками друг под другом убывающей длины.

Электрические сигналы это токи и вызываемые их протеканием напряжения. Но говоря о сигналах, поступающих в МК, мы рассматриваем их как, некоторые напряжения, измеряемые относительно ножек GND МК.

Важно: В цифровой технике приняты некоторые правила по которым можно представить аналоговый сигнал, допустимый для подачи на ножку МК (он должен быть выше -0.5 В и ниже чем напряжение питания МК увеличенное на 0.3 - 0.5 В) как 1-битный цифровой сигнал или как одно из двух значений:

" 1" - высокий логический уровень (ВЛУ) - логическая единица

или

" 0" - низкий логический уровень (НЛУ) - логический ноль.

Важный вывод - любое изменение напряжения на ножке МК лежащее между двумя пороговыми напряжениями не ведет к изменению того каким логическим уровнем считает МК напряжение на этой ножке в данный момент!

Внимательно прочитайте и запомните - все входные сигналы с ножек МК поступают на встроенные триггеры Шмитта - это устройства имеющие гистерезис (иначе - разность напряжений) по входному напряжению переключения их выходов из " 1" в " 0" и наоборот.

Другие важные для работы МК внешние сигналы:

1) сигнал сброса RESET - при " 0" на этой ножке МК останавливает выполнение программы, содержимое регистров МК становится начальным, а все выводы становятся высокоомными входами (говорят: Z - состояние).

После появления на этой ножке " 1" и наличии питания МК - выполнение программы начнется с начала, как после включения питания МК.

2) питание аналоговой части МК, АЦП (входы ADC_x) ножка AVCC - ее нужно соединить с выводом VCC питания МК даже если вы не предполагаете использовать АЦП.

3) опорное напряжение для АЦП (входы ADC_x) ножка AREF - напряжение на ней должно быть от 2 В до напряжения питания МК. 4) ножки для подключения кварца или керамического резонатора XTAL1 XTAL2.

 

Прерывания в AVR.

 

Interrupts - прерывания, очень важная и мощная функция МК AVR ATmega и ATtiny.

Иногда требуется максимально быстрая реакция программы на какие-то события. Например, приход данных на USART или завершение АЦП или изменение уровня на ножке МК подключенной к контактному датчику или переполнение таймера.

Быструю реакцию обеспечивает механизм прерываний. Группа команд, выполняемых в ответ на запрос прерывания, называется подпрограммой обработки прерывания. Прерывание (если оно разрешено) вызывается в нормальном потоке программы сразу по окончании исполнения текущей команды. Логика прерывания заносит содержимое всех регистров в стек и, таким образом, их состояния могут быть восстановлены по завершении

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

Рис. 1 Схема принципа обработки прерываний.

 

Запомните: При возникновении события которое может вызвать разрешенное в данный момент времени прерывание (список таких событий в даташите в разделе Interrupts таблица " Reset and Interrupt Vectors" ) и при ГЛОБАЛЬНОМ разрешении прерываний (бит 7 в регистре SREG " установлен" ), выполнение программы МК останавливается, сохраняются (запоминаются) место остановки и некоторые нужные данные, бит7 в регистре SREG обнуляется, очищается флаг сработавшего прерывания и затем происходит вызов и выполнение функции обработчика данного прерывания.

От момента наступления события до начала выполнения функции обработчика прерывания проходит не менее 4 тактов процессора. Таким образом, скорость реакции на прерывание напрямую зависит от частоты, на которой работает МК!

Если программа находится в функции обработчике прерывания и в этой функции не был установлен бит SREG.7 то другие события вызывающие прерывания не могут уже вызвать прерывание программы и их обработку.

Делайте функции обработчики прерывания как можно короче!

Если сейчас произойдут события, которые могут вызвать прерывания, то установятся их флаги, но даже разрешенные прерывания не произойдут! Нужно тщательно продумывать алгоритм программы, чтоб успевать обрабатывать все прерывания - т.е. не пропускать нужные события.

В конце функции обработчика прерывания компилятор ставит инструкцию RETI после выполнения которой бит 7 в регистре SREG становится " 1" - т.е. прерывания опять ГЛОБАЛЬНО разрешаются и программа продолжает выполняться с того места где она была в момент возникновения прерывания.

НО! Если при глобальном разрешении прерываний обнаружится установленный флаг разрешенного прерывания, то будет вызвана функция обработчик этого прерывания.

Такая ситуация может возникнуть если во время выполнения обработчика прерывания возникло другое прерывание - т.е. установился его флаг. Если возникнет несколько разрешенных прерываний одновременно, то первым будет выполняться, то которое выше в списке векторов прерываний МК в ДШ. Соответственно по мере отработки накопившихся и разрешенных прерываний их флаги будут очищаться.

А вот флаги неразрешенных прерываний не очистятся, пока программа этого не сделает записью в них числа 1.

Вы можете запрещать и разрешать как все прерывания сразу, так и каждое по отдельности. Все сразу - изменяя бит7 в регистре SREG вот такими строчками в компиляторе CodeVisionAVR:

#asm(" sei" ) /* бит_I сделать " 1" теперь разрешенные прерывания будут обрабатываться, если есть установленный флаг прерывания, то произойдет вызов его функции обработчика */

#asm(" cli" ) /* бит_I сделать " 0" запретить все прерывания ГЛОБАЛЬНО. */

Прерывания легко настроить интерактивно с помощью мастеров начального кода компиляторов CVAVR и ICC.

В МК AVR и других, прерывания могут возникать по многим событиям:

- изменение уровня на некоторых ножках МК,

- " 0" на некоторых ножках МК,

- переполнение таймеров,

- " насчитывание" таймером определенного значения,

- завершение АЦП преобразования,

- изменение уровня на выходе компаратора,

- события в USART,

- другие события (Для ATmega16 прерывания перечислены в таблице 18 " Reset and Interrupt Vectors" )

ПОРЯДОК И МЕТОДИКА ВЫПОЛНЕНИЯ РАБОТЫ

1) Обработка внутренних прерываний

 

К ножкам-входам внешних прерываний INT0 INT1 INT2 ATmega16 я подключил резисторы по 10 КОм к + питания МК для создания внешней подтяжки и еще подключил три кнопки 0, 1 и 2 в " Control Panel" симулятора. Нажимая кнопку мышкой можно замыкать соответствующую ножку на " землю" создавая на ней " 0" на время пока кнопка нажата. Когда кнопки не нажаты на ножках " 1".

Конфигурировал прерывания и USART с помощью мастера генератора начального кода CVAVR.

Прерывания INT0 INT1 разрешены и сконфигурированы " по любому изменению уровня" - т.е. прерывание может возникать и по фронту (" 0" -> " 1" ) и по спаду (" 1" -> " 0" ) сигнала на ножке PD2 и PD3 соответственно.

Прерывание INT2 не конфигурировал - оно оставлено " по-умолчанию" т.е. отключено.

Откройте проект vmlab.prj в VMLAB и сделайте " ребилд-ол"

В меню View откройте, если их нет на экране, панели " регистры и флаги" " SCOPE" и " Control Panel" - разместите их поудобней.

Теперь нажмите несколько раз на светофор - чтоб прекратились меседжи и симуляция шла непрерывно. Кликните по панели " регистры и флаги" чтоб вывести ее на передний план.

Теперь нажмите кнопку K2 и отпустите.

Посмотрите в панели " регистры и флаги" в регистре флагов GIFR (обязательно почитайте об этом регистре в ДатаШите) установился бит_5, если навести на него мышку то появится его название - INTF2 - это флаг прерывания INT2. Вы видите что хотя мы не включали это прерывание его флаг установился при событии соответствующем ему. Как я вам и обещал выше!

Теперь (симуляция продолжается, время с начала программы МК в правом нижнем углу бежит...) нажмите K0 в панели " Control Panel" сразу же произойдет разрешенное прерывание, и программа перейдет в функцию обработчик прерывания INT0 и в виртуальном терминале TTY появится сообщение:

int0

Отпустите K0 и нажмите K1 отпустите K1

Смотрите: так как мы находимся в отработке паузы 100 мС в обработчике прерывания от INT0. Бит_7 в SREG остается " 0" и значит прерывания не исполняются. Все правильно - но отпускание кнопки K0 вызвало установку флага INTF0 а нажатие и отпускание K1 установило флаг INTF1.

Если теория прерываний изложенная мной выше верна то по завершении текущей обработки прерывания INT0 должны произойти еще по 1 вызову обработчиков прерываний INT0 и INT1 - причем сейчас МК не " знает"

какое из них случилось первым и значит будет обрабатывать их по порядку перечисления в таблице 18 ДШ.

Ждем не долго... появляются с некоторой паузой одно сообщение и затем другое свидетельствующие о вызове соответствующих обработчиков прерываний:

int0 int1

При этом вначале очистится бит INTF0, а затем INTF1.

Вопрос для самоконтроля: Почему нажатие и отпускание кнопки K0 вызвало две обработки прерывания INT0, а от кнопки K1 только одно?

Попробуете симуляцию снова и измените порядок нажатия кнопок: вначале K1 а затем K0 - и вы увидите что последние два прерывания все равно будут выполнены в том же порядке: int0 и затем int1

Важно! Из примера выше следует что

Накопление не обработанных прерываний крайне не желательно так как МК " не помнит" последовательность возникновения соответствующих событий!

Практическое применение прерываний будет рассмотрено в задачах - упражнениях курса.

... и теперь самый пожалуй интересный пунктик -

ПРОГРАММА

" зашитая" в МК

Я постулировал ранее что -

Возможность МК действовать по вашей программе - вот суть-соль МК. Это главное отличие МК от " обычных" непрограммируемых микросхем.

Я уже рассказал выше

- о внешних электрических сигналах поступающих на МК

- про электронику подключенную к МК

- о возможностях заложенных производителем

AVR ATmega содержит многократно программируемую FLASH память программ - в нее загружается (есть различные варианты прошивки, загрузки

программы - достаточно пяти проводков от LPT-порта к МК) программа которую будет исполнять МК при наличии следующих условий:

1) есть питание МК 2) есть уровень " 1" на выводе Reset 3) есть источник тактового сигнала 4) нет сброса от иного источника сброса (== перезагрузки МК)

При наличии этих условий МК начинает шагать по программе которая представляет из себя последовательность инструкций которые может выполнять МК иногда прерываясь так как было описано выше.

 


Поделиться:



Последнее изменение этой страницы: 2019-03-20; Просмотров: 349; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.027 с.)
Главная | Случайная страница | Обратная связь