# 12. Архитектура микропроцессора AVR
## Схема на английском языке
### Хорошее объяснение на английском https://www.youtube.com/watch?v=itYs-vz-E08


## Схема на русском языке

### Объяснение на русском
https://www.youtube.com/watch?v=PAHQaU3iY28&t=446s
### Конспект
Ядро состоит, в первую очередь, из памяти программ (Flash Programm Memory) и Арифметико-логического устройства (ALU), блока управления (на диаграмме не показан) и программного счетчик (Program Counter). Также есть тактовый генератор, задающий импульсы относительно которых работают блоки микроконтроллера.
При старте микроконтроллера значение программного счетчика равно 0000 — это адрес первой команды в нашей flash ROM. Микроконтроллер хватает оттуда два байта (код команды и ее аргументы) и отдает на выполнение в декодер команд (Instruction Decoder).
Декодер команд загребает команду и скармливает ее логике блока управления, который уже пинает все остальные блоки, заставляя их делать нужные действия в нужном порядке.
Вся математика и обработка делается посредством ALU.Он может складывать, вычитать, сравнивать, сдвигать разными способами, иногда делить и умножать.
В качестве промежуточных операндов используются 32 ячейки — Оперативные регистры общего назначения РОН.
***Младшие R0..R15***
Обычные регистры общего назначения, но какие то ущербные. С ними не работают многие команды, например, такие как загрузка непосредственного числа. Т.е. нельзя, например, взять и присвоить регистру число. Зато можно скопировать число из любого другого регистра.
***Старшие R16..R31***
Полноценные регистры, работающие со всеми командами без исключения.
***Индексные R26…R31***
Шесть последних регистров из старшей группы особенные. В принципе, их можно юзать и как обычные регистры общего назначения. Но, кроме этого, они могут образовывать регистровые пары X(R26:R27), Y(R28,R29), Z(R30:R31) которые используются как указатели при работе с памятью.
***ОЗУ***
Кроме 32 регистров в микроконтроллере есть оперативная память. Оперативная память это несколько сотен ячеек памяти. В этих ячейках могут храниться любые данные, а доступ к ним осуществляется через команды Load и Store.
***EEPROM***
Долговременная память. Память которая не пропадает после выключения питания.ЕЕПРОМ используется для сохранения всяких настроек, предустановок, собранных данных и прочего барахла, что может потребоваться после включения питания и в основном на чтение.
***Периферия***
Порты ввода вывода — то без чего невозможно взаимодействие контроллера с внешним миром.
UART/USART приемопередатчик — последовательный порт.
Таймеры/счетчики — задача таймеров отсчитывать тики.
Им же можно подсчитывать длительность входных сигналов, подсчитывать число входных импульсов.
АЦП — аналоговый вход.Позволяет взять и замерить аналоговый сигнал. АЦП это своеобразный вольтметр.
I2C(TWI) интерфейс — последовательная шина IIC. Через нее осуществляется связь с другими устройствами.
SPI — еще один последовательный протокол, похожа на IIC, но не позволяет организовывать сети. Работает только в режиме Мастер-Ведомый.
SPI — еще один последовательный протокол, похожа на IIC, но не позволяет организовывать сети. Работает только в режиме Мастер-Ведомый.
JTAG/DebugWire — средство отладки, позволяет заглянуть в мозги контроллера с помощью специального адаптера
PWM — ШИМ генератор. Вообще это не отдельный блок, а дополнительная функция таймера, но тоже полезная. С помощью ШИМ генератора легко задать аналоговый сигнал. Например, менять яркость свечения светодиода или скорость вращения двигателя.
## Описание компонентов
- **Программный счетчик**
- **Указатель стека**
> [name=Дарья Воронская]какого такого компьютера, у нас авр... точно та инфа, которая нужна?
- **Регистр команд** — регистр управляющего устройства компьютера. Он предназначен для хранения кода команды на период времени, который необходим для ее выполнения
- **Декодер команд (Instruction Decoder)** - блок, обрабатывающий шестнадцатибитные инструкции и управляющий АЛУ
- **АЛУ**(Арифметико-Логическое Устройство) -выполняет арифметические и логические операции. Напрямую связано с регистрами. Любая операция выполняется за 1 такт
- **GPR (Регистры общего назначения РОН)** - хоть регистры XYZ и нарисованы отдельно, они также относятся к РОН. Эти регистры являются 16-битными указателями адреса для косвенной адресации в области памяти данных
- **Control Lines** - ???
- **Регистр признаков (Status register, SREG)**