Sunteți pe pagina 1din 18

MICROCONTROLERE

Laboratorul nr. 3
Întreruperi şi evenimente

Întreruperile şi evenimentele se aplică pentru întreaga familie STM32F4xx, cu excepţia


cazului în care se prevede altfel.
1. Controller de întreruperi cu vectori imbricaţi (Nested vectored interrupt controller -
NVIC)
1.1 Caracteristici NVIC
NVIC are următoarele caracteristici:
 82 canale de întreruperi mascabile pentru STM32F405xx/07xx şi STM32F415xx/17xx, şi
până la 91 de canale de întreruperi mascabile pentru STM32F42xxx şi STM32F43xxx
(nu sunt incluse cele 16 linii de întreruperi a lui Cortex™-M4 cu FPU- Floating Point
Unit),
 16 nivele de prioritate programabile (sunt folosiţi 4 biți pentru întreruperile cu prioritate),
 excepţii cu latenţă scăzută şi întreruperi de manipulare,
 control al gestiunii de putere,
 implementarea registrelor de control ale sistemului.

NVIC şi interfaţa procesorului de bază sunt strâns cuplate, asta permiţând procesarea
întreruperilor la latenţă scăzută şi eficienţă în procesarea întreruperilor întârziate.
Toate întreruperile ce conţin excepţii de bază sunt gestionate de NVIC. Pentru a afla mai
multe informaţii despre excepţii şi programarea NVIC, consultați manualul de pe pagina
didactică, www.eed.usv.ro/~cristinag .

1.2 Registrul valorilor de calibrare SysTick


Valoarea de calibrare SysTick este fixată la 18750, care are ca referinţă baza de timp de
1ms cu ceasul SysTick setat la 18,75MHz (HCLK/8, cu HLCK setat la 150MHz).
1.3 Întreruperile şi vectorii de excepţie
A se vedea Tabelul 1 şi Tabelul 1 (continuarea) pentru tabelul cu vectori ale dispozitivelor
STM32F405xx/07xx şi STM32F415xx/17xx şi STM32F42xxx şi STM32F43xxx.

2 Întreruperi externe/controller de evenimente (External interrupt-event controller -


EXTI)

EXTI constă din maxim 23 de detectoare de margine care generează evenimente/cereri de


întreruperi. Fiecare linie de intrare poate fi configurată independent pentru a selecta tipul

Întreruperi şi evenimente
(întrerupere sau eveniment) şi evenimentul său declanşator (crescător sau descrescător sau
amândouă). Fiecare linie poate fi de asemenea mascabilă independent. Un registru de aşteptare
menţine linia de stare a cererilor de întreruperi.

Tabel 1. Tabelul vectorilor pentru STM32F405xx/07xx şi STM32f415xx/17xx

Întreruperi şi evenimente
Tabel 1. Tabelul vectorilor pentru STM32F405xx/07xx şi STM32f415xx/17xx (continuarea)

Întreruperi şi evenimente
Tabel 1. Tabelul vectorilor pentru STM32F405xx/07xx şi STM32f415xx/17xx (continuarea)

Întreruperi şi evenimente
Tabel 1. Tabelul vectorilor pentru STM32F405xx/07xx şi STM32f415xx/17xx (continuarea)

Tabel 2. Tabela cu vectori pentru STM32F42xxx şi STM32F43xx

Întreruperi şi evenimente
Tabel 2. Tabela cu vectori pentru STM32F42xxx şi STM32F43xx (continuare)

Întreruperi şi evenimente
Tabel 2. Tabela cu vectori pentru STM32F42xxx şi STM32F43xx (continuare)

Întreruperi şi evenimente
Tabel 2. Tabela cu vectori pentru STM32F42xxx şi STM32F43xx (continuare)

Întreruperi şi evenimente
Tabel 2. Tabela cu vectori pentru STM32F42xxx şi STM32F43xx (continuare)

2.1 Caracteristici principale EXTI


