- •Встраиваемые микроконтроллеры avr-8
- •Санкт-Петербург 2013 Содержание
- •Часть 1. Архитектура мк (л2, л3)
- •Понятия мк для встраиваемых приложений и семейства мк. Семейство avr-8
- •Структура и архитектура мк
- •Тактирование, процессор и арифметико-логическая группа команд
- •Структура и адресация памяти программ. Ветвления, циклы, подпрограммы, и группа команд передачи управления
- •Структура и адресация памяти данных. Группа команд передачи данных
- •Порты ввода/вывода. Типовая схема включения мк. Структура управляющей программы, поллинг.
- •Часть 2. Процесс проектирования устройств на мк (л4, л5)
- •2.1. Этапы процесса проектирования устройств на мк
- •2.2.Техническое задание и разработка алгоритма (блок-схемы)
- •2.3. Языки программирования и синтаксическая проверка проекта
- •2.4. Средства загрузки кодов программ и данных (программаторы)
- •2.5. Средства отладки для выявления логических и схемотехнических ошибок
- •2.6. Подключение индикаторов и клавиатуры
- •Часть 3. Ввод/вывод в мпу
- •3.1. Понятие и характеристики интерфейса
- •3.2. Внутрисистемные интерфейсы в мпу
- •3.3 Параллельный порт avr
- •3.4. Внешняя магистраль памяти данных avr мк
- •3.5. Принцип и средства ввода/вывода по прерываниям.
- •3.6. Принцип прямого доступа к памяти
- •Часть 4. Прерывания (л8)
- •4.1. Механизм прерываний в avr и его программирование
- •4.2. Входы прерываний inTx и pcinTx.
- •Часть 5. Таймеры/счетчики
- •5.1. Задачи формирования и измерения временных интервалов
- •5.2. Принципы программного формирования/измерения временного интервала
- •5.3. Таймер/счетчик с прерыванием по переполнению
- •5.4. Таймер/счетчик с дополнительными узлами захвата и сравнения
- •Часть 6. Задачи и устройства аналогового ввода/вывода (л12, л13)
- •6.1. Задачи аналогового ввода и вывода
- •6.2. Встроенный аналоговый компаратор
- •6.3. Встроенный многоканальный ацп
- •6.4. Встроенный цап
- •Часть 7. Задачи и устройства последовательного интерфейса (л14, л15)
- •7.1. Принципы и преимущества последовательного интерфейса
- •7.2. Функции встроенного контроллера последовательного интерфейса
- •7.3. Протокол и контроллер трехпроводного синхронного пи (spi)
- •7.4. Устройство контроллера i2c и его применение
- •7.5 Цап с последовательным интерфейсом
- •7.6. Устройство контроллера u(s)art и его применение
- •7.7. Сетевые протоколы и их стандартизация
- •7.8. Открытый протокол Modbus
- •История
- •Введение
- •Категории кодов функций
- •Модель данных
- •Стандартные функции протокола Modbus
- •Запись одного значения
- •Запись нескольких значений
- •Контроль ошибок в протоколе Modbus rtu
- •Rtu фрейм
- •Логические ошибки
- •Стандартные коды ошибок
Структура и адресация памяти данных. Группа команд передачи данных
Память данных МК семейства AVR состоит из двух физически различных устройств:
резидентного энергозависимого [volatile] статического оперативного запоминающего устройства (СОЗУ) [SRAM: Static Random Access Memory], разрядностью 8 бит (1 байт) и количеством ячеек от 96 до 4096 = 4 Кбайт; в некоторых моделях МК возможно наращивание ОЗУ внешними микросхемами с общим объемом не более 64 Кбайт;
резидентного энергонезависимого [nonvolatile] электрически стираемого и записываемого (tЗП = 2…4 мс) постоянного запоминающего устройства (ЭСППЗУ) [EEPROM: Electrically Erasable Programmable Read-Only Memory], разрядностью 8 бит (1 байт) и количеством ячеек от 64 до 4096 = 4 Кбайт; целесообразно использовать как память настроек (параметров).
Адресация памяти. Все три перечисленные физические области памяти (FlashROM, SRAM, EEPROM) имеют раздельные адресные пространства (Табл. 1.1). Разделение обеспечивается системой команд и режимов адресации. Кроме того, в области SRAM с помощью режимов адресации выделяются две подобласти:
файл регистров общего назначения (РОН) R0 … R31 занимает адреса 0 … 31 (= 0x1f);
файл регистров ввода/вывода (РВВ) [I/O: Input/Output] состоит из 64 ячеек и занимает адреса 32 … 95 (0x20 … 0x5f).
Таблица 1.1. Карта памяти МК семейства AVR
Память программ |
Память данных (ячейка – 1 байт) |
|||
Встроенная FlashROM Объем: от 1024 байт до 256 КБ Ячейка: 2 байта – для программы 1 байт – для данных |
Адреса |
Энергозависимая |
|
Энергонезависимая |
0x00 … 0x1f |
РОН (Registers) |
0 … 31 |
Встроенная EEPROM 64 Б … 4 КБ, Адреса: 0x00 … E_END |
|
0x20 … 0x5f |
РВВ (I/O) |
0 … 63 |
||
0x60 … S_END |
Встроенная SRAM (Data) 0…8 КБ |
|
||
S_END+1 … 0xff |
Внешняя SRAM 0…64 КБ |
|
||
Область РОН является наиболее интенсивно используемой областью памяти данных (ПД): только в ней располагаются операнды арифметико-логической группы команд и реализуются сложные режимы адресации. Пары регистров R27:R26=X, R29:R28=Y, R31:R30=Z могут использоваться как 16-разрядные для адресации памяти данных – X, Y, Z и памяти программ – Z. Остальные области памяти доступны только командам передачи данных.
Регистры ввода/вывода, иначе называемые регистрами специальных функций (РСФ) [SFR: Special Function Register], позволяют следить за состоянием и управлять аппаратными ресурсами МК: процессора, EEPROM, системы прерываний, параллельных портов и других встроенных периферийных устройств. К этой подобласти относятся регистр состояния SREG и 16-разрядный регистр-указатель стека SP [Stack Pointer] (состоит из двух 8-разрядных регистров SPH и SPL).
Стеком называется область памяти данных, работающая по принципу «последним записан – первым считан» [LIFO: Last Input – First Output]. Используется при выполнении подпрограмм. При вызове подпрограммы в стеке аппаратно сохраняется адрес следующей за вызовом команды, при возврате из подпрограммы этот адрес восстанавливается из стека.
Также стек может использоваться программистом или транслятором для передачи параметров в подпрограммы или из подпрограммы. В подпрограммах обслуживания прерываний стек используется для сохранения и восстановления контекста.
В данной серии МК стек «растет вниз», начиная со старших адресов SRAM, поэтому при помещении данных в стек используется постдекремент указателя стека, т. е. уменьшение значения SP на 1 после записи, обозначается (SP)–, при извлечении из стека – прединкремент, т. е. увеличение значения SP на 1 перед записью, обозначается +(SP).
Группу команд передачи данных можно разделить на подгруппы, в зависимости от обслуживаемых областей памяти:
РОН ↔ константа: LDI.
Пример: LDI Rd*,K8 ;Загрузка 8-разрядной константы в РОН Rd*=R16…R31.
РОН ↔ РОН: MOV, MOV.
Пример: MOV R0, R16 ;Копирование содержимого РОН R16 в R0.
РОН ↔ РВВ: IN, OUT.
Пример: IN Rd, P ;Копирование содержимого РВВ P=0…63 в РОН Rd=R0…R31.
Пример: OUT P, Rd ;Копирование содержимого РОН Rd=R0…R31 в РВВ P=0…63.
РОН ↔ память данных (включая подобласти РОН и РВВ):
LD, LDD, LDS, ST, STD, STS, PUSH, POP.
Пример: LD Rd, X ; Загрузка содержимого байта SRAM по адресу (R26:R27)=(X) в РОН Rd.
Пример: STS А16, Rr ; Сохранить содержимое РОН Rr в SRAM по адресу (А16).
Пример: PUSH Rr ; Протолкнуть содержимое РОН Rr в стек.
Пример: POP Rd ; Извлечь содержимое байта из стека в РОН Rd.
РОН память программ (константа): LPM, ELPM.
Пример: LPM ;Загрузка содержимого байта FlashROM по адресу (R30:R31)=(Z) в РОН R0 (адрес < 65536).
Пример: ELPM Rd,Z ;Загрузка содержимого байта FlashROM по адресу (Z) в РОН Rd (адрес > 65535).
Режимы адресации данных в группе команд передачи данных имеют наибольшее разнообразие:
Абсолютная адресация – код данных (константа) входит в код команды, подгруппа 1.
Пример: К8 – 8-разрядная константа (0…255).
Прямая (непосредственная) адресация – код адреса входит в код команды, подгруппы: 1 – 5.
Пример: Rd(Rd*) – 5(4)-разрядный адрес РОН – приемника = 0…31 (16…31). Под название – регистровый!
Пример: P – 6-разрядный адрес РВВ = 0…63. Под название – регистровый!
Пример: А16 – 16-разрядный адрес SRAM = 0…65535. Формат команды – 2 слова (4 байта)!
Косвенная адресация – код адреса (или его часть) находится в одном из регистров-указателей Z, Y, X, с разновидностями:
Простая косвенная – содержимое регистра указателя не изменяется во время выполнения команды, подгруппы 4, 5.
Пример: Y=R28:R29 – 16-разрядный адрес SRAM.
Пример: Z=R30:R31 – 16-разрядный адрес FlashROM.
Относительная косвенная (индексная) – то же, что и для простой, но исполнительный адрес образуется суммированием содержимого регистра-указателя и константы (индекса) в коде команды (6 разрядов, 0…63), подгруппа 4.
Пример: LDD Rd, Z+i6 ;Загрузить в Rd содержимое байта SRAM по адресу (R30:R31)+(i6), i6=0…63.
Косвенная с преддекрементом – содержимое регистра-указателя сначала уменьшается на 1, а затем производится обращение по полученному адресу, подгруппа 4.
Пример: LD Rd, –Y ; Y Y–1, Rd (Y).
Пример: PUSH Rr ; (SP) Rr, SP SP–1. !Постдекремент !
Косвенная с постинкрементом – сначала обращение по адресу регистра-указателя, а затем содержимое регистра-указателя увеличивается на 1, подгруппа 4.
Пример: ST X+, Rr ; (X) Rr, X X+1.
Пример: POP Rd ; SP SP+1, Rd (SP). ! Прединкремент !
Общие черты группы команд передачи данных:
не изменяют состояние флагов в регистре состояния SREG;
формат команд: для большинства – 1 слово, 2 слова – для команд с непосредственной адресацией;
время выполнения зависит от области действия: 1 машинный цикл – для команд 1–3-й подгрупп (РОН, РВВ и константы), 2 м. ц. – для 4-й подгруппы (SRAM) и 3 м. ц. – для 5-ой подгруппы (FlashROM).
Система команд содержит ряд команд, обеспечивающих изменение состояния отдельных битов и анализ состояния отдельных битов:
– SBI [Set Bit], CBI [Clear BIt] – установить, очистить указанный бит РВВ;
– SBIS [Skip if Bit Input/output register Set], SBIC [Skip if Bit Input/output register Clear] – пропустить следующую команду, если указанный бит РВВ установлен, сброшен.
В тех случаях, когда последовательность действий, требуемая при заданном состояния бита РВВ, не укладывается в одну машинную команду, сразу после команды SBIS / SBIC ставится команда безусловного перехода RJMP с адресом перехода к действиям, выполняемым при невыполнении указанного в предыдущей команде условия.
При размещении в памяти данных многобайтных чисел в МК семейства AVR используется принцип размещения младшего байта по меньшему адресу, а старшего – по большему адресу. Так некоторые команды используют пары регистров общего назначения, например X = XH:XL = R26:R27, в этой записи знак “:” называют знаком конкатенации, регистр R26:R27.
Доступ к области EEPROM обеспечивается через группу регистров ввода/вывода:
EEAR [EEPROM Address Register] - регистр адреса, при объеме EEPROM более 255 байт состоит из двух 8-разрядных регистров EEARH:EEARL;
EEDR [EEPROM Data Register] - регистр данных;
EECR [EEPROM Control Register] - регистр управления, состоящий из следующих битов:
EERE(0) [Read Enable] – программная установка в «1» инициирует чтение, по окончании чтения аппаратно сбрасывается в «0»;
EEWE(1) [Write Enable] – программная установка в «1» инициирует запись при EEMWE=1, сброс в «0» осуществляется аппаратно по окончании операции записи (2…4 мс);
EEMWE(2) [Master Write Enable] – предварительное разрешение записи по «1», аппаратный сброс через 4 м. ц. после установки;
EERIE(3) [Ready Interrupt Enable] – разрешение прерывания («1») по готовности, т. е. окончанию записи.
