Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Также всегда следует устанавливать внешние резисторы при работе выводов МК на общую шину, как в интерфейсе 12С (или просто при подсоединении входа МК к выходу другого устройства с открытым коллектором, например, мониторов питания, описанных в главе 3), при подключении к двухвыводным кнопкам (особенно при наличии внешнего прерывания, см. главы 4 и 5). Сопротивление встроенного резистора (на самом деле представляющего собой, разумеется, полевой транзистор) в таких случаях слишком велико для того, чтобы электромагнитные помехи ("наводки") на нем эффективно "садились".

Микросхемы AVR, как и всякая КМОП-логика, благодаря высокому порогу срабатывания эффективно защищены от помех по шине "земли". Однако они ведут себя гораздо хуже при помехах по шине питания. Поэтому не забывайте о развязывающих конденсаторах, которые нужно устанавливать непосредственно у выводов питания (керамические 0,1-0,5 мкФ), а также про качество сетевых выпрямителей и стабилизаторов.

ГЛАВА 2
Общее устройство, организация памяти, тактирование, сброс
Общая структура внутреннего устройства МК AVR приведена на рис. 2.1. На этой схеме показаны все основные компоненты AVR (за исключением модуля JTAG); в отдельных моделях некоторые составляющие могут отсутствовать или различаться по характеристикам, неизменным остается только общее 8-разрядное процессорное ядро (GPU, General Processing Unit). Кратко опишем наиболее важные компоненты, большинство из которых мы подробно будем рассматривать в дальнейшем.
Начнем с памяти. В структуре AVR имеются три разновидности памяти: flash-память программ, ОЗУ (SRAM) для временных данных и энергонезависимая память (EEPROM) для долговременного хранения констант и данных. Рассмотрим их по отдельности.

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

Объем встроенной flash-памяти программ в AVR-контроллерах составляет от 1 кбайта у ATtinyl 1 до 256 кбайт у ATmega2560. Первое число в наименовании модели соответствует величине этой памяти из ряда: 1, 2, 4, 8, 16, 32, 64, 128 и 256 кбайт. Память программ, как и любая другая flash-память, имеет страничную организацию (размер страницы, в зависимости от модели, составляет от 64 до 256 байт). Страница может программироваться только целиком. Число циклов перепрограммирования достигает 10 тыс.
С точки зрения программиста память программ можно считать построенной из отдельных ячеек— слов по два байта каждое. Устройство памяти программ (и только этой памяти) по двухбайтовым словам — очень важный момент, который нужно твердо усвоить. Такая организация обусловлена тем что любая команда в AVR имеет длину ровно два байта. Исключение .составляют команды JMP, CALL и некоторые другие (например, LDS), которые оперируют с 16-разрядными и более длинными адресами, длина этих команд равна четырем байтам и они применяются лишь в моделях с памятью программ объемом свыше 8 кбайт (подробнее см. главу 5). Во всех остальных случаях счетчик команд сдвигается при выполнении очередной команды на два байта (одно слово), поэтому необходимую емкость памяти легко подсчитать, зная число используемых команд. Абсолютные адреса в памяти программ (указываемые, например, в таблицах векторов прерываний в техническом описании МК) также отсчитываются в словах.

Заметки на полях
Приведем пример интересного случая адресации, который представляет команда для чтения констант из памяти LPM (а также ELPM в МК с памятью программ 128 кбайт и более). Эта команда подразумевает чтение по байтовому адресу, указанному в двух старших РОН (образующих т. н. регистр z, см. далее). Однако чтобы не нарушать "чистоту" концепции организации памяти программ по словам, разработчики запутали этот простой вопрос, указав в описании, что при вызове команды LPM старшие 15 разрядов регистра z адресуют слово в памяти, а младший разряд выбирает младший или старший байт (при равенстве разряда 0 или 1 соответственно) этого слова. Легко, однако, заметить, что байтовая и пословная организации памяти при таком подходе эквивалентны. Последний адрес существующего объема памяти программ для конкретной модели обозначается константой FLASHEND.
ПО умолчанию все контроллеры AVR всегда начинают выполнение программы с адреса $0000. Если в программе нет прерываний, то с этого адреса может начинаться прикладная программа. В противном случае по данному адресу располагается т. н. таблица векторов прерываний, подробнее о которой мы будем говорить в главах 4 и 5. Здесь укажем лишь, что первым в этой таблице (по тому же адресу $0000) всегда размещается вектор сброса RESET, который указывает на процедуру, выполняющуюся при сбросе МК (в том числе и при включении питания).

Примечание
В ассемблере AVR можно обозначать шестнадцатеричные числа в "паскалев-ском" стиле, предваряя их знаком $, при этом стиль языка С (0x00) тоже действителен, а вот "интеловский" способ (00п) не работает. Подробнее об обозначениях чисел различных систем счисления в AVR-ассемблере см. главу 5.

В последних адресах памяти программ контроллеров семейства Mega может располагаться т. н. загрузчик— специальная программа, которая управляет загрузкой и выгрузкой прикладных программ из основного объема памяти. В этом случае положение вектора сброса и всей таблицы векторов прерываний (т. е. фактически начального адреса, с которого начинается выполнение программы) может быть изменено установкой специальных конфигурационных ячеек (см. главу 5).



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru