Politehica din Bucuresti proiect de diplomă Facultatea transporturi


Manipularea întreruperilor şi resetărilor



Yüklə 1,46 Mb.
səhifə13/104
tarix09.01.2022
ölçüsü1,46 Mb.
#91958
1   ...   9   10   11   12   13   14   15   16   ...   104
1.2.7 Manipularea întreruperilor şi resetărilor

AVR furnizează mai multe tipuri de întreruperi. Aceste întreruperi şi vectorul de resetare au câte un vector de proram fiecare aflat în spaţiul memoriei de program. Tuturor întreruperilor le sunt alocate individual biţi care trebuiesc scrişi logic o dată cu bitul GIE în starea registrului în scopul de permite întreruperea. În funcţie de starea în care se află Program Counter-ul, întreruperile pot fi invalidate, atunci când BLB 02 sau BLB12 sunt programate .Această rubrică îmbunatăţeşte securitatea.

Cele mai joase adrese din memoria de program sunt definite ca vectori de resetare şi întrerupere. În funcţie de listă se determină şi nivelurile de prioritate ale diferitelor întreruperi .Cu cât intreruperea are nivelul mai jos cu atât prioritatea este mai mare. RESET are cea mai mare prioritate, iar după aceasta este INTO-cererea de întrerupere externa 0. Vectori de întrerupere pot fi mutaţi la începutul secţiunii Boot Flash prin setarea bitului IVSEL din registrul global de control al întreruperilor (GICR). Vectorul de RESET poate fi deasemenea mutat la începutul aceleiaşi sectiuni prin programarea BOOTRST.

Când se întampla o întrerupere GIE bitul I este şters şi toate întreruperile sunt invalidate. Utilizatorul de software poate scrie 1 logic în bitul I pentru a permite executarea întreruperilor. Toate întreruperile permise pot, la randul lor, întrerupe întreruperile de rutina. Bitul I este automat corectat când RETI este executat.

Sunt practic două tipuri de întreruperi . Primul tip este declanşat (dat) de evenimentele care setează indicatorul de întrerupere. Pentru aceste întreruperi Program Counter-ul este trimis la vectori de întrerupere în scopul executări întreruperi de rutină şi hardware-ul sterge indicatorul de întrerupere corespunzator. Indicatorul de întrerupere poate fi şters şi prin scrierea 1 logic. Dacă se întampla o întrerupere în timpul în care bitul care permite întreruperea este şters, atunci indicatorul de întrerupere va fi setat să retină întreruperea pană când aceasta va putea fi permisă , sau indicatorul este şters de software. În caz similar se procedează atunci cand este vorba de ştergerea indicatorului GIE (Global Interrupt Enable) .

Cel de-al doilea tip de întreruperi este dat atâta timp cât condiţia de întrerupere este prezentă. Aceste întreruperi nu au neapărat indicator de întrerupere. Daca condiţia de întrerupere dispare înainte ca întreruperea să fie permisă, întreruperea nu va mai fi executată.

Cand AVR iese dintr-o întrerupere se intoarce la programul principal şi mai execută o data instrucţiunile înainte de a interveni alta întrerupere.

Starea registrului nu este automat stocat cand apare o întrerupere de rutină, nici cand revine din întreruperea de rutină. Acesta trebuie susţinut de software.

Când se foloseşte instrucţiunea CLI pentru invalidarea întreruperilor, întreruperea va fi invalidată imediat. Nici o întrerupere nu va mai fi executată după acţionarea instrucţiuni CLI, chiar dacă se întamplă simultan cu instrucţiunea CLI. În exemplu următor se arată cum aceasta poate fi folosită pentru evitarea întreruperilor în timpul scrieri memoriei EEPROM.

Când se foloseşte instrucţiunea SEI pentru a permite întreruperi, instrucţiunea SEI este rulată înaintea oricarei instrucţiuni aflate în asteptare, aşa cum se arată în exemplu.




Yüklə 1,46 Mb.

Dostları ilə paylaş:
1   ...   9   10   11   12   13   14   15   16   ...   104




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin