Введение в микроконтроллеры семейства AVR 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Введение в микроконтроллеры семейства AVR



Введение в микроконтроллеры семейства AVR

 

 

 

 

 

 

 

 

 

УФА 2020


Содержание

Лабораторная работа №1............................................................ 4

Иследование микроконтроллера ATmega8 фирмы Atmel (ядро). 4

Общие сведения.............................................................................. 4

Состав серии AVR.......................................................................... 4

Особенности серии AVR................................................................ 5

Внутренняя память......................................................................... 5

Способы программирования Flash- и EEPROM-памяти............. 7

Порты ввода-вывода...................................................................... 7

Периферийные устройства............................................................ 7

Задания к лабораторной работе №1............................................. 8

1. Ознакомиться со структурой проекта, назначением его составных частей 8

2. Изучить характеристики и возможности микроконтроллера Atmega 8    8

3. Знакомство со средой программирования WinAVR................ 8

4. Моделирование процесса программирования микроконтроллера в программе Proteus:................................................................................................... 10

Требования к отчёту.................................................................... 10

Контрольные вопросы:................................................................ 11

Лабораторная работа № 2......................................................... 12

Архитектура микроконтроллеров AVR. Использование микроконтроллера Atmega 8 в качестве двоично-десятичного программируемого счетчика.    12

Теоретическая часть..................................................................... 12

Архитектура микроконтроллеров AVR..................................... 12

Регистры общего назначения (РОН)........................................... 12

Регистры ввода-вывода................................................................ 13

Память.......................................................................................... 14

Память программ......................................................................... 14

Оперативная память микроконтроллеров AVR......................... 16

Энергонезависимая память данных (EEPROM)......................... 17

Счетчик команд и стековая память.............................................. 19

Подсистема ввода-вывода............................................................ 21

Система прерываний.................................................................... 23

Таймеры-счетчики........................................................................ 26

Аналоговый компаратор............................................................. 33

Аналого-цифровой преобразователь.......................................... 34

Задания к лабораторной работе №2........................................... 36

1. Ознакомиться со архитектурой микроконтроллеров AVR, основными составными частями/............................................................................. 36

2. Сборка схемы эксперимента 1 и 2 в среде Protius.................. 36

3. Знакомство со средой программирования Flowcode............. 37

Создание двоичного счетчика на МК Atmega8.......................... 37

Создание нового проекта............................................................. 37

Создание периферийного устройства для МК........................... 38

3. Создание переменных: led и button......................................... 39

Компиляция проекта.................................................................... 42

Моделирование проекта.............................................................. 42

Симуляция эксперимента............................................................. 42

Требования к отчёту.................................................................... 42

Лабораторная работа № 3......................................................... 43

Программирование и прошивка МК AVR................................. 43

Прошивка МК AVR..................................................................... 43

Оборудование для прошивки МК............................................... 43

Программа AVRDUDE_PROG 3.3............................................. 43

Программатор USBASP.............................................................. 49

Характеристики программатора:................................................ 50

Задания к лабораторной работе №3........................................... 51

1. При помощи паяльного оборудования подготавливаем набор джамперов под руководством преподавателя................................................................ 51

2. Установка драйверов для программатора USBASP.............. 51

3. Подготовка МК к прошивке.................................................... 52

4. Устанавливаем драйвера......................................................... 53

5. Знакомство с программатоом AVRDUDEPROG................... 54

Требования к отчёту.................................................................... 54

 


Лабораторная работа №1

Иследование микроконтроллера ATmega8 фирмы Atmel (ядро).

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

Теоретическая часть

Общие сведения

Самая современная разработка фирмы Atmel на сегодняшний день – это микроконтроллеры серии AVR.Микросхемы этой серии достаточно распространены и популярны во всем мире. Поэтому мы остановимся именно на этих микроконтроллерах. В пределах серии микроконтроллеры подразделяются на несколько семейств. Устаревшее семейство «Classic» в настоящее время уже не используется. Основу серии составляет семейство «Tiny»и семейство «Mega».