Principalele caracteristici ale controller-ului EXTI sunt următoarele:
 declanşator independent şi mască pe fiecare linie de întrerupere/eveniment
 bit de stare dedicat pentru fiecare linie de întrerupere
 până la 23 de generaţii de software pentru cereri de evenimente/întreruperi
 detectarea de semnale externe cu un puls de lăţime mai mică decât perioada ceasului
APB2.

Întreruperi şi evenimente
2.2 Diagrama bloc EXTI
Figura 1 arată diagrama bloc.

Figura 1. Diagrama bloc EXTI (External interrupt/event controller)

2.3 Wake-up event management


Plăcile STM32F4xx se ocupă de evenimente externe şi interne pentru a trezi centrul de bază
(WFE). Evenimentul de trezire poate fi generat de asemenea:
 permiţănd o întrerupere în registrul de control periferic dar nu în NVIC, şi permiţând
bitul SEVONPEND în Cortex™-M4 cu registrul de control al sistemului FPU. Când
MCU reia din WFE, bitul de aşteptare a întreruperilor periferice şi bitul de aşteptare al
canalului periferic NVIC IRQ trebuie să fie eliminate.
 sau configurând o linie EXTI externă sau internă în modul eveniment. Când CPU reia
din WFE, nu este posibilă ştergerea bitului de aşteptare a întreruperilor periferice sau cel
al canalului periferic NVIC IRQ din cauză că bitul de aşteptare al evenimentului nu este
setat.

Întreruperi şi evenimente
Pentru a folosi o linie externă ca eveniment de trezire, se consultă următorul subcapitol (2.4.
Descrierea funcţională).

2.4 Descrierea funcţională


Pentru a genera o întrerupere, linia de întrerupere trebuie să fie configurată şi abilitată. Acest
lucru se face programând cei doi regiştrii de declanşare cu detectarea de margine dorit şi
abilitând cererea de întrerupere scriind ‘1’ la bitul corespundent în registrul mascabil de
întrerupere. Când marginea selectată apare pe linia de întrerupere externă, se generează o cerere
de întrerupere. Bitul de aşteptare ce corespunde liniei de întrerupere este şi ea setată. Această
cerere este resetată scriind ‘1’ în registrul de aşteptare.

Pentru a genera evenimentul, linia de eveniment trebuie să fie configurată şi abilitată. Acest lucru
se face programând cei doi regiştrii de declanşare cu detectarea de margine dorită şi abilitând
cererea de întrerupere scriind ‘1’ la bitul corespundent în registrul mascabil de întrerupere.
Atunci când marginea selectată apare pe linia de întrerupere externă, se generează un puls de
eveniment. Bitul de aşteptare ce corespunde liniei evenimentului nu este setat.

O cerere de întrerupere/eveniment poate fi de asemenea generată de software scriind un ‘1’ în


registrul de întrerupere/eveniment al soft-ului.

2.5 Selecţia întreruperii hardware


Pentru a configura cele 23 de linii ca surse de întrerupere, se utilizează următoarea procedură:
 Se configurează biţii mască al celor 23 de linii de întrerupere (EXTI_IMR)
 Se configurează biţii de selecţie de declanşare (Trigger selection bits) a liniilor de
întrerupere (EXTI_RTSR şi EXTI_FTSR)
 Se configurează biţii de abilitare şi cei mască care controlează canalul NVIC IRQ mapat
la controller-ul de întreruperi externe (EXTI), astfel încât întreruperile ce vin din una din
cele 23 de linii să fie recunoscute în mod corect.

2.6 Selecţia evenimentelor hardware


Pentru a configura cele 23 de linii ca surse eveniment, se utilizează următoarea procedură:
 Se configurează biţii mască al celor 23 de linii de eveniment (EXTI_EMR)
 Se configurează biţii de selecţie de declanşare (Trigger selection bits) a liniilor de
evenimente (EXTI_RTSR şi EXTI_FTSR)

2.7 Selecţia întreruperilor/evenimentelor software


Cele 23 de linii pot fi configurate ca linii de întrerupere/evenimente software. Mai jos este
procedura pentru generarea întreruperilor software:
 Se configurează biţii mască al celor 23 de linii de întrerupere/eveniment (EXTI_IMR,
EXTI_EMR)
 Se setează bitul necesar în registrul de întreruperi software (EXTI_SWIER).

