Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PIC.docx
Скачиваний:
14
Добавлен:
12.09.2019
Размер:
7.06 Mб
Скачать

1.2. Особливості архітектури мікроконтролерів сімейства ріс18.

Архітектура PIC-заснованої мікроконтролерної системи дещо відрізняється від загальної комп'ютерної системи. Внаслідок того, що PIC містить пам'ять і пристрої введення-виведення, придатні для більшості застосувань, мікроконтролер PIC - це просто окремий блок PIC-заснованої системи. Додаткова пам'ять або можливості введення-виведення можуть бути додані в систему, однак у багатьох випадках пам'ять і можливості введення-виведення, що забезпечуються мікроконтролером PIC достатні для більшості застосувань.

Рис.1 ілюструє просту систему, яка використовує мікроконтролер PIC. Ця система містить РК-індикатор для відображення інформації, клавіатуру для введення даних, оптичний зчитувач карток для введення інформації з карток і послідовний інтерфейс з хост-комп'ютером для вивантаження даних і завантаження інформації в контролер. Ця, використовувана як приклад, система не містить зовнішню пам'ять, крім пам'яті, розташованої всередині мікроконтролера. Система в цілому містить тільки пристрої введення-виведення і мікроконтролер, що робить її за зовнішнім виглядом відмінною від комп'ютерної системи.

Рис.1. Проста система на мікроконтролері