Семейство микроконтроллеров «Tiny» – это микроконтроллеры минимальной конфигурации и, преимущественно, небольших габаритов, предназначенные для простых недорогих и миниатюрных электронных устройств управления. Они имеют минимальный набор возможностей и невысокую цену.

Микроконтроллеры семейства «Mega», напротив, имеют развитую архитектуру и предназначены для более мощных микропроцессорных систем.

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

Состав серии AVR

Семейство AVR включает в себя микроконтроллеры самой разной конфигурации, с разным объемом памяти и разным количеством встроенных портов ввода-вывода и других дополнительных устройств.

Конструктивное исполнение микроконтроллеров также очень разнообразно. Применяется несколько типов корпусов (см. рис. 2.1). Это традиционные корпуса типа PDIP с количеством ножек от 8 до 40. Корпуса типа SOIC с количеством выводов от 8 до 20. А вот большинство микроконтроллеров семейства Mega AVR выполнятся либо в сорокавыводных PDIP-корпусах, либо в современных многовыводных корпусах типа TQFP или MLF (до 64 выводов).

Рис.3.1. Микроконтроллеры серии AVR

Особенности серии AVR

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

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

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

Внутренняя память

Микроконтроллеры AVR имеют в своем составе три вида памяти. Во-первых,это ОЗУ (оперативная память для данных). В документации фирмы Atmel эта память называется SRAM.Объем ОЗУ для разных контроллеров варьируется от полного ее отсутствия (в микросхеме AT90S1200) до 2 Кбайт. Подробнее смотрите графу «SRAM» в табл. 3.1.

Второй вид памяти – это память программ. Она выполнена по Flash-технологии и предназначена для хранения управляющей программы. В фирменной документации она так и называется – Flash-память.Объем программной памяти в разных микросхемах этой серии составляет от 1 до 64 Кбайт. Программная память допускает стирание записанной информации и повторную запись. Программная память микроконтроллеров AVR допускает до 1000 циклов записи/стирания. Запись информации в память программ производится при помощи специальных устройств (программаторов). Последние модели микроконтроллеров AVR имеют программу самостоятельной переписи.

Третий вид памяти – это энергонезависимая память для данных.Она также выполнена по Flash-технологии, но в технической документации она называется EEPROM. Основное назначение этого вида памяти – долговременное хранение данных. Управляющая программа микроконтроллера может в любой момент записать данные в (до 100000 циклов) EEPROM или прочитать их оттуда.

Записывать информацию в EEPROM можно также при помощи программатора.Причем для записи информации в память программ и в EEPROM используется один и тот же программатор. Такой порядок доступа к памяти позволяет при необходимости отказаться от программной перезаписи EEPROM и использовать эту память для хранения любых неизменяемых констант. Это увеличивает гибкость системы.

Порты ввода-вывода

Порты ввода-вывода – это обязательный атрибут любого микроконтроллера. Их количество для каждой конкретной микросхемы разное. Все порты микроконтроллеров AVR восьмиразрядные, но в некоторых случаях отдельные разряды не используются. Это связано с ограниченным количеством выводов (ножек) у микросхемы.

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

Периферийные устройства

Кроме указанных выше элементов, любой микроконтроллер AVR обязательно содержит набор так называемых периферийных устройств.Периферийные они по отношению к центральному процессорному устройству (ЦПУ) микроконтроллера. Но находятся они также внутри микросхемы. Ниже перечислены все возможные периферийные устройства, которые могут входить в состав микроконтроллера AVR.

Встроенные таймеры/счетчики. Микроконтроллеры AVR могут содержать от одного до четырех таймеров/счетчиков. Причем используются как восьми-, так и шестнадцатиразрядные таймеры. Их количество на один микроконтроллер может составлять от одного до шести.

Генератор сигнала с широтно-импульсной модуляцией (ШИМ). Генерация сигнала ШИМ – это просто один из режимов работы таймера/счетчика. Одна микросхема может иметь от 2 до 12 каналов ШИМ, а может не иметь ни однбго.

Аналоговый компаратор. Входит в состав практически во всех микроконтроллеров AVR.

Аналогово-цифровой преобразователь (АЦП). АЦП микроконтроллеров AVR могут иметь от четырех до шестнадцати каналов. То есть могут преобразовывать в цифровой эквивалент до 16 входных аналоговых сигналов. На самом деле канал АЦП всегда один. Но на его входе стоит система переключения (аналоговый мультиплексор). Поэтому АЦП способен подключаться к нескольким разным источникам аналогового сигнала.

Последовательный интерфейс. Микросхемы AVR способны поддерживать несколько разных видов последовательных интерфейсов. Каждый такой интерфейс реализует один или несколько известных стандартов передачи информации. Один из видов такого интерфейса поддерживает тот же стандарт, что и СОМ-порт персонального компьютера. Есть также интерфейс, поддерживающий стандарт широко известной в микроэлектронике так называемой PC шины.

Сюда же относится и SPI-интерфейс, который может использоваться как для последовательного программирования памяти программ, так и для связи нескольких микроконтроллеров в мультипроцессорной системе. Любой последовательный интерфейс предназначен для передачи информации последовательным способом. Каждый байт передается последовательно, бит за битом.

Задания к лабораторной работе №1

Требования к отчёту

Отчёт подготавливается в электронном виде. Он должен содержать отчет о выполненных работах, исходных данных, результаты выполнения проектов, скрин-шоты этапов выполнения работ.

К отчёту необходимо приложить файлы проектов схем и скомпилированных прошивок.

Содержание отчета:

1. Цель работы

2. Описание экспериментов

3. Выполненные задания

4. Выводы

Контрольные вопросы:

1. Перечислите основные структурные элементы лабораторного макета.

2. Что такое микроконтроллер? Для чего он применяется?

3. Расскажите о микроконтроллере Atmega8

4. Опишите последовательность действий при программирование лабораторного стенда?

5. Опишите последовательность действий при программирование модели микроконтроллера в программе Proteus.

6. Почему желательно производить предварительную отладку программ на эмуляторе, а не на самом лабораторном стенде?

 


Лабораторная работа № 2

Теоретическая часть

Регистры ввода-вывода

При рассмотрении микропроцессоров мы рассматривали назначение портов ввода-вывода, в микроконтроллерах AVR эти функции выполняют регистры ввода-вывода.

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

Именно они и получили название портов ввода-вывода. Чуть позже мы подробно рассмотрим их устройство.

Простые же регистры, служащие для связи центрального процессора с периферийными устройствами, получили более подходящее в данном случае название: регистры ввода-вывода. Эти регистры позволяют обмениваться информацией лишь со встроенными периферийными устройствами самой микросхемы. Такими как таймеры, компараторы, каналы последовательной передачи информации, система прерывания, АЦП и т. д.

Каждый регистр ввода-вывода имеет свой номер, то есть адрес в адресном пространстве ввода-вывода. Номера регистров могут иметь значение от $00 до $ЗЕ Это означает, что максимально возможное количество РВВ равно 64. Однако реальное количество регистров любого микроконтроллера всегда меньше.

Разные микроконтроллеры имеют разный набор регистров ввода-вывода. Каждый регистр ввода-вывода, помимо номера, имеет свое уникальное имя. Имя регистра – это условное понятие, придуманное лишь для удобства программистов. Сам же микроконтроллер работает исключительно с номером регистра.

Например в микроконтроллере семейства «Tiny» регистр номер $1Е предназначен для управления EEPROM. Этот регистр имеет имя EEAR. Второй регистр управления EEPROM имеет номер $1D и имя EEDR. Для разных микроконтроллеров регистры, имеющие одинаковое назначение, обычно имеют и одинаковое имя. А вот номер регистра может и отличаться.

Память

