Архітектура PIC контролерів - Структурні особливості сучасних мікропроцесорних систем

PIC16fXX - це 8-розрядні FLASH CMOS мікроконтролери з RISC архітектурою, вироблені фірмою Microchip Technology. Це сімейство мікроконтролерів відрізняється низькою ціною, низьким енергоспоживанням і високою швидкістю. Програмування здійснюється за допомогою 35 простих інструкцій, усі команди виконуються за один цикл (400 нс при 10 Мгц), крім інструкцій переходів, виконуваних за два цикли (800 нс).

Мікроконтролери мають убудоване до 8кБайт FLASH пам'яті програм, до 368 байт пам'яті даних (ОЗП), до 256 EEPROM пам'яті даних, систему переривань, що спрацьовує від 14 джерел, і 8-рівневий апаратний стік, 36 регістрів загального призначення. Периферія містить у собі 21 лінію двонаправленого уведення / виведення з індивідуальним настроюванням, 3 таймери/лічильника, сторожовий таймер WDT із власним RC генератором, багатоканальний 10-розрядній АЦП, послідовний синхронний порт MSSP, послідовний синхронно-асинхронний приймач-передавач USART з підтримкою детектування адреси.

Серія PIC16fXX підходить для широкого спектра додатків від схем високошвидкісного керування автомобільними й електричними двигунами до економічних вилучених приймачів-передавачів, контрольних приладів і зв'язних процесорів. Наявність ПЗП дозволяє підбудовувати параметри в прикладних програмах (коди передавача, швидкості двигуна, частоти приймача і т. д.).

Убудований автомат програмування EEPROM дозволяє легко підбудовувати програму і дані під конкретні вимоги навіть після завершення програмування і тестування. Ця можливість може бути використана як для тиражування, так і для занесення каліброваних даних уже після остаточного тестування.

Архітектура заснована на концепції роздільних шин і областей пам'яті для даних і для команд (мал. 1). Шина даних і пам'ять даних (ОЗП) - мають ширину 8 біт, а програмна шина і програмна пам'ять (ПЗП) мають ширину 14 біт. Така концепція забезпечує просту, але могутню систему команд, розроблену так, що бітові, байтові і реєстрові операції працюють з високою швидкістю і з перекриттям за часом вибірок команд і циклів виконання. 14-бітова ширина програмної пам'яті забезпечує вибірку 14-бітової команди в один цикл. Двоступінчастий конвеєр забезпечує одночасну вибірку і виконання команди. У PIC16fXX програмна пам'ять обсягом 1К х 14 розташована усередині кристала. Програма, що виконується, може знаходитися тільки в убудованому ПЗП.

АЛП - арифметико-логічний пристрій (АЛП).

Високопродуктивне АЛП з'єднано безпосередньо з усіма 36 швидкодіючими регістрами загального призначення. За один тактовий цикл АЛП виконує операцію між регістрами. Операції АЛП підрозділяються на три основні категорії: арифметичної, логічні й операції над бітами.

Організація пам'яті програм даних. Мікроконтролери PIC16FXX мають 13-розрядний лічильник команд PC, здатний адресувати 8К х 14 слів пам'яті програм. Фізично реалізовано FLASH пам'яті програм 8К х 14 у PIC16F877/876 і 4К х 14 у PIC16F873/874. Звертання до фізично не реалізованої пам'яті програм приведе до адресації реалізованої пам'яті. Адреса вектора скидання - 0000H. Адреса вектора переривань - 0004H.

Пам'ять даних розділена на чотири банки, що містять регістри загального і спеціального (SFR) призначення. Біти RP1 (STATUS<6>) і RPO (STATUS<5>) призначені для керування банками даних. У таблиці показаний стан керуючих бітів при звертанні до банок пам'яті даних.

Обсяг банків пам'яті даних до 128 байт (7FH). На початку банку розміщаються регістри спеціального призначення, потім регістри загального призначення виконані як статичне ОЗП. Усі реалізовані банки містять регістри спеціального призначення. Деякі, часто використовувані регістри спеціального призначення можуть відображатися й в інших банках пам'яті.

структурна схема мікроконтролера pic16f877

Рис. 1. Структурна схема мікроконтролера PIC16F877

Регістри загального призначення. Звернутися до регістрів загального призначення можна прямій або непрямій адресації, через регістр FSR.