Ця система містить два пристрої введення даних (клавіатуру і оптичний зчитувач карток), пристрій виведення (РК-індикатор), і двонаправлений пристрій введення - виведення (послідовний інтерфейс з хост-комп'ютером).

PIC мікроконтролер містить: пам'ять для зберігання програм і даних, підключення пристроїв вводу-виводу, що формують інтерфейс зі зчитувачем карток, РК-індикатором, клавіатурою, послідовним інтерфейсом (внутрішнім інтерфейсом контролера), і також таймером, який може використовуватися в якості годинника реального часу і календаря системи. Такий рівень інтеграції робить мікроконтролер потужним і недорогим засобом створення систем. Мікроконтролер PIC коштує всього декілька доларів і може програмуватися на Асемблері, С, Бейсік або Java.

Як уже згадувалося, PIC містить пам'ять і центральний процесор. Він також містить компоненти формування інтерфейсу введення - виведення, необхідні для управління пристроями системи.

Рис.2. Внутрішня структура мікроконтролерів сімейства РІС18

Рис.2 зображує внутрішню архітектуру сімейства контролерів PIC 18. Пам'ять у PIC розділена на два різних розділи - один для зберігання програми, а другий - для зберігання даних. Ця архітектура називається гарвардської архітектурою, винайденої в 1944 для електромеханічного комп'ютера (Mark 1), розробленого Говардом Хатавеем Айкеном, який в 1947 сказав: "Тільки шість електронних цифрових комп'ютерів потрібно для того, щоб задовольнити обчислювальні потреби всіх Сполучених Штатів." Гарвардська архітектура ділить пам'ять системи на два розділи за тим, щоб підвищити її ефективність. У традиційній архітектурі системи фон Неймана дані і команди вибираються через ту ж саму шину, що часто викликає затримки всякий час,коли команда маніпулює даними, записаними в пам'яті. Дані в пам'яті і одержувані від пристроїв введення-виведення - зазвичай мають довжину у вісім бітів, в той час як команди часто мають велику розрядність. В гарвардській архітектури, реалізованій в PIC-мікроконтролерах, пам'ять даних і шини вводу-виводу мають розрядність в 8 бітів, а пам'ять програм має розрядність в 16 бітів. Така організація дозволяє командам вибиратися з пам'яті програми в одному циклі читання або в рамках однієї операції, що підвищує ефективність системи. PIC-мікроконтролери деяких сімейств використовують 12-розрядну пам'ять програм.

Внаслідок того, що пам'ять програм і пам'ять даних розділені, вибірка кодів операцій перекриває виконання команди, що підвищує ефективність мікроконтролера. Цей ефект називається конвеєрним режимом, він ілюструється на Рис.3. Під час першого тактового циклу виконання команди, команда 1 витягується з пам'яті, потім під час другого тактового циклу виконання команди команда 2 витягується з пам'яті 2 паралельно з виконанням команди 1. Це перекриття або конвеєрний режим забезпечує те, що більшість команд виконуються за один тактовий цикл. Перекриття вилучення команд з пам'яті і виконання відбувається тільки в системах, які мають роздільну пам'ять програм і даних, використовуючи гарвардську архітектуру. Такі мікропроцесори, як Pentium від Intel фактично внутрішньо використовують цю архітектуру через кеш даних і кеш програм, які застосовуються для внутрішньої реалізації конвеєрного режиму і гарвардської архітектури.

Рис.3. Конвеєрна обробка команд і їх виконання в мікроконтролері

Пам'ять програм має розрядність, рівну 16 бітів, при цьому кожна комірка пам'яті в більшості випадків містить одну однослівну команду. Деякі команди вимагають 32 біта пам'яті або дві послідовні комірки пам'яті, проте більшість команд є 16-бітними. Пам'ять програм ділиться на дві частини: одна частина - це внутрішньосхемна пам'ять програм, а інша - це зовнішня пам'ять програм, яка встановлюється в разі потреби. Обсяг внутрішньосхемної пам'яті змінюється в діапазоні від 4К до 128К, в залежності від конкретної моделі МК. Внутрішньосхемна пам'ять програм - це або флеш-пам'ять, яка може багаторазово перепрограмовуватися в сімействі 18F, або одноразово-програмована пам'ять (ОПП) в сімействі 18С. Флеш-пам'ять програм звичайно програмується з використанням зовнішнього програматора, проте в багатьох версіях мікроконтролерів вона може бути самопрограмуючою. Якщо вона є самопрограмуючою, то пристрій зазвичай має блок завантаження, містить звичайно програму, яка називається завантажувачем програми розкрутки, яка не стирається і не перепрограмовується при перепрограмуванні флеш-пам'яті. Одноразово-програмована пам'ять з усіх точок зору аналогічно EPROM, за винятком того, що в її мікросхемі немає кварцового віконця стирання, в силу чого вона не може бути перепрограмованою. Вона програмується лише один раз.

Пам'ять програм адресується через 21-розрядну програмну адресу, що міститься в регістрі, який називається лічильником команд. Адреса пам'яті в 21 розряд (221) може адресувати 2Мб пам'яті. У сімействі PIC18 простір пам'яті програм починається з адреси 0x000000 і тягнеться до Ox1FFFFF.

Рис.4. Будова пам’яті програм сімейства РІС18

На Рис.4. зображена структура пам'яті програм. Деяким з комірок пам'яті поставлені у відповідність важливі для системи завдання. Однією з таких виділених комірки пам'яті є комірка за адресою 0x000000, в якій розташований адресу вектора Reset. Адреса вектора Reset - це той адресу, за якою програма починає виконуватися після скидання. Оскільки є тільки 8 байтів пам'яті між цією осередком і адресою вектора високопріоритетних переривань, розташованому в комірці пам'яті за адресою 0x000008, то зазвичай виконується перехід на іншу ділянку пам'яті для продовження виконання програми від адреси вектора Reset. Цей перехід зазвичай виконується відпрацюванням у програмі команди безумовного переходу GOTO. Адреси векторів переривань, спільно з перериваннями, вказують на точки входу до пам'яті програм процедур обслуговування низько та високопріоритетних переривань. Інша частина пам'яті програм доступна для зберігання програм, а також статичних даних. Статичними даними є різні таблиці та константи, значення яких не змінюється. Вони доступні для використання програмами.

Пам'ять даних - це зазвичай СОЗУ або СОЗУ і ЕEPROM. Пам'ять даних (яку іноді називають регістровим файлом) надає місце для зберігання даних, які змінюються в міру виконання програми та стираються (за винятком ЕEPROM) після відключення електроживлення системи. Доступ до пам'яті даних СОЗУ здійснюється через використання 12-розрядних адрес, тому максимальний обсяг доступної пам'яті дорівнює 3968 байт з адресами від 0x000 до OxF7F. Пам'ять даних СОЗУ також містить адреси, які використовуються для програмування спеціальних функцій мікроконтролера. Ці спеціальні функціональні регістри (СФР) розташовані в діапазоні адрес пам'яті від 0xF80 до OxFFF або займають верхні 128 байт простору пам'яті даних. Деякі специфікації мікроконтролерів використовують додаткову пам'ять даних, призначену для розміщення додаткових СФР. Інші комірки пам'яті програм називаються загальними функціональними регістрами (ЗФР), вони розміщені в діапазоні адрес від 0x000 до OxF7F. ЗФР іноді також називають комірками реєстрового файлу.

Якщо мікроконтролер PIC містить ЕEPROM, то пам'ять даних ЕEPROM адресується через спеціальні функціональні регістри в окремому адресному просторі, виділеному ЕEPROM. Обсяг ЕEPROM визначається кодом виконання PIC і має діапазон від 0 байт до максимальної кількості, рівного 1024 байт. Згідно Microchip, комірка ЕEPROM може перезаписуватися аж до одного мільйона разів. Комірки ЕEPROM повинні використовуватися для зберігання інформації, яка не змінюється дуже часто. Здавалося б, що можливість перезапису мільйон разів комірки ЕEPROM дозволяє використовувати його для будь-яких цілей, проте не слід забувати, що мікроконтролер може функціонувати на частоті близько 40 МГц, при цьому за кілька секунд можна перезаписати комірку ЕEPROM багато мільйонів разів.

На додаток до пам'яті програм, пам'яті даних СОЗУ, а також пам'яті ЕEPROM, є також невелика обсягом 31 х 21 біт пам'ять СОЗУ, яка називається пам'яттю стека. Пам'ять стека містить тільки адреси повернення з функцій. Розрядність стека дорівнює 21 бітам, оскільки він розрахований на зберігання адрес пам'яті програм. Оскільки максимальний обсяг пам'яті програм дорівнює 2Мб, то для доступу до неї потрібно використовувати 21-бітну адресу, тобто стек повинен мати розрядність в 21 біт. Єдиний спосіб використовувати комірку стека полягає у виклику функції. Якщо функція викликає іншу функцію, то дві комірки стека будуть використовуватися для зберігання адреси повернення. Для використання всіх комірки стека потрібно щоб глибина багаторазових викликів функцій досягла 31, що буває вкрай рідко, якщо взагалі буває. Фактично єдиний випадок переповнення стека може мати місце тоді, коли в програмі присутня помилка, що приводить до постійного викликом функцій, повернення з яких не відпрацьовується. Рекурсія є єдиною можливою причиною цього типу помилки.

Порти введення-виведення(Рис.5) використовуються для забезпечення взаємодії мікропроцесора із зовнішнім світом. Кожен порт вводу-виводу зазвичай має розрядність в 8 бітів і може бути запрограмований як на введення, так і на вивід інформації. Кількість бітів і портів введення-виведення коливається для різних пристроїв сімейства PIC18 і в загальному випадку визначається кількістю виводів інтегральної схеми.

Структура вводу-виводу для різних пристроїв розглянутого сімейства коливається в широких межах, проте всі пристрої мають принаймні порт А і порт В.

Використання порту для простого введення-виведення є досить легким завданням. Регістр TRISA визначає напрямок (введення або виведення) для кожного виводу порту A. (TRISA призначений для порту A, TRISB - для порту В, і так далі). Регістр TRIS порту - це регістр напрямку переміщення даних порту. Після того як мікроконтролер скидається, регістри TRIS встановлюються на операцію виводу. Це захищає схеми, підключені до виводів порту вводу-виводу. Логічний нуль біта регістра TRISA встановлює відповідний біт порту А на вивід інформації, а логічна одиниця в біті встановлює відповідний біт порту А на введення даних. Наприклад, для програмування бітів порту А від 0 до 3 (ці біти позначаються від RA0 до RA3) в якості вихідних бітів, а бітів порту А від 4 до 7 (ці біти позначаються від RA4 до RA7) в якості вхідних бітів, в регістр TRISA необхідно завантажити 0xF0.

Як тільки напрямок переміщення даних для бітів порту буде запрограмовано, доступ до цього порту можна здійснювати по його імені. Регістр PORTA використовується для організації інформаційного обміну з портом А. Наприклад, якщо в регістр PORTA записано значення 0x28 виводи PORTA (якщо вони запрограмовані як вихідні) будуть приймати дані. Аналогічним чином, для зчитування даних з виводів порту А виконується зчитування регістра PORTA. Також є можливим отримати доступ до одного виводу порту А використовуючи директиву PORTAbits мови С.

Рис.5. Внутрішня структура порту

Таймери є програмовані модулі лічильників. Таймер (Рис.6) може підраховувати події і імпульси тактовою частоти, він також може виконувати цілий ряд сервісних функцій для програм. Таймери часто програмуються на відпрацювання тайм-ауту після проходження певної кількості тактових імпульсів. Різні пристрої сімейства PIC мають від двох до п'яти таймерів. Таймери використовуються в мікропроцесорах для генерації різних подій, від переривань з періодичною частотою до реалізації лічильників реального часу при визначенні значення частоти або рахунку подій. Таймери також використовуються для генерування сигналів для інших пристроїв у системі.

Рис.6. Блок-схема Timer0, 8-бітний режим.

Різні моделі пристроїв сімейства PIC 18 також містять інші пристрої введення-виведення, які програмуються через спеціальні функціональні регістри (СФР). Ці інші пристрої можуть включати аналого-цифрові перетворювачі (АЦП), широтно-імпульсні (ШІМ) модулятори, а також послідовні комунікаційні порти, низки інших типів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]