You are on page 1of 6

Funkcije za podešavanje interrupt-a i primjena istih

Interrupt je signal koji se šalje procesoru koji nakon toga prekida trenutni proces i
pokreće novi. Može ih generirati hardverski uređaj ili softverski program.

Hardverski interrupt kod PC-a često stvara uređaj za unos, kao što su miš ili tastatura.
Na primjer, ako koristite program za obradu teksta i pritisnete tipku, program mora odmah
obraditi unos. Unosom "zdravo" stvara se pet zahtjeva za prekid, koji programu mogu
prikazati slova koja ste upisali. Slično tome, svaki put kada kliknete tipku miša ili dodirnete
zaslon osjetljiv na dodir, uređaju šaljete prekidni signal.

Interrupt se procesoru šalje kao zahtjev za prekid ili IRQ (interrunpt reques). Svaki
uređaj za unos ima jedinstvenu IRQ identifikacijski broj ili prioritet. Time se sprječavaju
sukobi i osigurava prednost zajedničkim uređajima za unos, kao što su tipkovnice i miševi.

Softverski interrupt-i koriste se za rješavanje pogrešaka i izuzetaka koji se javljaju


tijekom pokretanja programa. Na primjer, ako program očekuje da će varijabla biti važeći
broj, ali vrijednost je nula, može se generirati prekid da se spriječi rušenje programa. Slično
tome, interrupt se može koristiti za prekid beskonačne petlje, što bi moglo stvoriti curenje
memorije ili uzrokovati da program ne reagira.

Slika 1 - Princip rada interrupt-a

Linije interrupta sa periferija su preko NVIC-a spojene na mikorkontroler.


NVIC(nested vector interrupt controller) metoda je prioritiziranja prekida, poboljšanja
performansi MCU-a i smanjenja kašnjenja prekida. NVIC također pruža implementacijske
šeme za upravljanje prekidima koji se događaju kada se izvršavaju drugi prekidi ili kada je
CPU u procesu vraćanja prethodnog stanja i nastavka obustavljenog postupka.
Slika 2 - Šema mikokontrolera vezana za funkcioniranje interrupt-a

U našem slučaju koristit ćemo samo EXTI registre koji su spojeni na NVIC, jer preko
njih zapravo podešavamo naš interrupt. U STM32F103 postoji 20 linija koje povezuju NVIC
i EXTI registre. Prvih 16 od tih 20 koristimo za podešavanje interrupt-a GPIO periferije. Na
sljedećoj slici je zapravo prikazana veza pinova i EXTI linija:

Slika 3 - Šema koja pokazuje način na koji su pinovi spojeni na EXTI linije
Kao što možemo vidjeti na svaku liniju su spojeni svi pinovi mikrokontrolera sa istim
indeksom. Na sljedećoj slici možemo vidjeti kako izgleda EXTIC registar za pinove indeksa
od 0 do 3:

Slika 4 - Prikaz EXTIC registra

Naime, za svaku EXTI liniju imamo četiri bita koja određuju na kojem portu se nalazi
interrupt.

Tabela 1 - Tabela koja prikazuje način na koji se bira port

Portovi Bit 3 Bit 2 Bit 1 Bit 0


A 0 0 0 0
B 0 0 0 1
C 0 0 1 0
D 0 0 1 1
E 0 1 0 0
F 0 1 0 1
G 0 1 1 0

U gore prikazanoj tabeli možemo vidjeti kako za svaku EXTI liniju možemo podesiti
port pina. Ostali EXTICR registi su identični kao i registar na slici 4, s tim da svaki registar
obuhvata različita 4 pina. Pa tako imamo da je:

Tabela 2 - Tabela koja prikazuje pinove koje obuhvataju EXTIC registry

Registar Pinovi
EXTICR1 0-3
EXTICR2 4-7
EXTICR3 8 - 11
EXTICR4 12 - 15

Pošto svi EXTI registri pripadaju AFIO periferiji, prvo što radimo jeste uključivanje
kloka za istu. Nakon toga u fajlu za naš mikrokontroler, nađemo definirane strukture za
AFIO.