Как уже говорилось, микроконтроллеры AVR имеют три вида памяти: память программ (Flash); оперативную память данных (SRAM); энергонезависимую память данных (EEPROM).

Объем каждого вида памяти для разных микросхем вы можете видеть в табл. 2.1. Память EEPROM имеется не во всех микроконтроллерах. Кроме того, в некоторых моделях отсутствует оперативная память (SRAM). В таких микросхемах для оперативного хранения данных используются только регистры общего назначения.

Каждый из этих трех видов памяти имеет свое собственное адресное пространство, и доступ к разным видам памяти осуществляется независимо друг от друга. Такое построение микроконтроллеров называется архитектурой Гарвардского типа.

Память программ

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

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

Для разных микроконтроллеров память программ имеет разный объем (см. табл. 2.1). Однако при любом объеме памяти она представляет собой непрерывную область и начинается с ячейки, имеющей нулевой адрес.

На рис. 2.2 изображено адресное пространство памяти программ в графическом виде. Такое условное изображение адресного пространства часто применяется в технической литературе. Изображенное на рисунке адресное пространство включает в себя ячейки Flash-памяти с адресами от $000 до F_END.

Рис. 2.2

Условное обозначение F_END означает адрес последней ячейки памяти. Значение этого адреса будет разным для разных микроконтроллеров. Например, для микроконтроллера ATtiny2313 адрес последней ячейки памяти будет равен $7FF. Адрес последней ячейки памяти всегда на единицу меньше объема этой памяти.

Объем памяти для каждого микроконтроллера различается. Так, для микроконтроллера ATtiny2313 объем программной памяти равен 2 килобайтам. То есть 2048 байт. Если записать это число в шестнадцатиричном виде, получим $800. Учитывая то, что адресация начинается с нулевого адреса, то для адресации такого количества ячеек мы должны использовать адреса с 0 по 2047. Или в шестнадцатиричном виде от $000 до $7FF.

Некоторые адреса программной памяти зарезервированы. То есть используются для неких специальных целей. И первым зарезервированным адресом можно считать нулевой адрес. Он называется вектором системного сброса. Именно с этого адреса начинается выполнение программы после системного сброса микроконтроллера. Остальные зарезервированные адреса - это векторы прерываний.

Вектор прерывания - это адрес в программной памяти, с которого начинается выполнение процедуры обработки прерывания.

Так как любой микроконтроллер AVR имеет несколько источников прерывания, то и векторов прерывания тоже несколько: по одному на каждый вид прерывания. Адреса векторов прерываний находятся сразу за вектором сброса. То есть занимают ячейки с адресами $001, $002 и т. д. Количество векторов прерываний для разных микросхем разное.

Внутренним прерыванием называется прерывание, вызванное одним из встроенных периферийных устройств самого микроконтроллера. Например прерывание по таймеру, аналоговому компаратору, АЦП ит. д.

Внешнее прерывание – это прерывание по сигналу, поступающему от внешнего источника на специальный вход микроконтроллера.

Область адресов, зарезервированных под векторы прерываний, называют таблицей векторов прерываний.

В микроконтроллерах семейства «Tiny» эта область начинается с адреса $001. Для большинства микроконтроллеров семейства «Mega» таблица векторов прерываний начинается с адреса $002. При разработке программы для микроконтроллера программист по своему усмотрению может использовать, но может и не использовать механизм прерываний.

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

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

Подсистема ввода-вывода

Микроконтроллеры серии AVR всегда имеют в своем составе от одного до семи портов ввода-вывода. Каждый разряд такого порта подсоединен к одному из выводов (контактов) микросхемы. Порты ввода-вывода служат для обмена информацией с внешними устройствами. Как уже говорилось, порты могут быть полные и неполные. Полный порт содержит 8 разрядов. В неполных портах задействованы они не все. Каждый порт имеет свое имя. Они именуются латинскими буквами от А до G.

Для управления каждым портом ввода-вывода используется три специальных РВВ. Это регистры PORTx, DDRx и PINx. Под «х» здесь подразумевается конкретная буква – имя порта. Например, для порта А имена регистров управления будут такими: PORTA, DDRA и PINA.

