- Зашто нам треба прекид?
- Врсте прекида у МСП430
- Контрола програма прекида у МСП430
- Круг МСП430 за тестирање ГПИО прекида
- Програмирање МСП430 за прекиде
- Отпремање програма на МСП430 са ЦЦС-а
- Програм прекида на МСП430
Размислите о једноставном дигиталном сату који је програмиран да вам само показује време, а сада замислите да желите да промените његову временску зону. Шта би ти урадио? Једноставно притиснете дугме које прелази у мени који вам омогућава да промените временску зону. Овде систем не може да предвиди ваш спољни прекид према процесима вођења времена и не може да затражи од вас да сачекате јер је заузет повећавањем вредности секунде на вашем сату. Ту су прекиди корисни.
Прекиди не морају увек бити спољни; може бити и унутрашња. Већина пута у уграђеном прекиду такође олакшава комуникацију између две периферне јединице ЦПУ-а. Узмите у обзир да се унапред подешени тајмер ресетује и покреће прекид када време достигне вредност у регистру тајмера. Обрађивач прекида може се користити за покретање осталих периферних уређаја попут ДМА.
У овом упутству користили смо спољне прекиде на МСП430 за пребацивање различитих ЛЕД диода. Када је спољни прекид дат променом стања помоћу тастера, контрола се преноси (унапред испражњена) на ИСР и он чини потребно. Да бисте знали основе попут подешавања ЦЦС окружења за лансирну рампу МСП430Г2, следите овај линк за почетак рада са МСП430 помоћу ЦЦС-а, јер у овом водичу нећемо улазити у детаље о томе. Такође проверите и друге водиче засноване на МСП430 који користе Енергиа ИДЕ и ЦЦС пратећи везу.
Зашто нам треба прекид?
Прекиди су потребни да би се уштедели трошкови гласања у уграђеном систему. Они се позивају када је потребно извршити задатке са већим приоритетом предузимањем тренутног текућег задатка. Такође се може користити за буђење ЦПУ-а и из режима мале снаге. Када га пробуди прелазак ивице спољног сигнала кроз ГПИО порт, извршава се ИСР и ЦПУ се поново враћа у режим мале снаге.
Врсте прекида у МСП430
У прекиди у МСП430 се под следећим типес-
- Ресетовање система
- Немаскирани прекид
- Маскабле Интеррупт
- Векторски и невекторски прекиди
Ресетовање система:
То се може догодити због напона напајања (Вцц) и због слабог сигнала у РСТ / НМИ пину са изабраним режимом ресетовања, а може се јавити и из разлога као што су преливање тајмера надзорног паса и кршење безбедносног кључа.
Прекид који се не маскира:
Ова прекида се не могу прикрити упутствима ЦПУ-а. Једном када је омогућен општи прекид, немаскирани прекид не може се преусмерити из обраде. То генеришу извори попут грешака осцилатора и ивица ручно дата РСТ / НМИ (у режиму НМИ).
Маскабле Интеррупт:
Када дође до прекида и ако се може прикрити ЦПУ упутством, онда је то Маскабле Интеррупт. Не морају увек бити спољни. Такође зависе од периферних уређаја и њихових функција. Спољни прекиди порта који се овде користе спадају у ову категорију.
Векторски прекиди и невекторски прекиди:
Векторирано: У овом случају, уређаји који прекидају пружају нам извор прекида прослеђивањем адресе вектора прекида. Овде је адреса ИСР-а фиксна и контрола се преноси на ту адресу, а ИСР брине о остатку.
Без вектора: Овде су сви прекиди заједнички ИСР. Када дође до прекида из невекторског извора, контрола се преноси на заједничку адресу на коју се деле сви невекторски прекида.
Контрола програма прекида у МСП430
Када дође до прекида, МЦЛК се УКЉУЧУЈЕ и ЦПУ се поново позива из стања ИСКЉУЧЕНО. Како се контрола програма преноси на ИСР адресу након појаве прекида, вредности у програмском бројачу и статусном регистру се премештају у стек.
Узастопно, статусни регистар се брише, чиме се брише ГИЕ и прекида режим мале снаге. Прекид са највишим приоритетом бира се и извршава постављањем векторске адресе прекида у бројач програма. Пре него што дођемо до нашег кода примера прекида МСП430 ГПИО, важно је разумети рад лучких регистара који су у њега укључени.
Регистри порта за ГПИО контролу на МСП430:
ПкДИР: То је регистар за контролу смера лука. Омогућава програмеру да посебно одабере своју функцију писањем 0 или 1. Ако је пин изабран као 1, он делује као излаз. Сматрајте порт 1 8-битним портом, а ако се пинови 2 и 3 требају доделити као излазни портови, онда П1ДИР регистар мора да се постави са вредношћу 0к0Ц.
ПкИН: То је регистар само за читање и тренутне вредности у порту се могу читати помоћу овог регистра.
ПкОУТ: Овај одређени регистар се може користити за директно уписивање вредности у портове. То је могуће само када је онемогућен регистар извлачења / извлачења.
ПкРЕН: То је 8-битни регистар који се користи за омогућавање или онемогућавање регистра извлачења / извлачења. Када је пин постављен као 1 у регистру ПкРЕН и ПкОУТ, тада се одређени пин повлачи према горе.
ПкДИР |
ПкРЕН |
ПкОУТ |
И / О конфигурација |
0 |
0 |
Икс |
Улаз са онемогућеним отпорницима |
0 |
1 |
0 |
Улаз са омогућеним интерним падајућим системом |
0 |
1 |
1 |
Улаз са омогућеним унутрашњим извлачењем |
1 |
Икс |
Икс |
Излаз - ПкРЕН нема ефекта |
ПкСЕЛ и ПкСЕЛ2: Како су сви пинови у МСП430 мултиплексирани, одређена функција мора бити изабрана пре употребе. Када су и ПкСЕЛ и ПкСЕЛ2 регистри постављени као 0 за одређени пин, тада се бира У / И опште намене. Када је ПкСЕЛ подешен на 1, бира се примарна периферна функција итд.
ПкИЕ: Омогућава или онемогућава прекиде за одређени пин у порту к.
ПкИЕС: Одабире ивицу на којој се генерише прекид. За 0 се бира растућа ивица, а за 1 падајућа ивица.
Круг МСП430 за тестирање ГПИО прекида
Коло МСП430 које се користи за тестирање нашег примера прекида МСП430 је приказано испод.
Уземљење плоче служи за уземљење и ЛЕД диоде и дугмета. Дијагонално супротне стране тастера су обично отворени терминали и повезују се када се тастер притисне. Отпор је повезан са ЛЕД да би се избегла велика потрошња струје од ЛЕД. Обично се користе ниски отпорници у опсегу од 100охм до 220охм.
Користимо 3 различита кода да бисмо боље разумели прекиде порта. Прва два кода користе исти круг као на дијаграму кола 1. Заронимо у код. Након успостављања веза, моја поставка изгледа овако.
Програмирање МСП430 за прекиде
Комплетни програм прекида МСП430 налази се на дну ове странице, објашњење кода је следеће.
Доњи ред зауставља тајмер чувара од рада. Тајмер чувара обично изводи две операције. Једна спречава бесконачне петље контролера ресетовањем контролера, а друга је што покреће периодичне догађаје помоћу уграђеног тајмера. Када се микроконтролер ресетује (или укључи), он је у режиму тајмера и тежи ресетовању МЦУ-а након 32 милисекунде. Ова линија зауставља контролер у томе.
ВДТЦТЛ = ВДТПВ + ВДТХОЛД;
Постављањем регистра П1ДИР на вредност 0к07 поставља се смјер пин0, пин1 и пин2 као излаз. Подешавањем П1ОУТ на 0к30 конфигурише се улаз са уграђеним отпорницима на извлачење на пин4 и пин5. Подешавање П1РЕН на 0к30 омогућава унутрашње извлачење на овим пиновима. П1ИЕ омогућава прекид, при чему П1ИЕС бира прелаз од високог до ниског нивоа као ивицу прекида на овим пиновима.
П1ДИР - = 0к07; П1ОУТ = 0к30; П1РЕН - = 0к30; П1ИЕ - = 0к30; П1ИЕС - = 0к30; П1ИФГ & = ~ 0к30;
Следећи ред омогућава режим мале снаге и омогућава ГИЕ у регистру статуса тако да прекиди могу да се приме.
__бис_СР_регистер (ЛПМ4битс + ГИЕ)
Програмски бројач се поставља са адресом вектора порта 1 помоћу макронаредбе.
ПОРТ1_ВЕЦТОР . #прагма вецтор = ПОРТ1_ВЕЦТОР __прекида воид Порт_1 (воид)
Доњи код пребацује једну по једну сваку ЛЕД диоду повезану на пин0, пин1, пин2.
ако (броји% 3 == 0) { П1ОУТ ^ = БИТ1; П1ИФГ & = ~ 0к30; цоунт ++; } елсе иф (цоунт% 3 == 1) { П1ОУТ ^ = БИТ1; П1ИФГ & = ~ 0к30; цоунт ++; } елсе { П1ОУТ ^ = БИТ2; П1ИФГ & = ~ 0к30; цоунт ++; }
Кружни дијаграм 2:
Слично томе, покушајмо са другом игле да бисмо концепт разумели много боље. Дакле, овде је дугме повезано на пин 2.0 уместо на пин 1.5. модификовано коло је следеће. Поново се ово коло користи за тестирање програма прекида дугмета МСП430.
Овде се порт 2 користи за унос. Дакле, морају се користити различити вектори прекида. П1.4 и П2.0 узимају улазе.
Како се порт 2 користи само за улаз, П2ДИР је постављен на 0. Да би пин0 порта 2 поставили као улаз са омогућеним унутрашњим повлачним отпорницима, регистри П2ОУТ и П2РЕН морају се поставити са вредношћу 1. Да би се омогућило прекида на пин0 порта 2 и такође да би изабрали ивицу прекида, П2ИЕ и П2ИЕС се постављају са вредношћу 1. Да би ресетовали заставицу у порту 2, П2ИФГ се брише, тако да се застава може поново поставити на појава прекида.
П2ДИР - = 0к00; П2ОУТ = 0к01; П2РЕН - = 0к01; П2ИЕ - = 0к01; П2ИЕС - = 0к01; П2ИФГ & = ~ 0к01;
Када је извор прекида са порта 1, тада ЛЕД лампица повезана на пин1 порта 1 светли. Када извор прекида припада прикључку 2, тада ЛЕД лампица повезана на пин2 прикључка 1 светли.
#прагма вецтор = ПОРТ1_ВЕЦТОР __прекинути празнину Порт_1 (воид) { П1ОУТ ^ = БИТ1; П1ИФГ & = ~ 0к10; за (и = 0; и <20000; и ++) { } П1ОУТ ^ = БИТ1; } #прагма вецтор = ПОРТ2_ВЕЦТОР __прекида воид Порт_2 (воид) { П1ОУТ ^ = БИТ2; П2ИФГ & = ~ 0к01; за (ј = 0; ј <20000; ј ++) { } П1ОУТ ^ = БИТ2; }
Отпремање програма на МСП430 са ЦЦС-а
Да бисте учитали пројекат на лансирну рампу и отклонили грешке, изаберите пројекат и кликните икону за отклањање грешака на траци са алаткама. Или притисните Ф11 или кликните РунаДебуг да бисте ушли у режим отклањања грешака.
Када уђете у режим отклањања грешака, притисните зелено дугме за покретање да бисте слободно покренули учитани код у МЦУ-у. Када се притисне тастер, прекид се покреће променом ивице, што подстиче промену стања ЛЕД-а.
Програм прекида на МСП430
Након што се код успешно отпреми, можемо га тестирати једноставним притиском на дугме. ЛЕД образац ће се променити у складу са нашим програмом сваки пут када се притиском на тастер прекида.
Комплетна дела могу се наћи на видео линку доле. Надам се да сте уживали у водичу и научили нешто корисно. Ако имате питања, оставите их у одељку за коментаре или користите наша форума за друга техничка питања.