Întreruperi şi evenimente
2.8 Maparea liniilor de întreruperi/evenimente externe
Până la 140 GPIO-uri (STM32F40xx/07xx ŞI STM32F415xx/17xx), 168 GPIO-uri
(STM32F41xxx şi STM32F43xxx) sunt conectate la cele 16 linii de întreruperi/evenimente
externe în acest mod:
Fig. 2 Maparea GPIO a întreruperilor/evenimentelor externe (STM32F405xx/07XX şi
STM32F415xx/17xx)

Întreruperi şi evenimente
Fig. 3 Maparea GPIO a întreruperilor/evenimentelor externe (STM32F42xx şi
STM32F43xxx)

Celelalte 7 linii EXTI sunt conectate astfel:


 linia 16 EXTI este conectată la PVD output,
 linia 17 EXTI este conectată la evenimentul RTC Alarm,
 linia 18 EXTI este conectată la evenimentul USB OTG FS Wakeup,
 linia 19 EXTI este conectată la evenimentul Ethernet Wakeup,
 linia 20 EXTI este conectată la evenimentul USB OTG HS (configurat în FS) Wakeup,
 linia 21 EXTI este conectată la evenimentele RTC Tamper şi TimeStamp,
 linia 22 EXTI este conectată la evenimentul RTC Wakeup.

Întreruperi şi evenimente
3 Regiştrii EXTI
A se consulta capitolul 4 pentru a se vedea lista de abrevieri folosite în descrierea regiştrilor.

3.1 Interrupt mask register (EXTI_IMR)


Adresa de offset: 0x00
Valoarea de reset: 0x0000 0000

Biţii 31:23 Rezervaţi, trebuie păstraţi la valoarea de resetare.


Biţii 22:0 MRx: Întrerupere mascabilă la linia x:
0: Cererea de întrerupere de la linia x este mascabilă
1: Cererea de întrerupere de la linia x nu este mascabilă

3.2 Event mask register (EXTI_EMR)


Adresa de offset: 0x04
Valoarea de reset: 0x0000 0000

Biţii 31:23 Rezervaţi, trebuie păstraţi la valoarea de resetare.


Biţii 22:0 MRx: Întrerupere mascabilă la linia x:
0: Cererea de întrerupere de la linia x este mascabilă
1: Cererea de întrerupere de la linia x nu este mascabilă

3.3 Rising trigger selection register (EXTI_RTSR)


Adresa de offset: 0x08
Valoarea de reset: 0x0000 0000

Întreruperi şi evenimente
Biţii 31:23 Rezervaţi, trebuie păstraţi la valoarea de resetare.
Biţii 22:0 TRx: Bitul de configurare a Rising trigger event al liniei x
0: Rising trigger dezactivat (pentru Event şi Interrupt) pentru linia de input
1: Rising trigger activat (pentru Event şi Interrupt) pentru linia de input.
Notă: Liniile de trezire externe sunt margini de declanşare, nu trebuie să se creeze nici o
problemă tehnică cu aceste linii. Dacă apare o margine crescătoare pe linia de întrerupere
externă în timpul scrierii în registrul EXTI_RTSR, trebuie setat bitul de aşteptare.

Rising şi Falling edge trigger pot fi setate pentru aceeaşi linie de întrerupere. În acest fel,
amândouă generează o condiţie de declanşare.

3.4 Falling trigger selection register (EXTI_FTSR)


Adresa de offset: 0x0C
Valoarea de reset: 0x0000 0000

Biţii 31:23 Rezervaţi, trebuie păstraţi la valoarea de resetare


Biţii 22:0 TRx: Bitul de configurare a Falling trigger event a liniei x
0: Falling trigger dezactivat (pentru Event şi Interrupt) pentru linia de input
1: Falling trigger activat (pentru Event şi Interrupt) pentru linia de input.

Notă: Liniile de trezire externe sunt margine de declanşare, nu trebuie să se creeze nici o
problemă tehnică cu aceste linii. Dacă apare o margine descrescătoare pe linia de întrerupere
externă în timpul scrierii în registrul EXTI_FTSR, bitul de aşteptare nu este setat.

