Библиотека оригинал - http://avr.nikolaew.org/learn.htm
Что такое микроконтроллер AVR?
Сразу определимся с терминами и прочим “по умолчанию”. Рассматривать будем восьмиразрядные микроконтроллеры семейства AVR (далее - МК). Считаем, что читатель имеет представление о цифровой технике, знает, за какой конец держится паяльник и знает хотя бы Бейсик.
Не рассматривайте этот учебник как абсолютно полный и точный - наверное, это просто невозможно. Я хочу написать предельно простое и понятное пособие для первого ознакомления с МК
Итак, что же представляет собой типичный МК? Это микросхема, в которой на одном кристалле умещается уйма разнообразнейших устройств. Управляет всем арифметико-логическое устройство (АЛУ). К АЛУ подключен тактовый генератор, частота которого определяется, как правило, внешним кварцем, подключенным к выводам XTAL1 и XTAL2. Для AT90S8535 максимальная частота тактового генератора – 8 МГц, соответственно период, или длительность одного такта – 125 нс. Именно за это время выполняется большинство команд МК. Но не будем торопиться.
Итак, на АЛУ поступает тактовый сигнал (TCK), АЛУ выбирает из ПЗУ команду и выполняет ее. А вот тут надо как-то одновременно рассказать и о командах, и о том, что они, собственно, изменяют и на что влияют… И рассказать желательно одновременно, поскольку все между собой тесно завязано. Наверное, все-таки начнем со второго.
0x00-0x1F |
Регистры
общего назначения, |
R0-R15
младшие |
R16-R31
старшие |
||
0x20-0x5F |
Регистры
ввода-вывода |
0x00-0x3F
для команд IN,OUT |
0x60- |
Внутреннее
ОЗУ |
Размер
и наличие зависит от модели МК |
Адресное пространство МК
АЛУ подключено к регистрам общего назначения (РОН), регистрам ввода-вывода и встроенному ОЗУ. Регистров общего назначения всего 32, причем некоторые из них имеют специфическое предназначение, размер встроенного ОЗУ в зависимости от МК – от нуля до 512 байт. И регистры, и ОЗУ имеют байтовый формат, то есть состоят из восьми бит. Ну и на всякий случай упомяну, что бит –
это по сути минимальная единица информации, может принимать значения 0 и 1.
Отличаются же регистры и ОЗУ тем, что в ОЗУ можно только записывать данные из регистров (ну и читать в регистры, естественно), а с регистрами можно делать все что угодно – арифметические, логические операции, короче – в ОЗУ данные лежат, а в регистрах кипит работа.
Ну и еще уточним - не все регистры одинаковы. Младшие (см. таблицу) не могут работать с непосредственным операндом. R0 используется в команде LPM, регистры R26-R27, R28-R29 и R30-R31 образуют регистровые пары X, Y и Z, которые тоже не одинаковы - регистровая пара X не дает обращаться к памяти со смещением, а Z кроме обычных действий позволяет делать косвенный переход и читать память программ.
Но никто не запрещает использовать эти "специальные" регистры и как обычные.
R0 |
используется
в команде LPM |
R1-R15 |
используются
произвольно |
Младшие регистры
R16-R25 |
используются
произвольно |
R26 |
Регистровая
пара X |
R27 |
|
R28 |
Регистровая
пара Y |
R29 |
|
R30 |
Регистровая
пара Z |
R31 |
Старшие регистры
Следует заметить, что к РОН и регистрам ввода-вывода можно обратиться и как к ОЗУ. Так, запись в ячейку ОЗУ с адресом 1 эквивалентна записи в R1, а чтение ОЗУ из адреса $22 – эквивалентно команде IN xxx,$02. Впрочем, к этому мы еще вернемся – не все сразу…
Итак, с регистрами общего назначения вроде разобрались. Что дальше? А дальше - регистры ввода-вывода.
Регистры ввода-вывода – это связь АЛУ с внешним миром и собственной периферией. Хотя сам по себе термин “периферия” идет с тех времен, когда микропроцессор был только микропроцессором и не более того. Все, начиная от генератора тактовых импульсов и кончая таймером – это были отдельные микросхемы или даже блоки. Ну да ладно, периферия так периферия, главное – понятно, что это такое. Под регистры ввода-вывода отведено 64 байта в адресном пространстве, но в различных МК реально задействовано разное их количество.
Впрочем, порты ввода-вывода мы рассмотрим на следующем уроке, поподробнее.Еще в МК есть ПЗУ команд. Оно никак не связано с адресным пространством ОЗУ и регистров, по умному это называется гарвардской архитектурой. ПЗУ имеет 16-ти разрядную организацию, размер его у различных МК – от 1 кБайт до 8 кБайт. Как записать туда программу - рассмотрим в другой раз.
Упомянем еще биты блокировки памяти и биты конфигурации. Они никак не связаны с адресным пространством и не читаемы программно, изменяются только программатором.
Первые предназначены для защиты от пиратства - будучи установленными, запрещают чтение ПЗУ программ снаружи. На работу программы не влияют, и сбрасываются только при очистке кристалла.
Вторые определяют режимы работы МК и не изменяются при стирании кристалла. Количество их разных МК - от одного до двух десятков.