
- •Цифрові пристрої, ч. 2
- •1. Компоненти мікропроцесорної техніки
- •2. Структура мпс
- •3 Архітектура ядра мк avr
- •3.1 Склад і принцип дії мк
- •3.2 Конвеєр команд
- •3.4 Формат команд і способи адресації
- •3.5 Пам'ять програм (Flash)
- •3.6 Регістр стану
- •3.7 Регістровий файл
- •4 Система команд мк avr
- •4.5 Стекова адресація
- •5 Eeprom
- •6. Напівпровідникові запам'ятовувальні пристрої
- •5.1. Загальні відомості
- •5.2. Класифікація зп
- •5.2. Структура запам’ятовувальних пристроїв
- •5.2. Оперативні запам’ятовувальні пристрої
- •7. Таймери-лічильники
- •7.1. Загальні відомості
- •7.3. Селектор синхроімпульсів
- •7.4. Блоки лічильників
- •Так само здійснюється керування також виводами ос1в і ос0. Докладніше застосування режимів виводів сигналів збігу обговорюються під час розгляду режимів т/л.
- •Pfcp: Phase and Frequency Correct pwm – шім із симетрією по фазі і періоду.
- •Де якщо використовується внутрішнє джерело синхросигналу (Kn – коефіцієнт поділу передподільника частоти).
- •Fast pwm – швидкодійна шім (б)
- •7.9. Переривання від таймерів-лічильників
- •Прапорів переривань (б) та приклад (в)
- •8. Аналогові компаратори
- •8.1. Загальні відомості
- •8.2. Детектори рівня
- •8.3. Підсилювачі-обмежувачі
- •8.4. Аналоговий компаратор з позитивним зворотним зв’язком
- •8.5. Інтегральний аналоговий компаратор у складі мк avr
- •8.6. Модуль аналогового компаратора
3.4 Формат команд і способи адресації
Команда має містити інформацію, яку МП здатний сприйняти й виконати. Для цього розряди слова команди поділяють на ділянки (поля), якими позначається операція і вказується на адреси операндів (тобто на місця розташування даних, над якими виконується дія, та де потрібно запам'ятати її результат). Поле коду операції (КОП), в якому зашифровано дію, і поля операндів, що вказують на їх адреси, визначають формат команди.
Комірки пам'яті, звідки надходять дані, що беруть участь в операції, є джерелами операндів, а комірки, до яких приміщуються дані, зокрема, результат операції, є приймачами операндів. Способи адресації визначають, яким чином у слові команди вказуються адреси операндів.
Використання способів адресації, що забезпечують компактний формат команди і швидкий доступ до операндів, спричиняє вкорочення полів КОП та адрес операндів, що, в свою чергу, обмежує можливий набір команд і ресурс даних, до якого можна звернутися. Способи адресації з відведенням на КОП і адреси операндів достатньо місця дозволяють розширити набір команд і оперувати з усіма присутніми в системі ресурсами, але це здовжує команду і на її введення та виконання витрачається більше часу. Через це в кожній МПС вибирають формати команд і способи адресації з компромісних міркувань, виходячи з типу розв'язуваних задач.
Для МК AVR такий компроміс знайдено збільшенням слова команди до двох байт (це дозволяє сформувати широкий набір різних команд і в більшості випадків поєднати поля КОП та операндів в одному слові команди), використанням формату команд, переважно, з одного слова (це скорочує час вибірки й виконання команди) та кількох різновидів двох способів адресації (це забезпечує гнучкість керування доступом до ресурсу МК). Тут обмежимося розглядом тільки способів адресації, що застосовуються в МК AVR. У всіх командах МК AVR, пов’язаних з використанням даних, хоча б один з операндів, тобто джерело або/та приймач є один з регістрів РФ. Через це хоча б одне поле слова команди займає номер РЗП (0 … 31) довжиною 5 біт. Залежно від того, яким чином вказується адреса другого операнда (якщо він є), і розрізняють способи адресації.
3.5 Пам'ять програм (Flash)
Звертання до ЗП програм
Звертання до ЗП програм (рис. 8,а) здійснюється через лічильник команд, який називають також програмним лічильником PC (Program Counter). По ввімкненні джерела живлення або по скиданні МК лічильник обнулюється, а з надходженням кожного тактового імпульсу Clk двійковий код на виходах РС збільшується на одиницю: 0, 1, 2, …, 2m – 1, де m – кількість розрядів лічильника. У дешифраторі DC цей двійковий код перетворюється в унітарний, тому в кожному такті вибирається лише одна з комірок К0, К1, … у ЗП програм. При цьому у вихідній шині ЗП програм з'являється записане до цієї комірки слово команди (або якась константа, якщо вона була записана до ЗП). У МК AVR усіх родин слово команди (рис. 8,б) займає 16 біт (2 байт), тобто обсяг пам'яті визначається як 2m ∙ 2 байт і за m = 9 він становить 1 кбайт. Отже, аби звернутися до ЗП обсягом 1 кбайт (512 слів), потрібен 9-розрядний лічильник (як у прикладі на рис. 8,а), до ЗП обсягом 2 кбайт (1024 слів) – 10-розрядний лічильник і т. д.
Рис. 8. Загальна схема звертання до пам'яті програм (а)
і формат слова команди (б)
Таким чином, у кожному такті Clk відбувається вибірка команди, переважна більшість яких займає одне слово, що є важливим чинників підвищення швидкодії МК AVR. Проте деякі команди займають два слова (4 байт), тоді їх вибірка відбувається у двох тактах.
Регулярну послідовність виконання команд програми, у разі її галуження, потрібно змінити. Найпростіше здійснити перехід у програмі можна передустановленням лічильника РС, тобто завантаженням до нього нової m-розрядної адреси. Часто перехід адреси на деяку кількість комірок здійснюють шляхом зміщення вихідного коду РС додаванням приросту адреси за допомогою суматора. Зміщення займає менше розрядів, тому його можна вставити безпосередньо до слова команди, хоч це й обмежує дистанцію переходів у програмі.
Адресація до констант пам'яті програм
Опосередкована адресація до констант пам'яті програм використовується для пересилання вибраного байта із ЗП програм у регістр R0 (рис. 9,а). Кожна 16-розрядна комірка ЗП програм, до якої записано дані, вміщує два слова даних – старший байт СБ і молодший байт МБ (рис. 9,б). Адресування до комірки ЗП програм здійснюється старшими бітами (біти 15…1) індексного регістра Z, а вибір одного з двох слів даних – його молодшим бітом (біт 0). Коли значення цього біта є 1, вибирається СБ, а коли 0 – МБ (див. рис. 9,а).. За допомогою 15 розрядів регістра Z можна адресуватися до перших 215 слів = 32 Кслів ЗП програм. Таким чином, для вибору констант застосовується проста опосередкована адресація до ЗП програм. Такий вибір здійснюється командою LPM (Load Program Memory) – завантаження з пам'яті програм, а в МК з великим обсягом ЗП програм також командою ELPM (Extended Load Program Memory) – розширене завантаження з пам'яті програм.
Рис. 9 Опосередкована адресація до констант пам'яті програм (а), приклад змісту молодшого байта комірки 511 ЗП програм (б), зміст регістра R0 по виконанні команди LPM (в), запис адреси до індексного регістра Z (г) та приклад програми (ґ)
Приклад. Завантажити дані з молодшого байта комірки 511 ЗП програм (див. рис. 9,б) до регістра R0 (рис. 9,в). Для цього до бітів B[15..1] індексного регістра Z, складеного з пари регістрів R31, R30, вписуємо адресу комірки (верхній рядок рис. 9,г), а до молодшого біта – адресу молодшого байта цієї комірки B[0] = 0 (нижній рядок). У підсумку отримуємо зміст індексного регістра Z = 03FE16 та складаємо програму(рис. 9,ґ).
ldi
r31,
$3 ; Завантажити адресу до старшого
байта Z
командою LDI
Rd,K
(Load
Immediate
– завантажити безпосереднє значення
Rd
← K),
де К – 8-розрядна константа, d
16 … 31
ldi r30, $FE ; Завантажити адресу до молодшого байта Z
lpm ; Load Program Memory – Завантажити константу із ЗП програм до регістра R0
Адресація до пам'яті
Як зазначалося, у ЗП програм зберігаються програми й фіксовані дані. За нормального виконання програми адреса команди міститься в лічильнику команд PC (див. рис. 8,а) і з надходженням кожного чергового тактового імпульсу Clk двійковий код на виходах РС збільшується на одиницю, що спричиняє вибірку команд одна за однією поспіль. Якщо ж у програмі передбачено переходи, звернення до підпрограм або виникають переривання, порядок виконання команд змінюється шляхом завантаження до РС нової адреси.
Абсолютна адресація до пам'яті програм полягає в тому, що для переходу до потрібної комірки значення її адреси k завантажується до лічильника команд РС безпосередньо з команди (рис. 10,а). Для забезпечення доступу до всього адресного простору ЗП програм формат команди розширено до двох слів, тому її виконання потребує більше часу. Прикладами використання такої адресації є команди абсолютного переходу JMP k (Jump – перейти) і абсолютного виклику підпрограми CALL k (Call to a Subroutine – виклик підпрограми). Практично замість числа k використовують переходи по мітках.
Приклад.
ldi r31, $3 ; Див. приклад
ldi r30, $FE ; на рис. 9ґ
…
jmp М0 ; Безумовний абсолютний перехід (замість коду адреси k використано мітку М0)
…
М0: lpm ; Завантажити константу із ЗП програм до регістра R0
Опосередкована адресація до пам'яті програм полягає в тому, що адреса комірки, до якої відбувається звертання, перебуває в індексному регістрі, звідки вона завантажується до лічильника команд РС (рис. 10,б). При цьому за формату команд з одного слова досягається доступ до всього адресного простору ЗП програм обсягом 64 Кслів (128 Кбайт). Опосередкована адресація використовується в командах опосередкованого (непрямого) переходу IJMP (Indirect Jump – перейти опосередковано) і опосередкованого (непрямого) виклику підпрограми ICALL (Indirect Call to a Subroutine – опосередкований виклик підпрограми).
Приклад.
clr r31 ; Очистити старший байт Z
ldi r30, $FF ; Завантажити адресу до молодшого байта Z
іjmp ; Безумовний опосередкований перехід за адресою Z =
; = R31 : R30 = $FF
Рис. 10. Адресація переходів у програмі: абсолютна (а), опосередкована (б) та відносна (в)
Відносна адресація до пам'яті програм відрізняється тим, що адреса комірки ЗП програм, до якої відбувається звертання, зміщується відносно тій, що перебуває в лічильнику, на величину константи, заданій у команді. Таке зміщення здійснюється підсумовуванням коду лічильника, цієї константи зі знаком та одиниці і завантаженням суми до лічильника (рис. 10,в). Модуль константи займає у слові команди 11 біт, отже зміщення адреси можна здійснити в межах ±2 Кслів. Для МК з обсягом ЗП програм 4 Кслів (8 Кбайт) при цьому охоплюється весь адресний простір цієї пам'яті. Така адресація використовується в командах відносного переходу RJMP (Relative Jump – перейти відносно) і відносного виклику підпрограми RCALL (Relative Call to a Subroutine – відносний виклик підпрограми).
ldi r31, $3 ; Див. приклад
ldi r30, $FE ; на рис. 9ґ
…
rjmp М1 ; Безумовний абсолютний перехід (замість коду зміщення k використано мітку М1)
…
М1: lpm ; Завантажити константу із ЗП програм до регістра R0