r - Prekidi u STM32F103, NVIC Flashcards
Koji rukovaoci izuzetnim situacijama postoje u STM32F103?
Fault handler
System handler
Šta radi fault handler?
Obrađuje fault izuzetke
Šta radi System handler?
Obrađuje:
- fault izuzetke
- nemaskirajuće prekide (NMI)
- supervisor call (SVC)
- PendSV
- SysTick
Kako se zove rukovalac prekidima periferija?
ISR = Interrupt Service Routine
Šta radi ISR?
Obrađuje izuzetke
Koji mehanizam se koristi za obradu prekida u STM32F103?
Vektorisani mehanizam sa ugnježđivanjem izuzetaka
Od koje adrese počinje vektor tabela?
Počinje od adrese 0 (4?), ali može da se relocira na drugu adresu
Koliko linija za prekide ima NVIC?
68 linija za prekide
Gde se nalazi NVIC kontroler u odnosu na procesor?
Blisko je spregnut sa procesorom
Da li instrukcije mogu da se prekinu u STM32F103 upotrebom prekida?
Da, postoji mogućnost prekidanja instrukcija dugotrajnog izvršavanja
Kako da se smanji potrošnja STM32F103 upotrebom prekida?
Može da se upravlja napajanjem i da se uključe modovi smanjene potrošnje
Koliko nivoa prioriteta prekida ima u STM32F103?
16 nivoa prioriteta
Zašto mogu da se grupišu prekidi u STM32F103?
U cilju bolje kontrole preotimanja (preemption control)
Kako može da se vrši dozvoljavanje i zabrana prekida u STM32F103?
Pojedinačno i na nivou procesora
Na šta procesor reaguje kad stigne prekid?
Na nivo (level triggered interrupt)
i na ivicu (edge triggered interrupt)
Kakve moraju biti adrese svih prekidnih rutina u STM32F103?
Neparne, da bi procesor ostao u Thumb stanju
Koji tipovi izuzetaka postoje u STM32F103 (Cortex-M3)?
Reset
NMI = Non Maskable Interrupt
Hard fault
Memory management fault
Bus fault
Usage fault
SVCall
PendSv
SysTick
Maskirajući prekidi
Kada se aktivira reset izuzetak?
Po uspostavljanju napajanja i nakon reseta sistema (nakon deaktivacije reset signala)
Koji izuzetak se jedini izvršava u privilegovanom režimu u Thread modu?
Reset izuzetak
Koji je prioritet reset izuzetka?
-3, fiksno najviši
Koji je prioritet NMI izuzetka?
-2, fiksno drugi najviši
Kako se aktivira NMI izuzetak?
Spolja ili softverski
Da li je moguće zabraniti NMI izuzetak?
Nije moguće (zove se nemaskirajući prekid)
Koji je prioritet Hard fault izuzetka?
-1, fiksno treći najviši
Kada se izvršava hard fault?
- kao posledica greške tokom rada sistema
- kada druga rutina ne može da obradi nastalu grešku u sistemu
Kada nastaje memory management fault?
- u slučaju narušavanja pravila zaštite u MPU
- u slučaju pokušaja izvršavanja instrukcija u regionu sa XN atributom
Šta je bus fault?
Greška nastala tokom pristupa instrukcijama i podacima
Šta je usage fault?
Greška nastala izvršavanjem instrukcije na nepredviđen način
Kada se diže usage fault izuzetak?
- nepostojeća instrukcija
- nedozvoljen neporavnat pristup
- nevalidno stanje prilikom izvršavanja instrukcija
- greška pri povratku iz neke druge rutine (RET)
- deljenje nulom
Kada se vrši eskalacija grešaka na hard fault?
Kada iz različitih razloga grešku nije moguće obraditi namenskim rukovaocem:
- rukovalac proizvodi isti tip greške zbog koje je pozvan
- rukovalac generiše novu grešku istog ili nižeg prioriteta
- neki drugi rukovalac generiše grešku čiji rukovalac je istog ili nižeg prioriteta
- odgovarajući rukovalac u konfiguraciji nije omogućen
Koji je izuzetak (poseban slučaj) kada ne dolazi do eskalacije na hard fault?
Slučaj u kojem bus fault nastane tokom operacije push, prilikom ulaska u rukovalac za bus fault.
Kada se vrši lockup (zaključavanje)?
Kada se u reset ili NMI obradi desi hard fault - procesor se zaustavlja, ne izvršava instrukcije.
Koji prekidi periferija postoje u STM32F103?
Interrupt (IRQ0-67)
Šta je sistemski poziv u STM32F103?
SVCall prekid.
Aplikacija iz neprivilegovanog režima izvršava predefinisane sistemske usluge u privilegovanom režimu.
Kako se diže PendSV prekid/izuzetak?
Zahteva se softverski, postavljanjem odgovarajućeg kontrolnog bita u ICSR
Šta je SysTick?
Prekid sistemskog tajmera
Da li SysTick može da se aktivira i softverski?
Da, kroz ICSR
Šta je IRQ?
Interrupt Request, prekid periferije
Koliko različitih prekida periferija postoji u STM32F103?
68 različitih prekida
Koja komponenta povezuje određene pinove mikrokontrolera STM32F103 kao izvore zahteva za prekid sa NVIC?
EXTI - External Interrupt / Event Controller
Šta znači EXTI?
External Interrupt / Event Controller
Šta znači IVT?
Interrupt Vector Table
Koliko postoji nivoa prioriteta kod izuzetaka?
16 programabilnih nivoa prioriteta (4 bita)
Koji je podrazumevan prioritet kod izuzetaka koji nisu Reset, NMI, Hard fault?
0
Koji prekid se prihvata ako više prekida imaju iste prioritete?
Prihvata se onaj sa najmanjim brojem prekida (broj IRQ linije)
Šta je potrebno da bi prekid mogao da prekine drugi prekid?
Neophodno je da bude višeg piroriteta na nivou grupe
Kako se konfiguriše broj bitova koji određuju grupu prioriteta?
Softverski, kroz polje PRIGROUP registra SCB_AIRCR (Application Interrupt and Reset Control Register)
Da li registrima jezgra za kontrolu prekida može da se pristupa u neprivilegovanom režimu u STM32F103?
Ne, registri za kontrolu prekida zahtevaju privilegovano izvršavanje
Koju početnu vrednost imaju registri za kontrolu prekida u STM32F103?
0
Šta se desi ako se pokuša čitanje registara jezgra za kontrolu prekida u neprivilegovanom pristupu?
Čita 0
Šta se desi ako se pokuša upis u registre jezgra za kontrolu prekida u neprivilegovanom pristupu?
Ignoriše se
Šta radi upis 1 u bit 0 PRIMASK registra?
Zabranjuje aktivaciju svih izuzetaka konfigurabilnog prioriteta
Šta znači kada je bit 0 PRIMASK registra 0?
Dozvoljena je aktivacija svih izuzetaka
Koji bitovi PRIMASK registra se ne koriste (rezervisani su)?
Bitovi 1-31
Šta je i za šta služi PRIMASK registar?
Priority Mask registar
Služi da se zabrani aktivacija svih izuzetaka konfigurabilnog prioriteta (samo bit 0 se postavi na 1)
Šta je i za šta služi FAULTMASK registar?
Fault Mask registar
Bit 0 ako se postavi na 1 zabranjuje aktivaciju svih izuzetaka, osim NMI
Koji je uslov za setovanje bita 0 FAULTMASK registra?
može da se setuje samo kada je tekući prioritet <= 0
Šta se desi sa FAULTMASK registrom po izlasku iz bilo kog rukovaoca izuzecima? (osim pri izlasku iz NMI)
Briše se na 0
Koji bitovi se ne koriste u FAULTMASK registru? (rezervisani su)
Bitovi 1-31
Šta je i za šta služi BASEPRI registar?
Base Priority registar
Služi za podešavanje osnovnog prioriteta ispod kojeg prekidi neće biti prihvaćeni
Koji bitovi u registru BASEPRI se koriste za osnovni prioritet ispod kog prekidi neće biti prihvaćeni u STM32F103?
Bitovi 7..4
Šta znači ako su bitovi 7..4 BASEPRI registra jednaki 0 kod STM32F103?
Nema uticaja na prihvatanje prekida
Koje bitove u BASEPRI registru Cortex-M3 može da koristi za osnovni prioritet ispod kojeg prekidi neće biti prihvaćeni?
Bitove 7..0
Šta se dešava ako je prioritet zahteva za prekid < bit[7..4] registra BASEPRI?
Zahtev se prihvata
Šta se dešava ako je prioritet zahteva za prekid >= bit[7..4] registra BASEPRI?
Zahtev se ne prihvata
Koja sve stanja izuzetaka (prekida) postoje?
Inactive
Pending
Active
Active and pending
Šta govori to da je stanje izuzetka (prekida) inactive?
Ne postoji zahtev
Šta govori to da je stanje izuzetka (prekida) pending?
Zahtev stigao i čeka na procesor
Kada NVIC stavlja prekid u stanje pending?
U zavisnosti od konfiguracije:
- kada se detektuje visok nivo signala na ulazu prekida u trenutku kada prekid nije aktivan
- kada se detektuje uzlazna ivica zahteva za prekid
- kada se softverski postavi zahtev za prekid u pending
(NVIC_ISPR = Interrupt Set Pending Register ili
NVIC_STIR = Software Trigger Interrupt Register)
Do kada je zahtev za prekid aktivan?
- do prihvatanja zahteva za prekid ili
- dok se softverski ne poništi pending stanje
Kada se softverski poništi pending stanje, šta se dešava ako je prekid na nivo (level-sensitive interrupt) i zahtev je i dalje aktivan?
Stanje se ne menja (Pending), a ako zahtev nije i dalje aktivan, onda Inactive.
Kada se softverski poništi pending stanje, šta se dešava ako je prekid na ivicu?
Pending se briše (Inactive), a signal ostaje aktivan ili neaktivan.
Šta govori da je stanje izuzetka (prekida) active?
Otpočela je obrada zahteva
Kod level-sensitive interrupt-a (zahteva za prekid na nivo), šta se dešava ako je zahtev i dalje aktivan i kada se završi obrada zahteva za prekid?
Ponovo Pending, a ako je neaktivan zahtev onda Inactive.
Kod edge-triggered interrupt-a (zahteva za prekid na ivicu), šta se dešava ako se ponovo desi ivica u toku active stanja (dok se obrađuje)?
Ako se ponovo desi ivica, Active i Pending.
Šta znači ako je zahtev za prekid i u stanju Active i u stanju Pending?
Znači da je stigao novi zahtev tokom obrade prethodnog zahteva.
Koji su koraci prilikom prihvatanja i obrade izuzetaka i prekida?
1) stiže zahtev (Inactive → Pending)
2) provera da li može da se prihvati
3a) stacking i u LR se upisuje ključ za povratak EXC_RETURN
3b) paralelno se dohvata adresa rukovaoca iz IVT
4) Late-arriving ako je pristigao zahtev između 3a i ISR
5) u PC se upisuje ključ za povratak iz LR
6) Tail-chaining ako je neki zahtev Pending
Na osnovu čega se prilikom prihvatanja i obrade izuzetaka proverava da li izuzetak može da se prihvati?
Na osnovu prioriteta, dozvole i podešavanja registara jezgra
Za šta služi EXC_RETURN?
EXC_RETURN je vrednost (ključ za povratak) koja se upisuje u LR pre početka obrade izuzetaka i prekida.
Govori procesoru da treba da se vrati iz rutine po završetku, i u kom modu (thread ili handler) i na koj stek (Main ili Process)
Šta podrazumeva stacking?
Pre ulaska u prekidnu rutinu, na steku se čuva:
- R0-R3
- R12
- LR
- povratna adresa
- PSR
Opciono se radi poravnanje na duplu reč.
Kako se uključuje poravnanje na duplu reč prilikom stacking-a?
Ako se STKALIGN fleg u CCR (Configuration and Control Register) postavi na 1, u PSR[9] na steku se čuva informacija da li je rađeno poravnanje.
Šta je ponašanje poznato kao Late-arriving?
Ako se u toku 3a (stacking i upisivanje u LR) sve do učitavanja prve instrukcije ISR pojavi izuzetak višeg grupnog prioriteta, dohvata se adresa njegove ISR i izvršava
Šta se radi na kraju rukovaoca? (3 načina)
U PC se upisuje ključ za povratak iz LR i dekodira. Na osnovu toga se izvršava povratna logika. Povratna adresa se sa steka stavlja u LR. Iz LR se povratna adresa smešta u PC.
- POP PC
- BX (Branch Exchange) LR
- LDR i LDM PC
Da li EXC_RETURN sadrži adresu povratka iz prekidne rutine?
EXC_RETURN nije direktno adresa povratka, ali kada se upiše u Program Counter (PC), on omogućava procesoru da pravilno restaurira stanje pre prekida.
Šta je tail-chaining?
Preskakanje restauracije konteksta i ponovno čuvanje konteksta da bi se opslužio zahtev za prekid koji je bio Pending prilikom povratka iz prekidne rutine.
Kako se vrši dozvola pojedinačnih prekida u NVIC?
Taj bit koji predstavlja prekid se postavi na 1 u NVIC_ISERx registru (Interrupt Set-Enable Registers)
Kako se vrši zabrana pojedinačnih prekida u NVIC?
Taj bit koji predstavlja prekid se postavi na 1 u NVIC_ICERx registru (Interrupt Clear-Enable Registers)
Kako se vrši postavljanje pending stanja pojedinačnih prekida u NVIC?
Taj bit koji predstavlja prekid se postavi na 1 u NVIC_ISPRx registru (Interrupt Set-Pending Registers)
Kako se vrši brisanje pending stanja pojedinačnih prekida u NVIC?
Taj bit koji predstavlja prekid se postavi na 1 u NVIC_ICPRx registru (Interrupt Clear-Pending Registers)
Kako se vrši očitavanje active statusa pojedinačnih prekida?
NVIC_IABRx (Interrupt Active Bit Registers)
Kako se vrši podešavanje prioriteta prekida (IRQ0-67)?
NVIC_IPRx (Interrupt Priority Registers)
Kako se vrši softversko generisanje zahteva za prekid?
NVIC_STIR (Software Trigger Interrupt Register)
U kom režimu može da se izvrši softversko generisanje zahteva za prekid (NVIC_STIR)?
Može i u neprivilegovanom i u privilegovanom režimu.
U koliko primeraka je prisutna većina registara iz NVIC-a?
U 3 primeraka (jedan može da pokrije 32 prekida)
Koji sve registri postoje u NVIC-u?
Set-enable (NVIC_ISER)
Clear-enable (NVIC_ICER)
Set-pending (NVIC_ISPR)
Clear-pending (NVIC_ICPR)
Active bit (NVIC_IABR)
Interrupt Priority (NVIC_IPR)
Software Trigger (NVIC_STIR)
Koji registri u SCB služe za upravljanje NVIC-om?
SCB_ICSR = Interrupt Control and State Register
SCB_VTOR = Vector Table Offset Register
SCB_AIRCR = Application Interrupt and Reset Control Register
SCB_CCR = Configuration and Control Register
SCB_SHPR1/2/3 = System Handler Priority Register
SCB_SHCSR = System Handler Control and State Register
SCB_CFSR = Configurable Fault Status Register
SCB_HFSR = Hard Fault Status Register
SCB_MMFAR = Memory Management Fault Address Register
SCB_BFAR = Bus Fault Address Register
Koji registar služi za upravljanje NMI, PendSV i SysTick prekidima i za status prekida?
SCB_ICSR = Interrupt Control and State Register
Koji registar služi za relokaciju (I)VT?
SCB_VTOR = Vector Table Offset Register
Koji registar služi za podešavanje veličine grupe prioriteta?
SCB_AIRCR = Application Interrupt and Reset Control Register
Koji registar služi za podešavanje prijavljivanja grešaka i dozvoljavanje softverskog generisanja prekida iz neprivilegovanog režima?
SCB_CCR = Configuration and Control Register
Koji registar služi za podešavanje prioriteta za sistemske rukovaoce?
SCB_SHPR1/2/3 = System Handler Priority Register
Koji registar služi za upravljanje sistemskim rukovaocima?
SCB_SHCSR = System Handler Control and State Register
Koji registri služe za dohvatanje informacija o grešci?
SCB_CFSR = Configurable Fault Status Register
SCB_HFSR = Hard Fault Status Register
SCB_MMFAR = Memory Management Fault Address Register
SCB_BFAR = Bus Fault Address Register