Регістри спеціального призначення. За допомогою регістрів спеціального призначення виконується керування функціями ядра і периферійних модулів мікроконтролера. Регістри спеціального призначення реалізовані як статичне ОЗП.

У Регістрі STATUS утримуються прапори стану АЛП, прапори причини скидання мікроконтролера і біти керування банками пам'яті даних.

Регістр STATUS може бути адресований будь-якою командою, як і будь-який інший регістр пам'яті даних. Якщо звертання до регістра STATUS виконується командою, що впливає на прапори Z, DC і C, то зміна цих трьох бітів командою заблокована. Ці біти скидаються або установлюються відповідно до логіки ядра мікроконтролера. Команди зміни регістра STATUS також не впливають на біти - ТЕ і - PD. Тому, результат виконання команди з регістром STATUS може відрізнятися від очікуваного. Наприклад, команда CLRF STATUS скине три старших біти й установить біт Z (стан регістра STATUS після виконання команди 000uu1uu, де u - не змінюваний біт).

При зміні бітів регістра STATUS рекомендується використовувати команди, що не впливають на прапори АЛП (SWAPF, MOVWF, BCF і BSF). Прапори С и DC використовуються як біти займу і десяткового займу відповідно, наприклад, при виконанні команд вирахування SUBLW і SUBWF. Прапор займу має інверсне значення. Вирахування виконується шляхом додатка додаткового коду другого операнду. При виконанні команд зрушення (RRF, RLF) біт C завантажується старшим або молодшим бітом регістра, що зрушується.

Регістр OPTION_REG доступний для читання і запису, містить біти керування (Якщо попередній дільник включений перед WDT, те коефіцієнт розподілу тактового сигналу для TMRO дорівнює 1:1):

Попереднім дільником TMRO/WDT;

Активним фронтом зовнішнього переривання RBO/INT;

Резисторами, що підтягують, на входах PORTB.

Регістр INTCON доступний для читання і запису, містить біти дозволів і прапори переривань: переповнення TMRO; зміни рівня сигналу на висновках PORTB; зовнішнє джерело переривань RBO/INT. Прапори переривань установлюються при виникненні умов переривань поза залежністю від відповідних бітів дозволи і битка загального дозволу переривань GIE (INTCON<7>).

Регістр PCON містить прапори, за допомогою яких можна визначити джерело скидання мікроконтролера:

Скидання по включенню харчування (POR);

Скидання по сигналі на висновку - MCLR;

Скидання по переповненню сторожового таймера WDT;

Скидання по виявленню зниження напруги харчування (BOR).

При включенні харчування біт - BOR має непередбачене значення і не повинне враховуватися. Біт - BOR призначений для виявлення наступних скидань мікроконтролера при зниженні напруги харчування. Стан біта - BOR також непередбачене, якщо робота детектора зниженої напруги заблокована в бітах конфігурації при програмуванні мікроконтролера (BODEN=0).

Регістри PCLATH і PCL - 13-розрядний регістр лічильника команд PC вказує адреса виконуваної інструкції. Молодший байт лічильника команд PCL доступний для читання і запису. Старший байт РСН, що містить <12:8> біти лічильника команд PC, не доступний для читання і запису. Всі операції з регістром РСН відбуваються через додатковий регістр PCLATH. При будь-якому виді скидання мікроконтролера лічильник команд PC очищається. На малюнку 2-5 показано дві ситуації завантаження значення в лічильник команд PC. Приклад зверху, запис у лічильник команд PC відбувається при записі значення в регістр PCL (PCLATH <4:0> > РСН). Приклад знизу, запис значення в лічильник команд PC відбувається при виконанні команди CALL або GOTO (PCLATH <4:3> > РСН).

Перехід, що обчислюється, може бути виконаний командою збільшення до регістра PCL (наприклад, ADDWF PCL). При виконанні табличного читання переходом, що обчислюється, варто піклуватися про те, щоб значення PCL не перетнуло границу блоку пам'яті (кожен блок 256 байт).

Стік. PIC16FXX мають 8-урівневий 13-розрядний апаратний стік. Стік не має відображення на пам'ять програм і пам'ять даних, не можна запис або прочитати дані зі стека. Значення лічильника команд заноситься у вершину стека при виконанні інструкцій переходу на підпрограму (CALL) або обробки переривань. Читання зі стека і запис у лічильник команд PC відбувається при виконанні інструкцій повернення з підпрограми або обробки переривань (RETURN, RETLW, RETFIE), при цьому значення регістра PCLATH не змінюється.

