Fórum témák

» Több friss téma
Cikkek » Nulláról a robotokig - PIC Mikrovezérlők III rész
Nulláról a robotokig - PIC Mikrovezérlők III rész
Szerző: Topi, idő: Júl 13, 2007, Olvasva: 51473, Oldal olvasási idő: kb. 2 perc
Lapozás: OK   2 / 19

A megszakítások a processzor technológiának az alapja. Megszakításkor a processzor felhagy addigi tevékenységével, végrehajtja a megszakítást, majd onnan folytatja ahol abbahagyta. Azt, hogy hol hagyta abba, még tudja magától. De hogy mik voltak a regiszter értékek, már nem. C nyelv esetén nem kell törődnünk a regiszter lementésekkel, mert ezt megoldja a fordító, de Assemblyben sajnos nekünk kell elmenteni mindent.

Ilyen feltétlen elmentendő regiszterek a Work, Status és egyéb más, majdnem minden utasítás által használt regiszter.

Nézzük a megszakítás folyamatát, most egy Timerre vagyis időzítőre, ami mondjuk másodpercenként fut le. Vagyis minden másodpercben megszakad a program végrehajtás, meghívja a timert majd folytatja.

  1. Érkezik egy megszakítás kérelem (Lehet timer, lehet nyomógomb, stb)
  2. Beütemezi a megszakítást a processzor (Azt az egy parancsot amin épp dolgozott, még befejezi.
  3. Belép a megszakítás területre és átadja nekünk a feladatot
  4. Egy segéd regiszterbe elmentjük a következőket:
       - W regiszter (akku, work)
       - STATUS regiszter (benne a BANK, ZERO és egyéb más)
  5. Ha elmentettük, akkor megvizsgáljuk, hogy milyen megszakítás volt. Egyetlen egy megszakítás területe van a PIC-nek, de regiszterek jelzik, hogy most ki léptette be.
  6. Végrehajtjuk a megszakításkor végzendő utasításokat (Pl. óránál léptetjük a másodpercet)
  7. Töröljük a megszakítás jelző regisztert (ezzel tudatjuk a PIC-kel, hogy feldolgoztuk és lekezeltük az interruptot)
  8. Majd a végén visszatöltjük a STATUS-ba és a WORK-be azokat az értékeket, amik belépéskor benne voltak.
  9. Visszatérünk az interrupt területről.

A 4. és a 8. lépés nagyon fontos. Gondoljunk bele, hogy épp XOR-oltunk két számot, hogy megnézzük egyenlőek-e. XOR-olás végetért, és a STATUS regiszter Zero bitje 1-et, jelezve nekünk hogy tényleg egyenlőek. Igenám, de mielőtt a főprogramban megnézhetnénk, hogy Zero-e, még előtte esik be pont az interrupt és a másodperc növelgetéssel máris felülírtuk a STATUS regisztert, és mikor végre visszatértünk a programhoz és vizsgálnánk a STATUS-t, már rég nem az van benne...

Mint mondtam, a megszakítás a processzoroknál nagyon fontos szerepet tölt be. Először is, nagy terhet vesz le a "lábáról", mivel nem kell állandóan vizsgálni ("megnyomták-e a gombot"). Ezzel értékes processzor időt spórolunk meg.
Emlékeztek még az egér mozgatásra számítógép esetén mikor lefagyott? Mostmár ilyennel nem igen találkozni, mivel hatástalan a lefagyás ellen. Az azóta születettek kedvéért elmondom, hogy miért volt ez, és miért volt egyáltalán hatásos.

A CISC és RISC processzoroknál, főleg a régebbieknél maga a processzor is működhetett hibásan, nem csak az operációs rendszer. És néha bizony végtelen ciklusokra futott. Most is minden lefagyás végtelen ciklusok miatt van. Ha bekeveredtünk egy ilyenbe, akkor megmozdítottuk az egeret, küldünk a processzornak egy megszakítási kérelmet, felfüggesztette a végtelen ciklus "végrehajtását" lekezelte az egeret, és jóesetben élve tért vissza a folyamathoz. Mostani PC-knél még a régi szakik ugyanúgy rángatják a kurzort és nyomkodják a billentyűt ezernyi megszakítást előidézve, hátha visszatér az élet a processzorba, és nem veszik el több órai munkájuk

Nézzük először a legegyszerűbb interruptot (megszakítást) ami a PIC-nek az RB0/INT lábán van. Ez egy fel és lefutó élre triggerelhető hardveres megszakítási láb. De hogy mi is ez? Lapozz...


A cikk még nem ért véget, lapozz!
Következő: »»   2 / 19
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem