- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Занимательная электроника - Юрий Ревич
Шрифт:
Интервал:
Закладка:
Несомненно, истинным подарком для фирмы Atmel стала позиция итальянских инженеров, выбравших в 2004 году AVR для любительской платформы Arduino, отчего популярность этого семейства быстро выросла, и за его будущее можно не беспокоиться. Об Arduino мы будем подробно говорить в последних главах этой книги.
Classic, Mega и TinyЛинейка универсальных контроллеров AVR общего назначения делится на семейства: Classic, Mega и Tiny (есть и новейшее семейство Xmega, содержащее весьма «навороченные» кристаллы). МК семейства Classic (они именовались, как АТ908<марка контроллера>) ныне уже не производятся, однако все еще распространены в литературе, т. к. для них наработано значительное количество программ. Чтобы пользователям не пришлось переписывать все ПО, фирма Atmel позаботилась о преемственности — большинство МК семейства Classic имеет функциональные аналоги в семействе Mega, например, AT90S8515 — ATmega8515, AT90S8535 — ATmega8535 и т. п. (только AT90S2313 имеет аналог в семействе Tiny — ATtiny2313).
Полная совместимость обеспечивается специальным установочным битом (из набора так называемых Fuse-битoв), при программировании которого Mega-контроллер начинает функционировать, как Classic (подробнее об этом рассказано в главе 19). Для вновь разрабатываемых устройств обычно нет никакого смысла в использовании их в режиме совместимости, однако такой прием в ряде случаев может оказаться полезным для начинающих, поскольку программы для МК Classic устроены проще и часто встречаются в литературе.
Семейство Tiny (что в буквальном переводе означает «крохотный») предназначено для наиболее простых устройств. Часть МК этого семейства не имеет возможности программирования по последовательному интерфейсу, и потому мы их, за исключением ATtiny2313, не будем рассматривать в этой книге (это не значит, что остальных Tiny следует избегать — среди них есть очень удобные и функциональные микросхемы, нередко вообще не имеющие аналогов). У составляющего исключение МК ATtiny2313 отсутствует бит совместимости с «классическим» аналогом AT90S2313, одним из самых простых и удобных контроллеров Atmel, но при внимательном рассмотрении оказывается, что они и без такого бита совместимы «снизу вверх», — программы для «классического» 2313 практически полностью подходят и для Tiny2313 (см. главу 19).
Структура МК AVRОбщая структура внутреннего устройства МК AVR приведена на рис. 18.9. Здесь показаны все основные компоненты AVR (за исключением некоторых специализированных) — в отдельных моделях некоторые компоненты могут отсутствовать или различаться по характеристикам, неизменным остается только общее 8-разрядное процессорное ядро (GPU, General Processing Unit). Кратко рассмотрим наиболее важные компоненты, с большинством из которых мы познакомимся в дальнейшем подробнее.
Рис. 18.9. Общая структурная схема микроконтроллеров AVR
Начнем с памяти. В структуре AVR имеются три разновидности памяти: flash-память программ, ОЗУ (SRAM) для временного хранения данных и энергонезависимая память (EEPROM) для долговременного хранения констант и данных. Рассмотрим их по отдельности.
Память программВстроенная flash-память программ в AVR-контроллерах имеет объем от 1 Кбайт у ATtiny11 до 256 Кбайт у ATmega2560. Первое число в наименовании модели содержит величину этой памяти в килобайтах из ряда: 1, 2, 4, 8, 16, 32, 64, 128 и 256 Кбайт. Так, ATtiny2313 имеет 2 Кбайт памяти, a ATmega8535 — 8 Кбайт.
С точки зрения программиста память программ можно считать построенной из отдельных ячеек — слов по два байта каждое. Устройство памяти программ (и только этой памяти!) по двухбайтовым словам — очень важный момент, который ассемблерному программисту нужно твердо усвоить. Такая организация обусловлена тем, что любая команда в AVR имеет длину ровно 2 байта. Исключение составляют команды jmp, call и некоторые другие (например, lds), которые оперируют с адресами 16-разрядной и более длины. Длина этих команд составляет 4 байта, и они используются лишь в моделях с памятью программ более 8 Кбайт, поэтому в этом разделе книги вы их не встретите. Arduino основано на AVR-контроллерах с большим объемом памяти, но там нам об этих тонкостях знать необязательно. Во всех остальных случаях счетчик команд сдвигается при выполнении очередной команды на 2 байта (одно слово), поэтому необходимую емкость памяти легко подсчитать, зная просто число используемых команд.
По умолчанию все контроллеры AVR всегда начинают выполнение программы с адреса $0000[29]. Если в программе не используются прерывания, то с этого адреса может начинаться прикладная программа, как мы увидим далее. В противном случае по этому адресу располагается так называемая таблица векторов прерываний, подробнее о которой мы будем говорить в главе 19.
Память данных (ОЗУ, SRAM)В отличие от памяти программ, адресное пространство памяти данных адресуется побайтно (а не пословно). Адресация полностью линейная, без какого-либо деления на страницы, сегменты или банки, как это принято в некоторых других системах.
Исключая некоторые младшие модели Tiny, объем встроенной SRAM колеблется от 128 байтов (например, у ATtiny2313) до 4–8 Кбайт у старших моделей Mega. Адресное пространство статической памяти данных (SRAM) условно делится на несколько областей, показанных на рис. 18.10. К собственно встроенной SRAM относится лишь затемненная часть, до нее по порядку адресов расположено адресное пространство регистров, где первые 32 байта занимает массив регистров общего назначения (РОН), еще 64 — регистров ввода/вывода (РВВ).
Рис. 18.10. Адресное пространство статической памяти данных (SRAM) микроконтроллеров AVR
Для некоторых моделей Mega (ATmega8515, ATmega162, ATmega128, ATmega2560 и др.) предусмотрена возможность подключения внешней памяти объемом до 64 Кбайт. Отметим, что адресные пространства РОН и РВВ не отнимают пространство у ОЗУ данных — так, если в конкретной модели МК имеется 512 байтов SRAM, а пространство регистров занимает первые 96 байтов (до адреса $5f), to адреса SRAM займут адресное пространство от $0060 до $025F (т. е. от 96 до 607 ячейки включительно). Конец встроенной памяти данных обозначается константой RAMEND. Следует учесть, что последние адреса SRAM, как минимум, на четыре-шесть ячеек от конца (в зависимости от количества вложенных вызовов процедур — для надежности лучше принять это число равным десяти или даже более) занимать данными не следует, т. к. они при использовании подпрограмм и прерываний заняты под стек.
Операции чтения/записи в память одинаково работают с любыми адресами из доступного пространства, и потому при работе с SRAM нужно быть внимательным, — вместо записи в память вы легко можете «попасть» в какой-нибудь регистр. Для обращения к РОН, как к ячейкам памяти, можно в качестве адреса подставлять номер регистра, а вот при обращении к РВВ таким же способом к номеру последнего нужно прибавлять $20. Следует также помнить, что по умолчанию при включении питания все РВВ устанавливаются в нулевое состояние во всех битах (единичные исключения все же имеются, поэтому в критичных случаях надо смотреть документацию), а вот РОН и ячейки SRAM могут принимать произвольные значения.
Энергонезависимая память данных (EEPROM)Все модели МК AVR (кроме снятого с производства ATtiny11) имеют встроенную EEPROM для хранения констант и данных при отключении питания. В разных моделях объем ее варьируется от 64 байтов (ATtinylx) до 4 Кбайт (старшие модели Mega). Число циклов перепрограммирования EEPROM может достигать 100 тыс.
Напомним, что EEPROM отличается от flash-памяти возможностью выборочного программирования побайтно (вообще-то, даже побитно, но эта возможность скрыта от пользователя). Чтение из EEPROM осуществляется с такой же скоростью, как и чтение из РОН, — в течение одного машинного цикла (правда, на практике оно растягивается на 4 цикла, но программисту следить за этим специально не требуется). А вот запись в EEPROM протекает значительно медленнее и к тому же с неопределенной скоростью — цикл записи одного байта может занимать от 2 до 4 и более миллисекунд. Процесс записи регулируется встроенным RC-генератором, частота которого нестабильна (при низком напряжении питания можно ожидать, что время записи будет больше). За такое время при обычных тактовых частотах МК успевает выполнить несколько тысяч команд, поэтому программирование процедуры записи требует аккуратности — например, нужно следить, чтобы в момент записи не «вклинилось» прерывание (подробнее об этом далее).