Рассмотрим теперь назначение каждого из этих регистров:

PORTx – регистр данных (используется для вывода информации);

DDRx – регистр направления передачи информации;

PINx – регистр ввода информации.

Отдельные разряды приведенных выше регистров также имеют свои имена. Разряды регистра PORTx обычно именуются как Рхп. Где «п» – это номер разряда. К примеру, разряды регистра PORTA будут именоваться следующим образом: РАО, PAI, РА2 –РА7.

Разряды порта DDRx именуются как DDxn (для порта А – DDA0, DDA1 –DDA7).

Разряды порта PINx именуются как PINxn (для порта А – PINA0, PINA1 –PINA7).

Для других портов буква А заменяется соответственно на В, С, D, Е, F, G.

Любой порт ввода-вывода микроконтроллера серии AVR устроен таким образом, что каждый его разряд может работать как на ввод, так и на вывод. То есть он может быть входом, а может быть выходом. Для переключения режимов работы служит регистр DDRx. Каждый разряд регистра DDRx управляет своим разрядом порта. Если в каком-либо разряде регистра DDRx записан ноль, то соответствующий разряд порта работает как вход.

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

Для того, чтобы прочитать информацию с внешнего вывода микроконтроллера, нужно сначала перевести нужный разряд порта в режим ввода. То есть записать в соответствующий разряд регистра DDRx ноль.

Только после этого на данный вывод микроконтроллера можно подавать цифровой сигнал от внешнего устройства. Далее микроконтроллер просто читает байт из регистра PINx. Содержимое соответствующего бита прочитанного байта соответствует сигналу на внешнем выводе порта.

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

Благодаря этому резистору упрощается подключение внешних контактов и кнопок. Обычно контакты требуют внешнего резистора. Теперь без внешнего резистора можно обойтись. Включением и отключением внутренних резисторов управляет регистр PORTx, если порт находится в режиме ввода. Это хорошо видно из табл. 2.2, в которой показаны все режимы работы порта.

Таблица 2.2

Конфигурирование порта ввода-вывода

DDxn Pxn Режим Резистор Примечание
0 0 Вход Отключен Вывод отключен от схемы
0 1 Вход Подключен Вывод является источником тока
1 0 Выход Отключен На выходе «0»
1 1 Выход Отключен На выходе «1»

На рис. 2.4 показана упрощенная схема одного разряда порта ввода- вывода. Эта схема дает представление о работе порта. Схема, изображенная на рисунке, – это лишь универсальная часть схемы вывода порта. На самом деле любой вывод кроме основных функций имеет ряд дополнительных. Поэтому реальная схема сложнее. В каждую такую схему добавлены элементы, реализующие все дополнительные функции.

Система прерываний

Важным элементом микроконтроллера является система прерываний. Система прерываний присутствует в любом современном микроконтроллере. Она также есть во всех микроконтроллерах AVR. Как уже говорилось, система прерываний микроконтроллера обслуживает несколько источников прерываний. Количество источников прерываний для разных микроконтроллеров различно.

Самое минимальное количество источников прерывания имеет микроконтроллер Attiny25. Два внутренних источника прерываний (от таймера/счетчика и от встроенного компаратора), одно внешнее прерывание по сигналу на входе INTO и одно прерывание по изменению сигналов на любом из входов, которое тоже считается внутренним.

К источникам прерываний фирма Atmel относит также начальный сброс микроконтроллера. Вектор начального сброса обычно также включают в таблицу векторов прерываний. Так что получается, что у микроконтроллера ATtiny имеется четыре внутренних источника прерываний и один внешний. Другие микросхемы серии AVR имеют более сложные системы прерываний.

Самая развитая на сегодняшний день система прерываний – у микроконтроллера Atmega 128. Этот микроконтроллер способен в общей сложности обслуживать 48 внутренних и 17 внешних источников прерываний. Источниками прерываний могут служить встроенные таймеры, компараторы, АЦП, любой последовательный канал и система управления EEPROM.

