PRIMENA MIKROKONTROLERA- MS1PMK 4. deo. Nenad Jovičić

Величина: px
Почињати приказ од странице:

Download "PRIMENA MIKROKONTROLERA- MS1PMK 4. deo. Nenad Jovičić"

Транскрипт

1 PRIMENA MIKROKONTROLERA- MS1PMK 4. deo 2015 Nenad Jovičić

2 NVIC Nested Vector Interrupt Controller

3 NVIC Nested Vector Interrupt Controller NVIC podržava do 240 prekida sa 256 nivoa prioriteta koji se mogu dinamički menjati. NVIC implementira mehanizme za malo vreme kašnjenja servisiranja prekida. Puni pristup registrima NVIC je moguć iz privilegovanog moda izvršavanja u bilo kom formatu (bajt, polureč, reč). Registri NVIC su sistemski registri u little endian formatu zapisa koji sadrže informacije o broju prekidnih linija, podešavanje sistemskog intervala, dozvoli prekida, baferisanju prekida (pending, pre-empted), prioritetima prekida, informacije o broju i verziji CPU, procesiranju izuzetaka (prioritetima, dozvoli), adresi početka VT, kontroli stanja CPU sa smanjenom potrošnjom. Omogućeno gneždenje prekida

4 Izuzeci Prekidi periferijskih modula IVT Interrupt Vector Table Mogućnost remapiranja tabele vektora preko podešavanja registra ofseta tabele Adresa početka tabele poravnata na granicu 1024 bajta.

5 Model procesiranja izuzetaka Osnovne karakteristike Automatsko snimanje/restauriranje konteksta. Automatsko čitanje vektorske tabele sa adresama ISR. Podrška za tail-chaining bez snimanja/restauracije konteksta između ISR. Dinamička promena prioriteta prekida. Direktna veza CPU i NVIC obezbeđuje brz odgovor na prekid i procesiranje kasno pristiglih prekida višeg prioriteta. Konfigurabilan broj prekida Konfigurabilan broj nivoa prioriteta Odvojeni stek i nivo privilegija u handler i thread modu. Maskiranje prioriteta za implementaciju kritičnih sekcija koda.

6 Model procesiranja izuzetaka CPU i NVIC obezbeđuju prioritete i servisiranje izuzetaka. Svi izuzeci se servisiraju u handler modu u okviru ISR (Interrupt Service Routine). Stanje procesora (kontekst) se pamti na steku po pojavi izuzetka i automatski se restaurira po kraju ISR. Preuzimanje prekidnog vektora se obavlja paralelno sa snimanjem konteksta.

7 Tipovi izuzetaka SP_init Reset vektor Prekidi periferijskih modula

8 Način procesiranja izuzetaka Dva mehaizma koje NVIC koristi za smanjivanje vremena kašnjenja servisiranja prekida su: Tail-chaining Lait-arrivals 12 ciklusa Ovim mehanizmima se postiže determinističko ponašanje sistema. Malo kašnjenje servisiranja izuzetaka što je od velike važnosti kod eventdriven namenskih sistema za rad u realnom vremenu. Kod Cortex-M3 arhitekture se postiže vreme kašnjenja servisiranja prekida od 12 taknih ciklusa. Na ARM7 arhitekturi snimanje konteksta traje ciklusa, a restauracija 16 ciklusa. POP 12 ciklusa

9 Zamena konteksta Zamena konteksta je karakteristična za promenu toka izvršavanja programskog koda kao posledice pojave izuzetka ili promene aktivnog taska (procesa, tj. thread-a) na sistemu sa RTOS. Kod Cortex-M3 procesora se pri zameni konteksta na steku pamte sledeći registri: Programski brojač PC Statusni registar procesora xpsr r0-r3 r12 Link registar LR Nakon završetka operacije smeštanja podataka na stek SP se dekrementira za 8 reči.

10 U slučaju Cortex-M4 kontrolera sa FPU kontekst je znatno veći. Čuvanje konteksta

11 Tail Chaining Tail-Chaining mehanizam se odnosi na situaciju kada dva prekida pristignu u istom trenutku, ili kada pristigne prekid niskog prioriteta za vreme servisiranja prekida višeg prioriteta. Tada će prekid niskog prioriteta čekati završetak ISR koja odgovara prekidu višeg prioriteta, nakon čega će se izvršiti ISR koja odgovara prekidu niskog prioriteta ali bez nepotrebne zamene konteksta između prekidnih rutina (snimanja/restauracije konteksta sa/na stek). Na ovaj način se štedi u vremenu kašnjenja servisiranja prekida za slučaj potrebe za izvršavanjem uzastopnih ISR.

12 Late arrivals Late-arrivalls. U slučaju kada se tokom snimanja konteksta kao posledica pojave prekida niskog prioriteta javi prekid višeg prioriteta, odmah nakon snimanja konteksta, kreće se u izvršavanje prekida višeg prioriteta a zatim prema tailchaining mehanizmu i prekida nižeg prioriteta.