Стік працює як циклічний буфер. Після 8 записів у стек, дев'ятий запис запишеться на місце першої, а десятий запис замінить другу і так далі. У мікроконтролерах не мається ніяких покажчиків про переповнення стека. У мікроконтролерах не передбачено команд запису / читання зі стека, крім команд виклику / повернення з підпрограм (CALL, RETURN, RETLW і RETFIE) або умов переходу по векторі переривань.

Рівнобіжні порти введення / виведення. Деякі канали портів уведення / виведення мультиплексовані з периферійними модулями мікроконтролера. Коли периферійний модуль включений, висновок не може використовуватися як універсальний канал уведення / виведення.

PORTA - 6-розрядний порт уведення / виведення. Усі канали PORTA мають відповідні біти напрямку в регістрі TRISA, що дозволяють набудовувати канал як вхід або вихід. Запис 1 у TRISA переводить відповідний вихідний буфер у 3-і стан. Запис 0 у регістр TRISA визначає відповідний канал як вихід, уміст засувки PORTA передається на висновок мікроконтролера (якщо вихідна засувка підключена до висновку мікроконтролера).

Читання регістра PORTA повертає стан на висновках порту, а запис виробляється в засувку PORTA. Всі операції запису в порт виконуються за принципом "читання - модифікація - запис", тобто спочатку виробляється читання стану висновків порту, потім зміна і запис у засувку.

RA4 - має тригер Шмідта на вході і відкритий стік на виході, мультиплесованій з тактовим входом TOCKI. Всі інші канали PORTA мають TTL буфер на вході і повнофункціональні вихідні КМОП буфери.

Канали PORTA мультипликсовані з аналоговими входами АЦП і аналоговим входом джерела опорної напруги VREF. Біти керування режимів роботи каналів порту уведення / виведення PORTA знаходяться в регістрі ADCON1.

Після скидання по включенню харчування висновки набудовуються як аналогові входи, а читання дає результат 0.

Біти регістра TRISA керують напрямком каналів PORTA, навіть коли вони використовуються як аналогові входи. Користувач повинний упевнитися, що відповідні канали PORTA набудовані на вхід при використанні їх як аналогові входи.

PORTB - 8-розрядний двонаправлений порт уведення / виведення. Біти регістра TRISB визначають напрямок каналів порту. Установка битва в 1 регістра TRISB переводить вихідний буфер у 3-і стан. Запис 0 у регістр TRISB набудовує відповідний канал як вихід, уміст засувки PORTB передається на висновок мікроконтролера (якщо вихідна засувка підключена до висновку мікроконтролера).

Три висновки PORTB мультиплексовані зі схемою низьковольтного програмування: RB3/PGM, RB6/PGC, RB7/PGD. До кожного висновку PORTB підключений внутрішній резистор, що підтягує. Біт - RBPU (OPTION_REG <7>) визначає підключені (-RBPU=0) чи ні (-RBPU=1) резистори, що підтягують. Резистори, що підтягують, автоматично відключаються, коли канали порту набудовуються на вихід і після скидання по включенню харчування POR.

Чотири канали PORTB RB7:RB4, набудовані на вхід, можуть генерувати переривання по зміні логічного рівня сигналу на вході. Якщо один з каналів RB7:RB4 набудований на вихід, то він не може бути джерелом переривань. Сигнал на висновках RB7:RB4 порівнюється зі значенням, збереженим при останнім читанні PORTB. У випадку розбіжності одного зі значень установлюється прапор RBIF (INTCON<0>), і якщо дозволено, генерується переривання.

PORTC - 8-розрядний двонаправлений порт уведення / виведення. Біти регістра TRISC визначають напрямок каналів порту. Установка біта в 1 регістра TRISC переводить вихідний буфер у 3-і стан. Запис 0 у регістр TRISC набудовує відповідний канал як вихід, уміст засувки PORTC передається на висновок мікроконтролера (якщо вихідна засувка підключена до висновку мікроконтролера).

Висновки PORTC мультиплексовані з декількома периферійними модулями. На каналах PORTC є присутнім вхідний буфер із тригером Шмідта.