Slika 5 - Definicija EXTICR u stm32f10x.h fajlu


Kao što možemo vidjeti na slici 5 EXTIC registri su deklarirani kao članovi niza!
Stoga ćemo to itekako implementirati u naš kod. Sada tražimo vrijednosti koje treba upisati u
svaki registar da bi se odabrao port. O tome nam više govori sljedeća slika:

Slika 1 - Definicija vrijednosti za određivanje porta preko EXTICR

Na slici je prikazane vrijednosti koje služe za biranje porta na EXTI0 liniji, odnosno
liniji koja služi za generiranje interrupt-a pina čiji je indeks 0. Na ovaj način možemo pronaći
konfiguraciju za svaku od linija. Sada ćemo mi u našem kodu napraviti uslove kojima
provjeravamo odabrani port, a potom za svaki uslov upotrebom switch-a provjeriti unešeni pin
i na osnovu toga upisati vrijednost u određeni EXTIC registar.

Slika 7 - Konfiguracija pinova za interrupt

Na slici 7 možemo vidjeti kako u slučaju odabira pina A0, program u EXTICR1
upisuje vrijednost “AFIO_EXTICR1_EXTI0_PA” ili 0x0000. Sličan postupak važi za svaki
pin pojedinačno.

Nakon što odradimo konfiguraciju pina za interrupt, prelazimo na odabir okidajuće


ivice. Okidajuće ivice su impulsi generirani kašnjenjem logičkih kola. Tako na primjer ako bi
na AND kolo na njegova oba ulaza spojili isti generator signala, s tim da na drugom ulazu
stavimo logičko kolo NOT, tijekom prelaska sa logičke nule generatora signala na logičku
jedinicu, desit će se kašnjenje logičkog kola NOT i na izlazu AND kola kratko će se pojaviti
logička jedinica. Također, prilikom prelaska sa logičke jedinice na logičku nulu kod kola
NOR,koji je isto spojen kao i prethodno navedeni AND, javit će se kašnjenje koje također
daje logičku jedinicu na izlazu. Ova dva slučaja redom se nazivaju prednja i zadnja okidajuća
ivica. U tabelama ispod možemo vidjeti kako sve to funkcionira:
Tabela 3 - Tabela koja prikazuje kako funkcionira rastuća okidajuća ivica

A Á Za vrijeme prelaska vrijednosti na generatoru AND kolo


Nakon što se signal promijeni sa 0 na 1, ulaz A
↑ 1 1 automatski postaje jedan dok će njegov inverter za 1
kratko vrijeme ostati jedinica
Nakon što se signal promijeni sa 1 na 0, ulaz A
↓ 0 0 automatski postaje nula dok će njegov inverter za 0
kratko vrijeme ostati nula

Tabela 1 - Tabela koja prikazuje kako funkcionira opadajuća okidajuća ivica

A Á Za vrijeme prelaska vrijednosti na generatoru NOR kolo


Nakon što se signal promijeni sa 0 na 1, ulaz A
↑ 1 1 automatski postaje jedan dok će njegov inverter za 0
kratko vrijeme ostati jedinica
Nakon što se signal promijeni sa 1 na 0, ulaz A
↓ 0 0 automatski postaje nula dok će njegov inverter za 1
kratko vrijeme ostati nula

Što se tiče STM32F103, među EXTI registrima postoje dva posebna registra koji
služe za određivanje rastuće ili opadajuće ivice. Njihovi nazivi su EXTI_RTSR i
EXTI_FSTR.

Slika 2 - Formiranje enumeracije

U našem programu ćemo na osnovu napravljene enumeracije (slika 8) podesiti odabir


naše ivice. Pošto su pinovi korespodentni bitovima registara, pišemo sljedeće:

Slika 9 - Određivanje okidajuće u našem programu

Ovim činom smo završili funkciju za konfiguriranje interrupt-a za određeni pin.

You might also like