13 Late arrivals Slično, ako se tokom restauracije konteksta javi prekid višeg prioriteta, proces restauracije se napušta i prelazi se na servisiranje prekida višeg nivoa prioriteta.

14 Inicijalizacija procesora Inicijalizacija SP registra ADR: 0x POR: SP mem(0x ) Tabela prekidnih vektora (IVT) Počinje od adrese 0x Sadrži 32-bitne adrese ISR Ulaz #1: reset vektor ADR: 0x POR: PC mem(0x ) Izvršavanje programskog koda

15 MPU MPU je komponenta koja omogućava zaštitu pristupa memoriji kroz podršku za zaštitu regiona, preklapanje zaštićenih regiona, dozvolu pristupa i prosleđivanje memorijskih parametara sistemu. U slučaju grešaka u pristupu generiše se Memory_Management izuzetak čiji je prioritet programabilan. Pomoću MPU jedinice moguće je implementirati privilegije pristupa, razdvojiti procese i implementirati pravila pristupa. Registri MPU definišu broj podržanih regiona, baznu adresu, veličinu, prava pristupa...

16 MPU Kod Cortex-M3 MPU podržava do 8 regiona koji mogu biti podeljeni na po 8 podregiona. Neprivilegovani mod izvršavanja Privilegovani mod izvršavanja Opcije podešavanja prava pristupa

17 MBED platoforme Svakim danom broj MBED-enabled platformi raste

18 MBED LPC1768-arhitektura

19 Veza MBED-a i PC-ja je ostvarena preko tajne komponente IC1

20 Određen broj pinova LPC1768 je povezan sa ostatkom MBED-a

21 MBED i LPC1768

22 MBED i LPC1768 Tabela prikazuje veze LPC1768 sa pinovima MBED-a.

23 MBED se napaja preko USB-a ali prihvata i spoljašnje kao i baterijsko napajanje

24 Ethernet chipset

25 Hello World Postojeće programe i biblioteke je moguće uvesti u kompajler korišćenjem Import funkcije. Osim toga, prilikom kreiranja novog programa automatski će biti kreiran main.cpp fajl sa spektakularnom funkcijom treperenja LED diode. To je praktično Hello World.

26 C++ naziv tipa (klasa) myled objekat tipa DigitalOut, poziv konstruktora #include "mbed.h DigitalOut myled(led1); int main() { pin1_18 (definisano u PinNames.h) Upotreba DigitalOut biblioteke Nema adresiranja porta Nema bit operacija Nema pristupa pristupa direction registru } while(1) { myled =!myled; wait(0.25); } operator= DigitalOut& operator= (DigitalOut& rhs) { write(rhs.read()); return *this; } Pozivi funkcija DigitalOut biblioteke Mogućnosti poziva funkcija u formi složenih logičkih i aritmetičkih konstrukcija

27 Debagovanje Run-time greske greške koje se ne vide u toku prevođenja. Nastaju kada loše napisan program pokušava da radi nedozvoljene radnje ili pokušava da pristupa nedozvoljenim resursima. Na sledećem primeru se pokušava definisanje pwm izlaza na portu p20 što ne nedozvoljeno. #include "mbed.h" PwmOut led(p20); int main() { while(1) { for(float p = 0.0f; p < 1.0f; p += 0.1f) { led = p; wait(0.1); } } } Efekat koji će se javiti je specifična signalizacija LE dioda.

28 Debagovanje funkcionalnosti Online Compiler U slučaju korišćenja ONLINE kompjalera, MBED nema mogućnost prave podrške za real-time debugging kao što to recimo ima MSP430 korišćenjem FET debugger-a, i to je jedna od većih mana MBED-a. Nemoguće je zaustaviti izvršavanje programa u nekom trenutku niti postaviti breakpoint. Nemoguće je i očitati proizvoljan sadržaj memorije niti registara mikrokontrolera. U nedostatku boljeg koriste se dva odavno poznata načina debuggovanja. Jedan je korišćenje neke od 4 LE diode na samom MBED-u. Ideja je da se različita stanja korisničkog porgrama signaliziraju različitim stanjima uključenosti dioda. Drugi način je korišćenje sistemskog serijskog interfejsa koji je sastavni deo USB veze PC-ja i MBED-a. Standardna MBED biblioteka poseduje klasu serial pomoću koje se može konfigurisati i pristupati USB serijskom ali i ostalim serijskim portovima MBED-a.

29 Pravo debagovanje - STM32 Nucleo Debagovanje kroz STLINK debugger

30 Pravo debagovanje - LPC Od skoro je data podrška za pravo debagovanje kroz korišćenje CMSIS- DAP (debugg access port). To je moguće samo ukoliko se koristi offline kompjaler koji podržava pristup (KEIL) i ukoliko je moguće firmware MBED interfejsa unaprediti za tu svrhu.

31 Eksportovanje prema eksternom debugger-u