Коли модуль MSSP включений у режимі I2C, висновки PORTC<4:3> можуть підтримувати рівні вихідних сигналів по специфікації I2C або SMBus у залежності від стану біта CKE (SSPSTAT<6>).

При використанні периферійних модулів необхідно відповідним чином набудовувати біти регістра TRISC для кожного висновку PORTC (див. опис периферійних модулів). Деякі периферійні модулі скасовують дія бітів TRISC примусово набудовуючи висновок на вхід або вихід. У зв'язку з чим не рекомендується використовувати команди "читання - модифікація - запис" з регістром TRISC.

Таймери/лічильники.

TMRO - 8-розрядний таймер/лічильник з можливість читання і запису поточного значення лічильника, має 8-розрядний програмувальний переддільник, внутрішнє або зовнішнє джерело тактового сигналу;

Коли біт TOCS скинутий у 0 (OPTION_REG<5>), TMRO працює від внутрішнього тактового сигналу. Збільшення лічильника TMRO відбувається в кожнім машинному циклі (якщо переддільник відключений). Після запису в TMRO збільшення лічильника заборонене два наступні цикли. Користувач повинний скорегувати цю затримку перед записом нового значення в TMRO. 8-розрядний лічильник може працювати як переддільник TMRO або вихідний дільник WDT.

TMR1 - 16-розрядний таймер/лічильник, що складається з двох 8-розрядних регістрів (TMR1H і TMR1L) доступних для читання і запису. Рахунок виконується в спарених регістрах (TMR1H:TMR1L), інкриментувавши їхнє значення від OOOOh до FFFFh, далі вважає з OOOOh. При переповненні лічильника встановлюється в 1 прапор переривання TMR1IF у регістрі PIR1<0>. Саме переривання можна дозволити / заборонити установкою / скиданням TMR1IE у регістрі Р1Е1<0>.

TMR1 може працювати в двох режимах: режим таймера і режим лічильника.

Включення модуля TMR1 здійснюється установкою біта TMR1ON у Т (Т1СОМ<0>).

Битому TMR1CS (T1CON<1>) вибирається джерело тактових імпульсів. У режимі таймера TMR1 інкриментується на кожному машинному циклі. Якщо TMR1 працює з зовнішнім джерелом тактового сигналу, то збільшення відбувається по кожнім передньому фронті сигналу. TMR1 має внутрішній вхід скидання від СРР модуля. Керуючі біти TMR1 знаходяться в регістрі T1CON.

TMR2 - 8-розрядний таймер із програмувальними переддільником і вихідним дільником, 8-розрядним регістром періоду PR2. TMR2 може бути опорним таймером у ШІМ режимі. Регістри TMR2 доступні для запису / читання й очищаються при будь-якому виді скидання.

Вхідний тактовий сигнал (FOsc/4) надходить через переддільник із програмувальним коефіцієнтом розподілу (1:1, 1:4 або 1:16), обумовлений бітами T2CKPS1:T2CKPSO (T2CON<1:0>).

TMR2 вважає, інкрементує від 00h до значення в регістрі PR2, потім скидається в 00h на наступному машинному циклі. Регістр PR2 доступний для запису і читання. Після скидання значення регістра PR2 дорівнює FFh. Сигнал переповнення TMR2 проходить через вихідний 4-розрядний дільник із програмувальним коефіцієнтом розподілу (від 1:1 до 1:16 включно) для установки прапора TMR2IF у регістрі PIR1 <1 >.

Відомий рівнобіжний Порт (PSP). Фактично існують два 8-розрядних регістри: один регістр для прийому даних, іншої - для передачі. Користувач записує 8-розрядні дані у вихідну засувку PORTD, а читає дані з вхідної засувки (зверніть увагу, вихідна і вхідна засувка мають той самий адресу). У цьому режимі значення бітів регістра TRISE ігнорується, тому що напрямком даних керує зовнішній пристрій.

Запис у PSP відбувається, якщо висновки - CS і - WR мають низький рівень сигналу. Після переходу сигналу на висновку - CS або - WR у високий рівень дані зберігаються у вхідній засувці на такті Q2. На такті Q4 встановлюються в 1 біт IBF (TRISE<7>) і прапор переривань PSPIF (PIR<7>). Біт IBF може бути скинутий у 0 тільки читанням регістра PORTD. Біт переповнення IBOV (TRISE<5>) встановлюється в 1, якщо відбувся наступний запис у PSP, а попередній байт не був прочитаний.