Управление системой прерываний

Управление системой прерываний осуществляется при помощи специальных регистров ввода-вывода. Определяющим регистром здесь является регистр SREG (регистр состояния системы). Этот регистр предназначен для хранения флагов состояния. Каждый бит регистра – это один из флагов. Седьмой бит регистра состояния называется «флаг I». Это флаг глобального разрешения прерываний. Когда значение этого флага равно нулю, все прерывания в микроконтроллере запрещены.

Для разрешения прерываний нужно установить этот флаг в единицу. Однако чаще всего нам не нужны все виды прерываний одновременно. Для того, чтобы запретить одни прерывания и разрешить другие, применяются так называемые маскирующие регистры (регистры маски).

Регистр маски – это обычный регистр ввода-вывода, служащий для управления отдельными источниками прерываний. Каждому биту в регистре маски соответствует один источник. Если бит сброшен в ноль, прерывание этого вида запрещено. Если бит установлен в единичное состояние, прерывание разрешено.

В микроконтроллерах AVR применяются два регистра маски. Регистр GIMSK управляет всеми видами прерываний, кроме прерываний от таймеров. В некоторых микроконтроллерах семейства «Mega» этот регистр называется GICR. Для управления прерываниями от таймеров имеется специальный регистр TIMSK.

Кроме регистров маски для управления процессом выполнения прерываний существуют еще два регистра. Это регистры флагов прерываний. Каждый бит такого регистра – это флаг одного из видов прерываний. При поступлении запроса на прерывание флаг устанавливается в единицу. По состоянию флага программа может судить о наличии запроса.

В определенных режимах после установки флага процедура обработки прерывания вызывается автоматически. Сразу после вызова процедуры соответствующий флаг сбрасывается. Микроконтроллеры AVR имеют два регистра флагов: регистр GIFR (обслуживает те же прерывания, что и регистр GIMSK) и регистр TIFR (флаги прерываний от таймеров).

Алгоритм работы системы прерываний

Общий алгоритм работы системы прерываний следующий. После сброса микроконтроллера все прерывания запрещены (флаги разрешения сброшены). Если программист планирует использовать один из видов прерываний, он должен предусмотреть в своей программе включение этого прерывания.

Для включения прерывания программа должна установить флаг I регистра SREG в единицу и записать в регистры маски такой код, который разрешит лишь нужные в данный момент прерывания. Разрешив, таким образом, прерывания, программа приступает к выполнению своей главной задачи.

При поступлении запроса на прерывание устанавливается флаг соответствующего прерывания. Флаг устанавливается даже в том случае, если прерывание запрещено. Если прерывание разрешено, то микроконтроллер приступает к его выполнению. Текущая программа временно приостанавливается, и управление передается на адрес соответствующего вектора прерывания.

В тот же момент флаг I автоматически сбрасывается, запрещая обработку других прерываний. Флаг, соответствующий вызванному прерыванию, также сбрасывается, сигнализируя о том, что микроконтроллер уже приступил к его обработке. Подпрограммы обработки прерывания обязательно должны оканчиваться командой возврата из прерывания (RETI). По этой команде управление передается в ту точку основной программы, в которой прервалась ее работа. Флаг I при этом автоматически устанавливается в единицу, разрешая новые прерывания.

Следует заметить, что без принятия специальных мер невозможны вложенные прерывания. Пока обрабатывается одно прерывание, все остальные прерывания запрещены. Однако ни одно прерывание не остается без обработки. При получении запроса на прерывание соответствующий флаг обязательно будет установлен. В этом состоянии он будет находиться до тех пор, пока данное прерывание не будет обработано.

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

В качестве примера, таблица векторов прерываний для микроконтроллеров семейства «Ttiny» (см. табл. 3.3).

Таблица 2.3

Адреса векторов прерываний микроконтроллеров семейства «Tiny»

