Главная Учебники - Разные Лекции (разные) - часть 23
Методические указания к лабораторным
работам со стендом
STK
500 и МК
ATMega
16
Содержание
Введение 3 Особенности микроконтроллера ATmega16 (ATmega16L) 4 Работа со стендом 6 Пример загрузки программы в стенд 8 Лабораторная работа №1. «Изучение структуры стенда STK500 и системы команд микроконтроллера ATmega16» 10 Лабораторная работа №2. «Система прерываний. Работа с таймером/счетчиком 0» 18 Лабораторная работа №3. «Изучение 16 – разрядного Таймера/счетчика 1» 28 Введение
Стенд STK500 представляет собой лабораторный макет с микроконтроллером, памятью программ, памятью данных и разнообразными периферийными устройствами. Он позволяет разрабатывать и отлаживать программы, написанные на языках Си и Ассемблер. Загрузка программы производится с персонального компьютера через последовательный порт RS-232. Макет работает от источника напряжения - 10-15 Вольт. В лабораторных работах будет использоваться микроконтроллер фирмы ATMEL - ATmega 16. Условные обозначения:
Особенности микроконтроллера
ATmega
16 (
ATmega
16
L
)
· 8-разрядный высокопроизводительный AVR микроконтроллер с малым потреблением. · Прогрессивная RISC архитектура: - 130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл; - 32 8-разрядных рабочих регистра общего назначения; - полностью статическая работа; - производительность приближается к 16 MIPS (при тактовой частоте 16 МГц); - встроенный 2-цикловый переумножитель. · Энергонезависимая память программ и данных: - 16 Кбайт внутренней программируемой Flash памяти (In-System Self-Programmable Flash); - обеспечивает 1000 циклов стирания/записи; - дополнительный сектор загрузочных кодов с независимыми битами блокировки; - внутрисистемное программирование встроенной программой загрузки; - обеспечен режим одновременного чтения/записи (Read-While-Write); - 512 байт EEPROM; - обеспечивает 100000 циклов стирания/записи; - 1 Кбайт встроенной SRAM; - программируемая блокировка, обеспечивающая защиту программных средств пользователя. · Интерфейс JTAG (совместимый с IEEE 1149.1): - возможность сканирования периферии, соответствующая стандарту JTAG; - расширенная поддержка встроенной отладки; - программирование через JTAG интерфейс: Flash, EEPROM памяти, перемычек и битов блокировки. · Встроенная периферия: - два 8-разрядных таймера/счетчика с отдельным предварительным делителем, один с режимом сравнения; - один 16-разрядный таймер/счетчик с отдельным предварительным делителем и режимами захвата и сравнения; - счетчик реального времени с отдельным генератором; - четыре канала широтно-импульсного модулятора PWM; - 8-канальный 10-разрядный аналого-цифровой преобразователь; - 8 несимметричных каналов; - 7 дифференциальных каналов (только в корпусе TQFP); - 2 дифференциальных канала с программируемым усилением в 1, 10 или 200 раз (только в корпусе TQFP); - байт-ориентированный 2-проводный последовательный интерфейс; - программируемый последовательный USART; - последовательный интерфейс SPI (ведущий/ведомый); - программируемый сторожевой таймер с отдельным встроенным генератором; - встроенный аналоговый компаратор. · Специальные микроконтроллерные функции: - сброс при подаче питания и программируемый детектор кратковременного снижения напряжения питания; - встроенный калиброванный RC-генератор; - внутренние и внешние источники прерываний; - шесть режимов пониженного потребления: Idle, Power-save, Power-down, Standby, Extended Standby и снижения шумов ADC. · Выводы I/O и корпуса: - 32 программируемые линии ввода/вывода; - 40-выводной корпус PDIP и 44-выводной корпус TQFP. · Рабочие напряжения 2,7 - 5,5 В (ATmega16L) 4,5 - 5,5 В (ATmega16) · Рабочая частота 0 - 8 МГц (ATmega16L) 0 - 16 МГц (ATmega16) Блок- схема ATmega16:
Рисунок 1. Блок схема ATMega16 Работа со стендом
STK
500
Минимальные программные и аппаратные требования для работы с
STK500
Рисунок.2. Схема подключения к ПК Описание установки
Рисунок 3. Описание STK500 Описание работы светодиодов
Рисунок 4. Схема включения светодиода В STK500 используются транзистор и два резистора для поддержания постоянной яркости свечения светодиодов при любом значении напряжения питания микроконтроллера (VTG), а также для выключения светодиодов, когда VTG отсутствует. Напряжение, подаваемое на светодиод, 1.8 – 6 Вольт. Для подключения светодиодов к МК нужен 10 – жильный кабель, которым соединяются разъем панели светодиодов и разъем ввода/вывода МК. Описание работы кнопок
Рисунок 5. Схема кнопки На линиях портов ввода-вывода AVR-микроконтроллеров имеется возможность активизации встроенных подтягивающих резисторов к плюсу питания. Это свойство можно использовать в целях исключения внешнего подтягивающего резистора. В STK500 добавлены внешние подтягивающие резисторы 10 кОм для формирования лог. «1» на выводах SWn при отжатом состоянии кнопок. Резистор 150 Ом выполняет функцию защитного токоограничения, например, в случае ошибочной настройки линий ввода-вывода, связанных с кнопками, на вывод.
Загрузка программы в стенд. Работа с программным обеспечением
AVRStudio
Загрузка программы в стенд. 1. На персональном компьютере загрузить «Пуск->Atmel AVR Tools->AVRStudio». Ввести имя проекта, нажать Finish. 3. В окне редактора ввести код программы. Рисунок 7. AVR Studio 4. Сохранить набранный файл с расширением *.ASM (*.С). 5. Откомпилировать набранную программу - кнопка «F7» на клавиатуре или нажать кнопку 6. Возможные ошибки в программе можно просмотреть в окне «message». 7. После устранения всех ошибок, откомпилировать программу снова и записать данные файла с расширением *.НЕХ в микроконтроллер. Для этого: - нажать кнопку «AVR» на панели «AVRStudio toolbar», появится окно «STK500»; - в закладке «Program» выбрать «Device» - устройство (ATmega16); - в разделе «Flash», в поле «Input HEX File» указать расположение откомпилированного файла. Рисунок 8. AVR Studio При передаче данных с персонального компьютера в стенд
STK
500 данные отображаются на индикаторе стенда. Горит светодиод
Led
7,
Led
6,
Led
5..
При записи программы в МК убедитесь, что плата
STK
500 включена.
Запись новой программы возможна в любой момент времени работы загруженной программы
. Лабораторная работа №1
Тема:
Изучение структуры стенда STK500 и системы команд микроконтроллера ATmega16. Цель:
Изучить функциональные возможности учебно-отладочного стенда, внутреннюю структуру и систему команд МК ATmega16. Получить первичные навыки программирования МК ATmega16. Для выполнения данной лабораторной работы нужно знать:
Краткие теоретические сведения
Память
В соответствии с гарвардской архитектурой память AVR-микроконтроллера разделена на две области: память данных и память программ. Кроме того, ATmega128 содержит память на EEPROM(ЭСППЗУ) для энергонезависимого хранения данных. Все три области памяти являются линейными и равномерными. Внутрисистемно программируемая флэш-память программ ATmega16 содержит 16 кбайт внутренней внутрисистемно перепрограммируемой флэш-памяти для хранения программы. Поскольку все AVR-инструкции являются 16 или 32-разр., то флэш-память организована как 8 кбайт ´ 16. Для программной защиты флэш-память программ разделена на два сектора: сектор программы начальной загрузки и сектор прикладной программы. Флэш-память характеризуется износостойкостью не менее 10.000 циклов запись/стирание. Программный счетчик РС у ATmega16 является 13-разр., поэтому, позволяет адресоваться к 8 кбайт памяти программ. Рисунок 9. Память программ Первые 1120 ячеек памяти данных относятся к файлу регистров, памяти ввода/вывода и встроенному статическому ОЗУ. В первых 96 ячейках расположен файл регистров (32 ячейки) и стандартная память ввода-вывода (64 ячейки). Следующие 1024 ячейки внутренней статической ОЗУ данных. Реализовано пять различных способов адресации для охвата всей памяти: прямая, косвенная со смещением, косвенная, косвенная с предварительным декрементом и косвенная с последующим инкрементом. Регистры R26 – R31 из файла регистров используются как регистры-указатели для косвенной адресации. Прямая адресация позволяет адресоваться ко всей памяти данных. Косвенная адресация со смещением позволяет адресовать 63 ячейки, начиная с адреса указанного в регистрах Y или Z. При использовании инструкции косвенной адресации с предварительным декрементом и последующим инкрементом значения адресных регистров X, Y и Z, соответственно декрементируются до или инкрементируются после выполнения инструкции. 32 рабочих регистров общего назначения, 64 регистра ввода-вывода и 1024 байт внутреннего статического ОЗУ данных в ATmega16 доступны с помощью всех этих режимов адресации. Рисунок 10. Распределение памяти в ATMega 16 Пример записи в регистр общего назначения: .
DEF Treg=r16 ;Присваиваем регистру общего назначения имя Treg .CSEG Start: ldi Treg, 00000001b ;запись числа в «Treg» т.е. в регистр R16 ПОРТЫ ВВОДА/ВЫВОДА Порт B 8-разрядный двунаправленный порт. Для обслуживания порта отведено три регистра: регистр данных PORTB ($18, $38), регистр направления данных - DDRB ($17, $37) и выводы порта B ($16, $36). Адрес выводов порта B предназначен только для чтения, в то время как регистр данных и регистр направления данных - для чтения/записи. Все выводы порта имеют отдельно подключаемые подтягивающие резисторы. Выходы порта B могут поглощать ток до 20 мА и непосредственно управлять светодиодными индикаторами. Выводы PB0..PB7 используются как входы и замыкаются на землю, если включены внутренние подтягивающие резисторы, при этом выводы являются источниками тока (IIL
). Дополнительные функции выводов порта B приведены в таблице 16. Таблица 1. Альтернативные функции выводов порта B Вывод Альтернативная функция PB0 AIN0 (Положительный вход аналогового компаратора) PB1 AIN1 (Отрицательный вход аналогового компаратора) PB5 MOSI (Вход данных для загрузки памяти) PB6 MISO (Выход данных для чтения памяти) PB7 SCK (Вход тактовых импульсов последовательного обмена) При использовании альтернативных функций выводов регистры DDRB и PORTB должны быть установлены в соответствии с описанием альтернативных функций. РЕГИСТР ДАННЫХ ПОРТА B - PORTB
Бит $18 Чт./зап. Начальн.знач. 7 6 5 4 3 2 1 0 PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 РЕГИСТР НАПРАВЛЕНИЯ ДАННЫХ ПОРТА
B - DDRB
Бит $17 Чт./зап. Начальн.знач. 7 6 5 4 3 2 1 0 DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB R/W R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 Бит $16 Чт./зап. Начальн.знач. 7 6 5 4 3 2 1 0 PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB R R R R R R R R Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z PINB не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов порта B. При чтении PORTB, читаются данные из регистра-защелки, при чтении PINB читаются логические значения, присутствующие на выводах порта. Порт B, как порт ввода/вывода общего назначения
Все 8 бит порта B при использовании для ввода/вывода одинаковы. Бит DDBn регистра DDRB выбирает направление передачи данных. Если бит установлен (1), вывод сконфигурирован как выход. Если бит сброшен (0) - вывод сконфигурирован как вход. Если PORTBn установлен и вывод сконфигурирован как вход, включается КМОП подтягивающий резистор. Для отключения резистора, PORTBn должен быть сброшен (0) или вывод должен быть сконфигурирован как выход. АЛЬТЕРНАТИВНЫЕ ФУНКЦИИ ПОРТА B
SCK - бит 7 порта B - тактовые импульсы для записи/чтения памяти MISO - бит 6 порта B - выход данных для чтения памяти MOSI - бит 5 порта B - вход данных для записи памяти OC1 - PORTB, Bit 3 - Выход совпадения. Этот вывод может быть сконфигурирован для вывода внешнего события - совпадения таймера 1. Для этого бит DDB3 должен быть установлен в 1 (вывод сконфигурирован как выход). AIN1 - бит 1 порта B - Отрицательный вход аналогового компаратора. Если вывод сконфигурирован как вход (DDB1 сброшен) и отключен внутренний подтягивающий резистор (PB0 сброшен), то этот вывод работает как отрицательный вход встроенного аналогового компаратора. AIN0 - бит 0 порта B - Положительный вход аналогового компаратора. Если вывод сконфигурирован как вход (DDB0 сброшен) и отключен внутренний подтягивающий резистор (PB1 сброшен), то этот вывод работает как положительный вход встроенного аналогового компаратора. Таблица 2. Влияние DDBn на выводы порта B DDBn PORTBn Вх/Вых Подт.резист Комментарий 0 0 Вход 7Нет Третье состояние (Hi-Z) 0 1 Вход Да PBn источник тока IIL
, если извне соединен с землей 1 0 Выход Нет Выход установлен в 0 1 1 Выход Нет Выход установлен в 1 n = 7,6...0 - номер вывода Для порта D зарезервированы 3 ячейки памяти - регистр PORTD ($12, $32), регистр направления данных - DDRD ($11, $31) и выводы порта D - PIND ($10, $30). Регистры данных и направления данных могут читаться/записываться, ячейка PIND - только для чтения. Порт D - 7-разрядный двунаправленный порт со встроенными подтягивающими регистрами. Выходные буферы порта могут поглощать ток до 20 мА. Выводы используются, как входы и на них подан низкий уровень, они являются источниками тока IIL
, если подключены подтягивающие резисторы. Некоторые из выводов порта имеют альтернативные функции, как показано в таблице 18. Если выводы порта используются для обслуживания альтернативных функций, они должны быть сконфигурированы на ввод/вывод в соответствии с описанием функции. Таблица 3. Альтернативные функции порта D Вывод порта Альтернативная функция PD0 RXD (вход данных UART) PD1 TXD (выход данных UART) PD2 INT0 (вход внешнего прерывания 0) PD3 INT1 (вход внешнего прерывания 1) PD4 T0 (внешний вход таймера счетчика 0) PD5 T1 (внешний вход таймера счетчика 1) PD6 ICP (вход захвата таймера счетчика 1) РЕГИСТР ДАННЫХ ПОРТА
D - PORTD
Бит $12($32) Чт./зап. (R/W) Начальн.знач. 7 6 5 4 3 2 1 0 - PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 PORTD R R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 РЕГИСТР НАПРАВЛЕНИЯ ДАННЫХ ПОРТА
D - DDRD
Бит $11($31) Чт./зап. (R/W) Начальн.знач. 7 6 5 4 3 2 1 0 - DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 DDRD R R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 0 0 ВЫВОДЫ ПОРТА
D - PIND Бит $10 ($30) Чт./зап. (R/W) Начальн.знач. 7 6 5 4 3 2 1 0 - PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 R R R R R R R R 0 Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z Hi-Z PIND не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов порта D. При чтении PORTD, читаются данные из регистра-защелки, при чтении PIND читаются логические значения, присутствующие на выводах порта. Порт D, как порт ввода/вывода общего назначения
Все 7 бит порта D при использовании для ввода/вывода одинаковы. Бит DDDn регистра DDRD выбирает направление передачи данных. Если бит установлен (1), вывод сконфигурирован как выход. Если бит сброшен (0) - вывод сконфигурирован как вход. Если PORTDn установлен и вывод сконфигурирован как вход, включается КМОП подтягивающий резистор. Для отключения резистора, PORTDn должен быть сброшен (0) или вывод должен быть сконфигурирован как выход. Таблица 4. Влияние DDDn на выводы порта D DDDn PORTDn Вх/Вых Подт.резист Комментарий 0 0 Вход Нет Третье состояние (Hi-Z) 0 1 Вход Да PDn источник тока IIL
, если извне соединен с землей 1 0 Выход Нет Выход установлен в 0 1 1 Выход Нет Выход установлен в 1 n = 6...0 - номер вывода
Альтернативные функции порта D
ICP - Порт D, бит 6 - вход захвата таймера/счетчика 1. Подробнее см. описание таймера. T1 - Порт D, бит 5 - тактовый вход таймера/счетчика 1. Подробнее см. описание таймера. T0 - Порт D, бит 4 - тактовый вход таймера/счетчика 0. Подробнее см. описание таймера. INT1 - Порт D, бит 3 - вход внешних прерываний 1. Подробнее см. описание прерываний. INT0 - Порт D, бит 2 - вход внешних прерываний 0. Подробнее см. описание прерываний. TXD - Порт D, бит 1 - выход передатчика UART. Если разрешена работа передатчика UART, то независимо от состояния DDRD1 этот вывод сконфигурирован как выход. RXD - Порт D, бит 0 - выход приемника UART. Если разрешена работа приемника UART, то независимо от состояния DDRD0 этот вывод сконфигурирован как выход. Когда UART использует вывод для приема данных, единица в PORTD0 подключает встроенный подтягивающий резистор. Пример выполнения лабораторной работы №1
В регистр r16 записывается число, например, 256 (11111111), при нажатии на клавишу SW0, расположенную на стенде, происходит уменьшение числа, записанного в r16, на 1. Вывод значения из регистра r16 отображается на панели светодиодов. Панель кнопок подключена к Gорту D, панель светодиодов к Порту B. ;***** Демонстрация использования светодиодов и кнопок в стенде STK500 .include "m16def.inc" .def Temp =r16 ; Temporary register ;объявление регистров .def Delay =r17 ; Delay variable 1 .def Delay2 =r18 ; Delay variable 2 ;***** Инициализация панели светодиодов RESET: ser Temp ; Установить биты (т.е. Регистр Temp=11111111 ) out DDRB,Temp ; Настраиваем Порт B на вывод ;**** Тестируем Порт B (Вывод) и Порт D (Ввод) LOOP: out PORTB,temp ; Запись регистра temp в порт B sbis PIND,0x00 ; If (Port D, pin0 == 0) Если бит 0 в порт B установлен inc Temp ; то увеличение значения регистра temp на 1 ;**** Задержка, сделана для того чтобы обновление светодиодов проходило «плавно», и по нажатию кнопки выполнялся один цикл. ; Если не использовать задержку, то возможно выполнение нескольких циклов за одно нажатие кнопки. DLY: dec Delay brne DLY dec Delay2 brne DLY rjmp LOOP
Индивидуальные задания
1. Занести в регистр R16 двоично-десятичное число 0Х, в регистр R17 двоично-десятичное число Х0, отобразить сумму чисел на панели светодиодов в двоичном виде. 2. Занести в регистр R16 двоично-десятичное число ХХ отобразить его на панели светодиодов в двоичном виде. 3. Занести в регистр R16 двоичное число, при нажатии кнопки SW0 инвертировать его и выводить на панель светодиодов.
Порядок выполнения лабораторной работы:
5. Загрузить программу в стенд ОЭВМ. Убедиться в правильном выполнении индивидуального задания, при отрицательном результате осуществить изменение алгоритма либо программы. Повторить загрузку программы в стенд STK500.
Контрольные вопросы:
1. Время выполнения команд (понятие такта, машинного цикла). 2. Типы данных. Формат команд. Команды прямой и косвенной адресации. 3. Команды сдвига. Арифметические команды. Логические команды. 4. Регистр признаков, команды вызывающие изменение регистра признаков. 5. Команды работы со стеком, последовательность действий (команд) при работе со стеком. 6. Назначение внутренних узлов МК. 7. Назначение и работа с внутренней памятью данных МК. 8. Система прерывания ОЭВМ. Назначение портов МК. 9. Физические характеристики выходных сигналов МК. Лабораторная работа №2
Тема:
Система прерываний. Работа с таймером/счетчиком 0 Цель:
Изучить систему прерываний МК ATmega16. Изучить работу таймера/счетчика 0. Для выполнения данной лабораторной работы нужно знать: Краткие теоретические сведения
Система прерываний
Atmega16
В ATmega16 предусмотрен 21 источник прерываний. Эти прерывания и сброс имеют различные векторы в области памяти программ. Каждому из прерываний присвоен отдельный бит, разрешающий данное прерывание при установке бита в 1, если бит I регистра состояния SREG разрешает общее обслуживание прерываний. Самые младшие адреса памяти программ определены как векторы сброса и прерываний. Полный список векторов прерываний приведен в таблице 2. Этот список определяет и приоритет различных прерываний. Меньшие адреса соответствуют более высокому уровню приоритета. Самый высокий уровень у RESET (сброс), следующий приоритет у INT0 - внешнего запроса прерывания 0 и т.д. Таблица 5. Сброс и векторы прерываний. Номер вектора Адрес Источник Описание прерывания 1 $000 RESET Вывод сброса и сброс от сторожевого таймера 2 $002 INT0 Внешнее прерывание 0 3 $004 INT1 Внешнее прерывание 1 4 $006 TIMER2 COMP Совпадение таймера/счетчика 2 5 $008 TIMER2 OVF Переполнение таймера/счетчика 2 6 $00A TIMER1 CAPT Захват таймера/счетчика 1 7 $00С TIMER1 COMPA Совпадение таймера/счетчика 1 8 $00E TIMER1 COMPB Совпадение таймера/счетчика 1 9 $010 TIMER1 OVF Переполнение таймера/счетчика 1 10 $012 TIMER0 OVF Переполнения таймера/счетчика 0 11 $014 SPI, STC Полная последовательная передача 12 $016 USART, RXC Usart, Rx complete 13 $018 USART, UDRE Usart регистр данных пустой 14 $01A USART, TXC Usart, Tx complete 15 $01C ADC Аналого-цифровой преобразователь 16 $01E EE_RDY EEPROM Ready 17 $020 ANA_COMP Аналоговый компаратор 18 $022 TWI Двух - проводной последовательный интерфейс 19 $024 INT2 Внешнее прерывание 2 20 $026 TIMER0 COMP Совпадение таймера/счетчика 0 21 $028 SPM_RDY Загрузка программной памяти готова Чаще всего используется следующая установка векторов прерываний в программе: Адрес Метка Код Комментарий $000 jmp RESET ; Reset Handler $002 jmp EXT_INT0 ; IRQ0 Handler $004 jmp EXT_INT1 ; IRQ1 Handler $006 jmp TIM2_COMP ; Timer2 Compare Handler $008 jmp TIM2_OVF ; Timer2 Overflow Handler $00A jmp TIM1_CAPT ; Timer1 Capture Handler $00C jmp TIM1_COMPA ; Timer1 CompareA Handler $00E jmp TIM1_COMPB ; Timer1 CompareB Handler $010 jmp TIM1_OVF ; Timer1 Overflow Handler $012 jmp TIM0_OVF ; Timer0 Overflow Handler $014 jmp SPI_STC ; SPI Transfer Complete Handler $016 jmp USART_RXC ; USART RX Complete Handler $018 jmp USART_UDRE ; UDR Empty Handler $01A jmp USART_TXC ; USART TX Complete Handler $01C jmp ADC ; ADC Conversion Complete Handler $01E jmp EE_RDY ; EEPROM Ready Handler $020 jmp ANA_COMP ; Analog Comparator Handler $022 jmp TWSI ; Two-wire Serial Interface Handler $024 jmp EXT_INT2 ; IRQ2 Handler $026 jmp TIM0_COMP ; Timer0 Compare Handler $028 jmp SPM_RDY ; Store Program Memory Ready Handler ; $02A RESET: ldi r16,high(RAMEND ) ; Main program start $02B out SPH,r16 ; Set Stack Pointer to top of RAM $02C ldi r16,low(RAMEND) $02D out SPL,r16 $02E sei ; Enable interrupts $02F <instr> xxx ... ... ... О
бработка прерываний
ATmega16 регистр управления прерыванием GIСR - Общий регистр управления прерывания, регулирует размещение вектора прерывания. Когда возникает прерывание, общий бит разрешения прерываний I очищается (ноль) и прерывания запрещаются. Программа пользователя может установить этот бит для разрешения прерываний. Флаг разрешения прерываний I устанавливается в 1 при выполнении команды выхода из прерывания - RETI. Для прерываний включаемых статическими событиями (т.е. переключаемыми уровнем) (например совпадение значения счетчика/таймера 1 с регистром совпадения) флаг прерывания взводится, когда происходит событие. Если флаг прерывания очищен и присутствует условие возникновения прерывания, флаг не будет установлен, пока не произойдет следующее событие. Когда программный счетчик устанавливается на текущий вектор прерывания для обработки прерывания, соответствующий флаг, сгенерированный прерыванием, аппаратно сбрасывается. Некоторые флаги прерывания могут быть сброшены записью логической единицы в бит соответствующий флагу. Бит Чт./зап. (R/W) Начальн. знач. 7 6 5 4 3 2 1 0 INT1 INT0 INT2 - - - IVSEL IVCE GICR R/W R/W R R R R R/W R/W 0 0 0 0 0 0 0 0 Бит 1 - IVSEL: Выбор вектора прерывания Когда бит IVSEL очищен (0), Векторы Прерывания установлены в начале Flash - памяти. Когда этот бит установлен (1), векторы прерывания перемещены на начало секции Загрузчика (Boot Loader) в Flash - памяти. Бит 0 - IVCE: Векторное изменение прерывания Допустимый бит IVCE должен быть установлен в логическую 1, чтобы применить изменение бита IVSEL. IVCE ОЧИЩЕН аппаратными четырьмя циклами после того, как будет записано или когда IVSEL записан. ОБЩИЙ РЕГИСТР ФЛАГОВ ПРЕРЫВАНИЙ -
GIFR Бит $3A($5A) Чт./зап. (R/W) Начальн. знач. 7 6 5 4 3 2 1 0 INTF1 INTF0 INTF2 - - - - - R/W R/W R R R R R R 0 0 0 0 0 0 0 0 Бит 7 - INTF1: Флаг внешнего прерывания 1: При возникновении на выводе INT1 события, вызывающего прерывание, INTF1 устанавливается в "1". Если установлены бит I регистра SREG и бит INT1 в GIMSK, происходит переход на вектор прерывания по адресу $004. Флаг очищается после выполнения обработчика прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу.
Бит 6 - INTF0: Флаг внешнего прерывания 0: При возникновении на выводе INT0 события вызывающего прерывание, INTF0 устанавливается в "1". Если установлены бит I регистра SREG и бит INT0 в GIMSK, происходит переход на вектор прерывания по адресу $002. Флаг очищается после выполнения обработчика прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу. Бит 5 - INTF2: Флаг внешнего прерывания 0: При возникновении на выводе INT0 события вызывающего прерывание, INTF0 устанавливается в "1". Если установлены бит I регистра SREG и бит INT0 в GIMSK, происходит переход на вектор прерывания по адресу $024. Флаг очищается после выполнения обработчика прерывания. Кроме того, флаг можно очистить, записав в него логическую единицу. Биты 4..0 - зарезервированы. В AT90S2313 эти биты зарезервированы и всегда читаются как 0. РЕГИСТР МАСКИ ПРЕРЫВАНИЯ ОТ ТАЙМЕРОВ/СЧЕТЧИКОВ - TIMSK
Бит $39($59) Чт./зап. (R/W) Начальн.знач. 7 6 5 4 3 2 1 0 OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 TIMSK R/W R/W R R R/W R R/W R 0 0 0 0 0 0 0 0 Бит 7 – OCIE2: Разрешение прерывания по совпадению таймера/счетчика 1: Если установлены бит OCIE2 и бит разрешения прерывания в регистре состояния, разрешены прерывания по совпадению таймера/счетчика 1. Прерывание (вектор $006) выполняется при равенстве таймера/счетчика 1 и регистра совпадения. В регистре флагов TIFR устанавливается ("1") флаг совпадения. Бит 6 – TOIE2: Разрешение прерывания по переполнению таймера/счетчика 2: Если установлен этот бит и бит разрешения прерываний в регистре состояния, разрешены прерывания по переполнению таймера/счетчика 2. Соответствующее прерывание (вектор $008) выполняется при переполнении таймера/счетчика 2. В регистре флагов таймеров/счетчиков (TIFR) устанавливается флаг переполнения. Если таймер/счетчик 1 работает в режиме ШИМ, флаг переполнения устанавливается при изменении направления счета, при значении $0000. Бит 5 - TICIE1: Разрешение прерывания по входу захвата: Если установлены бит TICIE1 и бит разрешения прерывания в регистре состояния, разрешены прерывания по входу захвата. Соответствующее прерывание (вектор $00A) выполняется по сигналу захвата на выводе 11 (PD6/ICP). В регистре флагов TIFR устанавливается ("1") флаг захвата. Бит 4 - OCIE1A: Разрешение прерывания по совпадению таймера/счетчика 1: Если установлены бит OCIE1A и бит разрешения прерывания в регистре состояния, разрешены прерывания по совпадению таймера/счетчика 1. Прерывание (вектор $00C) выполняется при равенстве таймера/счетчика 1 и регистра совпадения. В регистре флагов TIFR устанавливается ("1") флаг совпадения. Бит 3 - OCIE1B: Разрешение прерывания по совпадению таймера/счетчика 1: Если установлены бит OCIE1B и бит разрешения прерывания в регистре состояния, разрешены прерывания по совпадению таймера/счетчика 1. Прерывание (вектор $00E) выполняется при равенстве таймера/счетчика 1 и регистра совпадения. В регистре флагов TIFR устанавливается ("1") флаг совпадения. Бит 2 - TOIE1: Разрешение прерывания по переполнению таймера/счетчика 1: Если установлен этот бит и бит разрешения прерываний в регистре состояния, разрешены прерывания по переполнению таймера/счетчика 1. Соответствующее прерывание (вектор $010) выполняется при переполнении таймера/счетчика 1. В регистре флагов таймеров/счетчиков (TIFR) устанавливается флаг переполнения. Если таймер/счетчик 1 работает в режиме ШИМ, флаг переполнения устанавливается при изменении направления счета, при значении $0000. Бит 1 – OCIE0: Разрешение прерывания по совпадению таймера/счетчика 1: Если установлены бит OCIE0 и бит разрешения прерывания в регистре состояния, разрешены прерывания по совпадению таймера/счетчика 1. Прерывание (вектор $026) выполняется при равенстве таймера/счетчика 1 и регистра совпадения. В регистре флагов TIFR устанавливается ("1") флаг совпадения. Бит 0 - TOIE0: Разрешение прерывания по переполнению таймера/счетчика 0. Если этот бит установлен в 1, и бит I в регистре состояния установлен в 1, разрешены прерывания по переполнению таймера/счетчика 0. При возникновении переполнения выполняется соответствующий вектор прерывания ($006). Флаг переполнения (TOV0) в регистре флагов прерываний (TIFR) таймеров/счетчиков устанавливается в 1.
|