Rising şi Falling edge trigger pot fi setate pentru aceeaşi linie de întrerupere. În acest fel,
amândouă generează o condiţie de declanşare.

3. 5 Software interrupt event register (EXTI_SWIER)


Adresa de offset: 0x10
Valoarea de reset: 0x0000 0000

Întreruperi şi evenimente
Biţii 31:23 Rezervaţi, trebuie păstraţi la valoarea de resetare
Biţii 22:0 SWIERx: Întrerupere software la linia x.
Dacă întreruperea este activată la linia x în registrul EXTI_IMR, scrierea '1' pe
bitul SWIERx când el este setat la '0' va seta bitul corespondent de aşteptare în
registrul EXTI_PR, ducând astfel la generarea unei cereri de întrerupere.
Acest bit este şters eliminând bitul corespundent în registrul EXTI_PR (scriind un
1 pe acel bit).

3.6 Pending register (EXTI_PR)


Adresa de offset: 0x14
Valoarea de reset: nedefinit

Biţii 31:23 Rezervaţi, trebuie păstraţi la valoarea de resetare


Biţii 22:0 PRx: Pending bit
0: nu a avut loc nici o cerere de trigger/declanşare
1: cerere de declanşare selectat apărut
Acest bit este setat când evenimentul de margine selectat apare pe linia de
întrerupere externă.
Acest bit se elimină programâdu-l la '1'.

Întreruperi şi evenimente
3.7 EXTI register map
În Tabelul 4 se poate vedea registrul de mapare EXTI şi valorile de reset.

Tabel 4. External interrupt/event controller register și valorile de reset

Întreruperi şi evenimente
4. Lista abrevierilor pentru regiştri

Următoarele abrevieri sunt folosite în descrierea regiştrilor:

read/write (rw): Software poate citi şi scrie aceşti biţi


read-only (r): Software poate doar să citească aceşti biţi.
write-only (w): Software poate doar să scrie pe aceşti biţi. Citirea bitului întoarce valoarea
de reset.
read-clear (rc_w1): Software poate citi şi şterge acest bit scriind 1. Scrierea '0' nu are efect la
valoarea bitului.
read-clear (rc_w0): Software poate citi şi şterge acest bit scriind 0. Scrierea '1' nu are efect la
valoarea bitului.
read/clear by read (rc_r): Software poate citi acest bit. Citind acest bit, automat se şterge la '0'.
Scrierea '0' nu are efect la valoarea bitului.
read/set (rs): Software poate citi şi seta acest bit. Scrierea '0' nu are efect la valoarea
bitului.
read-only write trigger (rt_w): Software poate citi acest bit. Scrierea '0' sau '1' va declanşa un
eveniment dar nu are efect la valoarea bitului.
toggle (t): Software poate doar comuta acest bit scriind '1'. Scrierea '0' nu are efect.
Reserved (Res): Bit rezervat, trebuie păstrat la valoarea de resetare.

TEMĂ
1. Se vor identifica pinii de port la care sunt conectate tasta de intrerupere şi LED-urile.
2. Se va modifica programul anterior (Blinky) pentru a pune în evidenţă funcţionarea
porturilor I/O utilizând LED-urile şi tasta (se va consulta libraria General purpose input
output (GPIO) și EXTI).
3. Se va modifica programul Blinky sau GPIO pentru a pune în evidenţă funcţionarea
porturilor I/O utilizând LED-urile şi tasta de intrerupere (se va consulta libraria pentru
EXTI)).
4. Se va scrie un program care să aprindă circular câte un LED într-un sens. Dacă se apasă
tasta interrupt button își va schimba direcția de aprindere a LED-urilor în sens opus.
5. După testarea programelor pe simulator se va face testarea reală pe placa de evaluare
STM32F407 Discovery.
Notă

Se vor pune sub tensiune echipamentele numai cu acordul cadrului didactic îndrumător.

Întreruperi şi evenimente

S-ar putea să vă placă și