- Навіщо нам потрібне переривання?
- Типи переривань у MSP430
- Управління програмою переривання в MSP430
- Схема MSP430 для тестування переривання GPIO
- Програмування MSP430 для переривань
- Завантаження програми на MSP430 з CCS
- Програма переривання на MSP430
Розгляньте простий цифровий годинник, який запрограмований просто показувати вам час, а тепер уявіть, що ви хочете змінити його часовий пояс. Що б ти зробив? Ви просто натискаєте кнопку, яка переходить у меню, що дозволяє змінити часовий пояс. Тут система не може передбачити ваше зовнішнє переривання на час, що триває, і не може попросити вас почекати, оскільки вона зайнята збільшенням значень секунд на вашому годиннику. Тут зручні переривання.
Переривання не завжди повинні бути зовнішніми; це може бути і внутрішнім. Більшість випадків у вбудованому перериванні також полегшує зв'язок між двома периферійними пристроями центрального процесора. Вважайте, що заздалегідь встановлений таймер скидається, а переривання спрацьовує, коли час досягає значення в регістрі таймера. Обробник переривань може бути використаний для ініціювання інших периферійних пристроїв, таких як DMA.
У цьому підручнику ми використовували зовнішні переривання на MSP430 для перемикання різних світлодіодів. Коли зовнішнє переривання дається зміною стану за допомогою кнопки, керування передається (попередньо подається) на ISR, і воно робить необхідне. Щоб знати основи, такі як налаштування середовища CCS для стартової панелі MSP430G2, перейдіть за цим посиланням, починаючи роботу з MSP430 за допомогою CCS, оскільки ми не будемо детально розбиратись у цьому посібнику. Також перевірте інші навчальні посібники на основі MSP430 з використанням Energia IDE та CCS, перейшовши за посиланням.
Навіщо нам потрібне переривання?
Переривання потрібні для збереження накладних витрат на опитування у вбудованій системі. Вони викликаються, коли завдання з вищим пріоритетом потрібно виконати, попередньо випередивши поточне запущене завдання. Він також може бути використаний для активації процесора з режимів низької потужності. Коли його пробуджує зовнішній перехід фронту сигналу через порт GPIO, виконується ISR і процесор знову повертається в режим низької потужності.
Типи переривань у MSP430
Ці переривання в MSP430 прийти в наступному types-
- Скидання системи
- Немасковане переривання
- Маскувальне переривання
- Векторні та Невекторні переривання
Скидання системи:
Це може статися через напругу живлення (Vcc) та через низький сигнал на штифті RST / NMI із вибраним режимом скидання, а також через причини, такі як переповнення таймера сторожового таймера та порушення ключа безпеки.
Немасковане переривання:
Ці переривання не можуть бути замасковані інструкціями процесора. Після того, як увімкнено загальне переривання, немаскуване переривання не можна відвернути від обробки. Це генерується такими джерелами, як несправності осцилятора та фронт, вручений RST / NMI (у режимі NMI).
Маскувальне переривання:
Коли відбувається переривання, і якщо воно може бути замасковане інструкцією центрального процесора, то це Maskable Interrupt. Вони не завжди повинні бути зовнішніми. Вони також залежать від периферійних пристроїв та їх функцій. Використовувані тут переривання зовнішніх портів належать до цієї категорії.
Векторизовані та Невекторизовані переривання:
Vectored: У цьому випадку пристрої, які переривають, надають нам джерело переривання, передаючи векторну адресу переривання. Тут адреса ISR фіксована, а керування передається на цю адресу, а ISR піклується про все інше.
Без векторів: Тут усі переривання мають загальну ISR. Коли відбувається переривання з невекторного джерела, керування передається на загальну адресу, до якої діляться всі невектовані переривання.
Управління програмою переривання в MSP430
Коли відбувається переривання, MCLK вмикається, і ЦП викликається назад із стану ВИМК. Коли керування програмою передається на адресу ISR після виникнення переривання, значення в лічильнику програми та регістрі стану переміщуються в стек.
Послідовно реєстр стану очищається, тим самим очищаючи GIE і припиняючи режим низької енергії. Вибирається та виконується переривання з найвищим пріоритетом, розміщуючи векторну адресу переривання у лічильнику програми. Перш ніж ми дійдемо до нашого прикладу коду переривання MSP430 GPIO, важливо зрозуміти роботу реєстрів портів, які в ньому беруть участь.
Реєстри портів для управління GPIO на MSP430:
PxDIR: Це регістр управління напрямком порту. Це дозволяє програмісту конкретно вибрати свою функцію, записуючи 0 або 1. Якщо штифт вибрано як 1, тоді він виступає як вихід. Вважайте порт 1 8-бітовим портом, і якщо виводи 2 і 3 мають бути призначені як вихідні порти, тоді регістр P1DIR повинен бути встановлений зі значенням 0x0C.
PxIN: Це регістр лише для читання, і поточні значення в порту можуть бути прочитані за допомогою цього реєстру.
PxOUT: Цей конкретний регістр можна використовувати для безпосереднього запису значень у порти. Це можливо лише тоді, коли регістр витягування / випадання вимкнено.
PxREN: Це 8-розрядний регістр, який використовується для ввімкнення або вимкнення реєстру витягування / випадання. Коли штифт встановлений як 1 як у регістрі PxREN, так і в PxOUT, тоді цей штифт витягується.
PxDIR |
PxREN |
PxOUT |
Конфігурація вводу-виводу |
0 |
0 |
X |
Вхід з відключеними резисторами |
0 |
1 |
0 |
Введення з увімкненим внутрішнім спадним меню |
0 |
1 |
1 |
Введення з увімкненим внутрішнім підтягуванням |
1 |
X |
X |
Результат - PxREN не впливає |
PxSEL та PxSEL2: Оскільки всі штифти в MSP430 мультиплексовані, перед використанням потрібно вибрати конкретну функцію. Коли і регістри PxSEL, і PxSEL2 встановлені як 0 для певного виводу, тоді вибирається введення / виведення загального призначення. Коли PxSEL встановлено як 1, вибирається основна периферійна функція тощо.
PxIE: Увімкнення або вимкнення переривань для певного контакту в порту x.
PxIES: Він вибирає край, на якому генерується переривання. Для 0 вибирається висхідний край, а для 1 - випадаючий край.
Схема MSP430 для тестування переривання GPIO
Схема MSP430, яка використовується для тестування нашого прикладу переривання MSP430, показана нижче.
Заземлення плати використовується для заземлення як світлодіода, так і кнопки. Діагонально протилежні сторони кнопки є, як правило, відкритими клемами і підключаються при натисканні кнопки. Перед світлодіодом підключається резистор, щоб уникнути великого споживання струму світлодіодом. Зазвичай застосовуються низькі резистори в діапазоні від 100 Ом до 220 Ом.
Ми використовуємо 3 різні коди, щоб краще зрозуміти переривання порту. Перші два коди використовують ту саму схему, що і на принциповій схемі 1. Давайте зануримося в код. Після встановлення з'єднань моя настройка виглядає так.
Програмування MSP430 для переривань
Повну програму переривання MSP430 можна знайти внизу цієї сторінки, пояснення коду наведено нижче.
Нижній рядок зупиняє роботу сторожового таймера. Сторожовий таймер зазвичай виконує дві операції. Один запобігає нескінченному циклу контролера шляхом скидання налаштування контролера, а інший полягає в тому, що він запускає періодичні події за допомогою вбудованого таймера. Коли мікроконтролер скидається (або включається), він перебуває в режимі таймера і схильний до скидання мікроконтролера через 32 мілісекунди. Цей рядок зупиняє контролер від цього.
WDTCTL = WDTPW + WDTHOLD;
Встановлення для регістру P1DIR значення 0x07 встановлює напрямок pin0, pin1 і pin2 як вихід. Встановлення P1OUT на 0x30 налаштовує його на вхід з увімкненими внутрішніми резисторами підтяжки на pin4 і pin5. Встановлення P1REN в 0x30 забезпечує внутрішній витяг на цих штифтах. P1IE дозволяє переривання, де P1IES вибирає перехід від високого до низького рівня як край переривання на цих штифтах.
P1DIR - = 0x07; P1OUT = 0x30; P1REN - = 0x30; P1IE - = 0x30; P1IES - = 0x30; P1IFG & = ~ 0x30;
Наступний рядок вмикає режим низької потужності та вмикає GIE у реєстрі стану, щоб можна було приймати переривання.
__bis_SR_register (LPM4bits + GIE)
Лічильник програми встановлюється з адресою вектора порту 1 за допомогою макросу.
PORT1_VECTOR . #pragma vector = PORT1_VECTOR __ переривання void Port_1 (void)
Наведений нижче код перемикає кожен світлодіод, підключений до pin0, pin1, pin2 по одному.
якщо (підрахувати% 3 == 0) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; рахувати ++; } інакше якщо (рахувати% 3 == 1) { P1OUT ^ = BIT1; P1IFG & = ~ 0x30; рахувати ++; } ще { P1OUT ^ = BIT2; P1IFG & = ~ 0x30; рахувати ++; }
Схема 2:
Подібним чином спробуємо інший штифт, щоб набагато краще зрозуміти концепцію. Отже, тут кнопка підключена до контакту 2.0 замість контакту 1.5. модифікована схема така. Знову ця схема використовується для перевірки програми переривання кнопки MSP430.
Тут порт 2 використовується для введення. Тому доводиться використовувати інший вектор переривання. P1.4 і P2.0 приймають вхідні сигнали.
Оскільки порт 2 використовується лише для введення, P2DIR встановлюється як 0. Щоб встановити pin0 порту 2 як вхідний з включеними внутрішніми підтягуючими резисторами, регістри P2OUT і P2REN повинні бути встановлені зі значенням 1. Щоб увімкнути переривання на pin0 порту 2, а також для вибору краю переривання, P2IE та P2IES встановлюються зі значенням 1. Для скидання прапора в порту 2 P2IFG очищається, щоб прапор можна було встановити знову на виникнення переривання.
P2DIR - = 0x00; P2OUT = 0x01; P2REN - = 0x01; P2IE - = 0x01; P2IES - = 0x01; P2IFG & = ~ 0x01;
Коли джерело переривання надходить з порту 1, тоді світлодіод, підключений до виводу 1 порту 1, світиться. Коли джерело переривання належить порту 2, тоді світлодіод, підключений до виводу 2 порту 1, світиться.
#pragma vector = PORT1_VECTOR __interrupt void Port_1 (void) { P1OUT ^ = BIT1; P1IFG & = ~ 0x10; для (i = 0; i <20000; i ++) { } P1OUT ^ = BIT1; } #pragma vector = PORT2_VECTOR __interrupt void Port_2 (void) { P1OUT ^ = BIT2; P2IFG & = ~ 0x01; для (j = 0; j <20000; j ++) { } P1OUT ^ = BIT2; }
Завантаження програми на MSP430 з CCS
Щоб завантажити проект на панель запуску та налагодити його, виберіть проект і клацніть піктограму налагодження на панелі інструментів. Або натисніть F11 або натисніть RunàDebug, щоб увійти в режим налагодження.
Після введення режиму налагодження натисніть зелену кнопку запуску, щоб вільно запустити завантажений код в MCU. Тепер, коли кнопка натиснута вниз, переривання спрацьовує через зміну краю, що спонукає до зміни стану світлодіода.
Програма переривання на MSP430
Після успішного завантаження коду ми можемо перевірити його, просто натиснувши кнопку. Світлодіодний малюнок змінюватиметься відповідно до нашої програми щоразу, коли буде дано переривання за допомогою кнопки.
Повну роботу можна знайти у відео, наведеному нижче. Сподіваюся, вам сподобався підручник і ви дізналися щось корисне. Якщо у вас виникли запитання, залиште їх у розділі коментарів або використовуйте наші форуми для інших технічних питань.