Источник Описание Tinyl1 х Tiny12x Tiny15L Tiny28x
INTO Внешнее прерывание 0 $001 $001 $001 $001
INT1 Внешнее прерывание 1 - - - $002
PIN.CANGE По изменению сигнала на любом из выводов $002 $002 $002 -
LOW_LEVEL По низкому уровню на входе порта В - - - $003
TIMER1 COMPA По совпадению показаний таймера/счетчика Т1 с содержимым контрольного регистра - - $003 -
TIMER1 OVF Переполнение таймера/счетчика Т1 - - $004 -
TIMERO OVF Переполнение таймера/счетчика ТО $003 $003 $005 $004
EE_RDY По готовности EEPROM  – $004 $006 -
ANA_COMP По сигналу от аналогового компаратора $004 $005 $007 $005
ADC По завершению преобразования в АЦП - - $008 -

Таймеры-счетчики

Любой микроконтроллер серии AVR содержит несколько встроенных таймеров. Причем по своему назначению их можно разделить на две категории.

К первой категории относятся таймеры общего назначения.

Вторую категорию составляет сторожевой таймер.

Сторожевой таймер предназначен для автоматического перезапуска микроконтроллера в случае «зависания» его программы.

Для каждой микросхемы нужен всего один сторожевой таймер. В любом микроконтроллере AVR такой таймер имеется.

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

По этой причине данные таймеры называют «таймеры/счетчики». В микросхемах AVR применяются как восьмиразрядные, так и шестнадцатиразрядные таймеры/счетчики. Их количество для разных микроконтроллеров изменяется от одного до четырех. Точное количество таймеров/счет- чиков для каждой микросхемы серии AVR различается. Все таймеры обозначаются числами от 0 до 3.

Например: Timer/Counter0, Timer/Counter1 и т.д.

В русскоязычной литературе их чаще именуют сокращенно Т1, Т1, Т2, Т3. Таймеры Т0 и Т2 в большинстве микроконтроллеров – восьмиразрядные. Таймеры Т1 и ТЗ – шестнадцатиразрядные. Таймер Т0 имеется в любой микросхеме AVR. Остальные добавляются по мере усложнения модели.

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

Счетный регистр восьмиразрядного таймера именуется TCNTx, где «х» – это номер таймера. Для таймера Т0 регистр называется TCNT0. Для таймера Т2 – TCNT2. Шестнадцатиразрядные регистры именуются похожим образом. Отличие в том, что каждый шестнадцатиразрядный счетный регистр для микроконтроллера представляет собой два регистра ввода-вывода.

Один предназначен для хранения старших битов числа, а второй – для хранения младших битов. К имени регистра старших разрядов добавляется буква Н, а для регистра младших разрядов добавляется буква L. Таким образом, счетный регистр таймера Т1 – это два регистра ввода-вывода: TCNT1H и TCNT1L. Счетный регистр таймера ТЗ – это два регистра TCNT3H и TCNT3L.

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

Любой таймер жестко завязан с системой прерываний. Вызвать прерывание может целый ряд событий, связанных с таймером. Например, существует прерывание по переполнению таймера, по срабатыванию специальной схемы совпадения. Отдельные прерывания может вызывать сторожевой таймер.

Режимы работы таймеров

Таймеры микроконтроллеров семейства AVR могут работать в нескольких режимах. Разные микроконтроллеры имеют разные наборы режимов для своих таймеров. Для выбора режимов работы существуют специальные регистры – регистры управления таймерами. Для простых таймеров используется один регистр управления. Для более сложных – два регистра. Регистры управления таймером называются TCCRx (где «х» – номер таймера). Например, для таймера ТО используется один регистр с именем TCCR0. Для управления таймером Т1 используется два регистра: TCCR1А и TCCR1B. При помощи регистров управления производится не только выбор соответствующего режима, но и более тонкая настройка таймера. Ниже перечислены все основные режимы работы таймера и их описание.

Режим Normal



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 320; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.82.79 (0.111 с.)