|
Что
такое микроконтроллер AVR?
Сразу
определимся с терминами и прочим “по
умолчанию”. Рассматривать будем
восьмиразрядные микроконтроллеры
семейства AVR (далее - МК). Считаем, что
читатель имеет представление о
цифровой технике, знает, за какой
конец держится паяльник и знает хотя
бы Бейсик.
Не
рассматривайте этот учебник как
абсолютно полный и точный - наверное,
это просто невозможно. Я хочу
написать предельно простое и
понятное пособие для первого
ознакомления с МК, которое не
запугает начинающего до смерти :-) |
|
Итак,
что же представляет собой типичный
МК? Это микросхема, в которой на одном
кристалле умещается уйма
разнообразнейших устройств.
Управляет всем арифметико-логическое
устройство (АЛУ). К АЛУ подключен
тактовый генератор, частота которого
определяется, как правило, внешним
кварцем, подключенным к выводам XTAL1 и
XTAL2. Для AT90S8535 максимальная частота
тактового генератора – 8 МГц,
соответственно период, или
длительность одного такта – 125 нс.
Именно за это время выполняется
большинство команд МК. Но не будем
торопиться.
Итак, на
АЛУ поступает тактовый сигнал (TCK), АЛУ
выбирает из ПЗУ команду и выполняет ее. А
вот тут надо как-то одновременно
рассказать и о командах, и о том, что они,
собственно, изменяют и на что влияют… И
рассказать желательно одновременно,
поскольку все между собой тесно
завязано. Наверное, все-таки начнем со
второго. |
Несмотря
на такое, казалось бы, различие между
этими двумя МК (8535 и Tiny15) - ядро и
система команд у них практически
одинаковы |
|
АЛУ
подключено к регистрам общего
назначения (РОН), регистрам ввода-вывода
и встроенному ОЗУ. Регистров общего
назначения всего 32, причем некоторые из
них имеют специфическое предназначение,
размер встроенного ОЗУ в зависимости от
МК – от нуля до 512 байт. И регистры, и ОЗУ
имеют байтовый формат, то есть состоят
из восьми бит. Ну и на всякий случай
упомяну, что бит – это по сути
минимальная единица информации, может
принимать значения 0 и 1.
Отличаются же
регистры и ОЗУ тем, что в ОЗУ можно
только записывать данные из регистров (ну
и читать в регистры, естественно), а с
регистрами можно делать все что угодно
– арифметические, логические операции,
короче – в ОЗУ данные лежат, а в
регистрах кипит работа.
Ну и
еще уточним - не все регистры
одинаковы. Младшие (см. таблицу) не
могут работать с непосредственным
операндом. R0 используется в команде
LPM, регистры R26-R27, R28-R29 и R30-R31
образуют регистровые пары X, Y и Z,
которые тоже не одинаковы -
регистровая пара X не дает обращаться
к памяти со смещением, а Z кроме
обычных действий позволяет делать
косвенный переход и читать память программ. Но
никто не запрещает использовать эти
"специальные" регистры и как
обычные. |
| 0x00-0x1F |
Регистры
общего назначения,
R0-R31 |
R0-R15
младшие |
| R16-R31
старшие |
| 0x20-0x5F |
Регистры
ввода-вывода |
0x00-0x3F
для команд IN,OUT |
| 0x60- |
Внутреннее
ОЗУ |
Размер
и наличие зависит от модели МК |
Адресное
пространство МК
|
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 кБайт. Как записать туда
программу - рассмотрим в другой раз. |
Упомянем
еще биты блокировки памяти и биты
конфигурации. Они никак не связаны с
адресным пространством и не читаемы
программно, изменяются только
программатором.
Первые
предназначены для защиты от
пиратства - будучи установленными,
запрещают чтение ПЗУ программ
снаружи. На работу программы не
влияют, и сбрасываются только при
очистке кристалла.
Вторые
определяют режимы работы МК и не
изменяются при стирании кристалла.
Количество их разных МК - от
одного до двух десятков. Подробнее мы
их рассмотрим позже. |
|