Читання з PSP відбувається, якщо висновки - CS і - RD мають низький рівень сигналу. Негайно скидається в 0 біт OBF (TRISE<6>), що вказує, що PORTD очікує читання зовнішньою шиною. Після переходу сигналу на висновку - CS або - RD у високий рівень установлюється прапор переривання PSPIF на такті Q4 (тільки після такту Q2), указуючи, що читання довершене. Біт OBF залишається скинутим у '0' поки не будуть завантажені нові дані в PORTD.

Прапор переривання PSPIF встановлюється в 1 по завершенню кожної операції читання або записи (скидається в 0 програмно). Дозволити/заборонити переривання від модуля PSP можна установкою / скиданням біта PSPIE (Р1Е1<7>).

Послідовний периферійний інтерфейс (SPI). У SPI режимі можливий одночасний синхронний прийом / переду 8-розрядних даних. Модуль MSSP підтримує чотири режими SPI з типовим використанням трьох висновків мікроконтролера: вхід послідовних даних (SDI); вихід послідовних даних (SDO); тактовий сигнал (SCK). Додатково може бути задіяний четвертий висновок для роботи в режимі відомого.

При ініціалізації SPI необхідно визначити параметри роботи бітами SSPCON<5:0>, SSPSTAT<7:6>. Керуючі біти визначають наступні параметри роботи: ведучий режим (SCK вихід); відомий режим (SCK вхід); полярність тактового сигналу (пасивний рівень SCK).

Для включення модуля MSSP необхідно установити біт SSPEN (SSPCON<5>) у 1. Будь-яка небажана функція послідовного порту може бути виключена, набудовуючи відповідні біти регістрів напрямку даних TRIS.

Універсальний синхронно-асинхронний приймач-передавач (USART). USART - це модуль послідовного введення / висновку, що може працювати при повнодуплексному асинхронному режимі для зв'язку з терміналами, персональними комп'ютерами або синхронним напівдуплексним режимом для зв'язку з мікросхемами ЦАП, АЦП, послідовними EEPROM і т. д.

USART може працювати в трьох режимах: асинхронний, повний дуплекс; ведучий синхронний, напівдуплекс; відомий синхронний, напівдуплекс.

Біти SPEN (RCSTA<7>) і TRISC<7:6> повинні бути встановлені в 1 для використання висновків RC6/TX/CK і RC7/RX/DT як порти універсального синхронно-асинхронного приймача-передавача. Модуль USART підтримує режим детектування 9-розрядної адреси для роботи в мережному режимі.

Система переривань. Мікроконтролери PIC16F87X мають 14 джерел переривань. Регістр INTCON містить прапори окремих переривань, біти дозволу цих переривань і біт глобального дозволу переривань.

Якщо біт GIE (INTCON<7>) встановлений у 1, дозволені всі немасковані переривання. Якщо GIE=0, то всі переривання заборонені. Кожне переривання окремо може бути дозволено / заборонено установкою / скиданням відповідного біта в регістрах INTCON, PIE1 і PIE2. При скиданні мікроконтролера біт GIE скидається в 0.

При поверненні з підпрограми обробки переривання, по команді RETFIE, біт GIE апаратно встановлюється в 1, дозволяючи всі немасковані переривання.

У регістрі INTCON знаходяться прапори наступних переривань: зовнішнього сигналу INT, зміни рівня сигналу на входах RB7:RB4, переповнення TMRO.

При переході на підпрограму обробки переривань біт GIE апаратно скидається в 0, забороняючи переривання, адреса повернення з підпрограми обробки переривань міститься в стек, а в лічильник команд PC завантажується вектор переривання 0004h. Джерело переривань може бути визначений перевіркою прапорів переривань, що повинні бути скинуті програмно перед дозволом переривань, щоб уникнути повторного виклику.

Для зовнішніх джерел переривань (сигнал INT, зміни рівня сигналу на входах RB7:RB4) час переходу на підпрограму обробки переривань буде складати 3-4 машинних циклу. Точний час переходу залежить від конкретного випадку, він однаково для 1 і 2-х циклових команд. Прапори переривань установлюються незалежно від стану відповідних бітів маски і битка GIE.

Похожие статьи




Архітектура PIC контролерів - Структурні особливості сучасних мікропроцесорних систем

Предыдущая | Следующая