Preskoči na glavno vsebino
Učilnica FRI 24/25
  • Domov
  • Več
Zapri
Preklopi iskalni vnos
Slovenščina ‎(sl)‎
English ‎(en)‎ Slovenščina ‎(sl)‎ Македонски ‎(mk)‎ Русский ‎(ru)‎ 한국어 ‎(ko)‎
Trenutno uporabljate gostujoči dostop
Prijavite se
Učilnica FRI 24/25
Domov
Razširi vse Skrči vse
  1. or
  2. 9. vaja - Prekinitve in časovnik
  3. 9. naloga: Prekinitve in časovnik

9. naloga: Prekinitve in časovnik

Zahteve zaključka
Rok za oddajo: ponedeljek, 30. december 2024, 23.55

Navodila za STM32H7: 

Po posebej podanih navodilih dodajte podprogram za inicializacijo časovnika z zahtevo po prekinitvi po preteku 1ms (INIT_TC_PSP). Nato še napišite prekinitveno servisni program (PSP) za časovnik, ki naj v celoti opravi vse potrebno za periodični vklop/izklop LED diode (štetje milisekund, preklop LED diod, ...).

Po potrebi dodajte tudi ustrezne spremenljivke. Če kodo izvajate iz RAM pomnilnika, sporočite mikrokrmilniku spremenjen naslov vektorske tabele v programu, da se bodo prekinitve pravilno izvajale. Sprememba je potrebna samo pri izvedbi kode iz RAM pomnilnika.

Navodila za FRI-SMS:

Namesto čakanja v zanki na postavitev bita CPCS kot v podprogramu DELAY_TCO (8. naloga), izvedite merjenje časa s pomočjo prekinitev:

1.    Napišite podprogram INIT_TC0_PSP, kjer nastavite TC0 tako, da bo CPCS predstavljal prekinitveno zahtevo.

2.    Napišite podprogram INIT_AIC, v katerem ustrezno nastavite prekinitveni krmilnik AIC. Za nastavitev AIC je v grobem potrebno narediti naslednje:
      • v AIC_SMR17 vpišite primerno prioriteto, npr. 4. (0 – najnižja, 7 – najvišja). ID številka za TC0 je 17.
      • v AIC_SVR17 vpišite naslov vašega PSP.
      • z vpisom 1 v bit 17 AIC_IECR omogočite prekinitve za TC0.

3.    Napišite prekinitveni servisni program (PSP), ki šteje prekinitve in ko poteče pol sekunde, nastavi globalno spremenljivko MSEC_500 na 1. Pred izhodom iz PSP morate opraviti "slepo" pisanje v AIC_EOICR!

4.    Napišite podprogram ENABLE_IRQ, v katerem je potrebno pobrisati bit I v CPSR.

5.    Napišite glavni program, v katerem pokličete podprograme za ustrezne nastavitve: INIT_AIC, INIT_TCO_PSP, INIT_IO (za krmiljenje LED diode s signalom PC1 – 6. in 7. naloga), ENABLE IRQ. Nato naj glavni program čaka v neskončni zanki, da se vrednost globalne spremenljivke HALF_SEC spremeni na 1. Ko se to zgodi, naj glavni program spremenljivko MSEC_500 postavi na 0 in pokliče ustrezen podprogram, s katerim  preklopi LED diodo.

Skupna navodila:

Pri reševanju poskusite biti karseda samostojni. Glejte prosojnice in tovarniško listino.

Opomba: Preklapljanje diode bi sicer lahko v celoti opravili tudi v PSP, vendar je običajno koristno, da v prekinitvah postavljamo spremenljivke, ki nam označujejo pomembnejše časovne intervale. Tako potem lahko v glavnem programu opravljamo koristno delo, občasno pa v enakomernih časovnih intervalih sprožamo različna opravila (npr. branje senzorjev, pregled prejetih znakov, itd...). Pri rešitvi za STM32H7 pa uporabimo drugačen pristop in PSP v celoti sam šteje interval in ustrezno krmili LED diode.

Trenutno uporabljate gostujoči dostop (Prijavite se)
Pridobi mobilno aplikacijo
Stran poganja Moodle
Obvestilo o avtorskih pravicah