<< Előző oldal Vissza a tartalomjegyzékhez Következő oldal >>
14.4. A párhuzamos slave port kezelése
Megszakításos kezelés
Kezelés jelzőbit figyeléssel
Adatsor gyors átvitele
A párhuzamos slave port kétféle programozási módszerrel működtethető:
ˇ
megszakításos kezelés esetén a főprogram csak a konkrét I/O műveletek végrehajtásakor szünetel, majd a megszakítás helyétől folytatódik;
ˇ
jelzőbit figyelés esetén a főprogram megfelelően sűrű időközönként ellenőrzi a párhuzamos slave port jelzőbitjeit és ezek állapota alapján kezdeményez különböző műveleteket. Ez a módszer kis adatforgalom esetén viszonylag nagy időhányadot foglal le, de nagyobb forgalom, illetve ismert elemszámú adathalmaz átvitele esetén gyorsabb működtetést tesz lehetővé, mint a megszakításos kezelés.
A feladatok többségénél azonban a két módszer kombinációja adja az optimális megoldást. Például: a mikroprocesszortól jövő első adat (parancsszó) megszakításos fogadása, majd az azt követő adatsor jelzőbit figyeléses gyors kiküldése.
Megszakításos kezelés:
A párhuzamos slave port megszakításos kezeléséhez a következő alapbeállításokat kell elvégezni:
ˇ
ha a vezérlő jeleket fogadó E port analóg bemenetként is felhasználható, akkor azt digitális I/O kivezetésként kell konfigurálni az ADCON1 regiszterben;
ˇ
az E port három kivezetését bemenetnek kell beállítani a TRISE regiszterben;
ˇ
a párhuzamos slave port működését engedélyezni kell a TRISE regiszterben elhelyezett PSPMODE vezérlő bit logikai "1" szintre állításával, ekkor a TRISD regiszter kiiktatódik és a D port adatirányát már a párhuzamos slave port külső vezérlő jelei határozzák meg;
ˇ
nullázni kell a TRISE regiszterben elhelyezett IBOV túlcsordulás-jelzőbitet;
ˇ
nullázni kell a PIRx regiszterben elhelyezett PSPIF megszakítás-jelzőbitet;
ˇ
a párhuzamos slave port megszakításkérését engedélyezni kell a PIEx regiszterben elhelyezett PSPIE engedélyező bit logikai "1" szintre állításával;
ˇ
a perifériák megszakításkérését engedélyezni kell az INTCON regiszterben elhelyezett PEIE engedélyező bit logikai "1" szintre állításával;
ˇ
a megszakításkéréseket globálisan is engedélyezni kell az INTCON regiszterben elhelyezett GIE engedélyező bit logikai "1" szintre állításával.
A mikroprocesszor/slave-mikrovezérlő kommunikáció kétféle módon kezdődhet:
ˇ
A mikroprocesszor parancsszavának bevitelével, amiből a mikrovezérlővel felépített periféria meghatározhatja mi a teendője (megtudhatja például, hogy adatkiolvasás fog következni, hogy melyik adatot kell biztosítania, hogy mennyi a kiolvasandó bájtok száma...).
ˇ
A slave-mikrovezérlő mikroprocesszor felé történő megszakításkérésével, vagyis a mikrovezérlővel felépített periféria jelzi a mikroprocesszornak, hogy a szükséges (előzőleg kért) adatok megvannak és készen állnak a kiolvasásra.
A mikroprocesszorból a mikrovezérlőbe történő adatbevitel menete a következő:
ˇ
a mikroprocesszor a vezérlő jelek segítségével, az előző fejezetnek megfelelően, beírja a 8-bites adatot a mikrovezérlő PORTD bemeneti regiszterébe;
ˇ
a PIRx regiszterben elhelyezett PSPIF megszakítás-jelzőbit logikai "1"-re áll be, aminek hatására, ha engedélyezett, létrejön egy megszakításkérés;
ˇ
végrehajtódik a megszakításkezelő-szubrutin, amelynek feladatai:
• a PIRx regiszterben elhelyezett PSPIF megszakítás-jelzőbit vizsgálatával megállapítani, hogy a párhuzamos slave porttól jött-e a megszakítás;
• a TRISE regiszterben elhelyezett IBF és OBF jelzőbitek vizsgálatával megállapítani, hogy milyen irányú adatátvitel történt;
• adatbevitel esetén megvizsgálni a TRISE regiszterben elhelyezett IBOV túlcsordulás-jelzőbit értékét, ha az "1", akkor adatvesztés történt, vagyis a mikroprocesszor egy vagy több, a PORTD bemeneti regiszterbe bevitt adatot még a PORTD regiszterből való kiolvasás előtt egy újabb adattal felülírt (Ilyen esetben hibaüzenetet, illetve újabb lekérést kell kiadni, majd az IBOV jelzőbitet nullázni!);
• a beérkezett adat kiolvasása a PORTD bemeneti regiszterből, aminek hatására az IBF jelzőbit automatikusan nullázódik;
• az adat értelmezése - a mikroprocesszortól jött parancs végrehajtása;
• a PIRx regiszterben elhelyezett PSPIF megszakítás-jelzőbit nullázása.
A mikrovezérlőből való adatkiolvasás a következőképpen megy végbe:
ˇ
a kiküldendő adatot a szoftver elhelyezi a PORTD kimeneti regiszterben, aminek hatására a TRISE regiszterben elhelyezett OBF jelzőbit automatikusan logikai "1"-re áll be, így jelzi, hogy egy kiolvasatlan adat van a regiszterben;
ˇ
a mikroprocesszor a vezérlő jelek segítségével, az előző fejezetnek megfelelően, kiolvassa a 8-bites adatot a PORTD kimeneti regiszterből, amelynek hatására automatikusan nullázódik az OBF jelzőbit, valamint a PIRx regiszterben elhelyezett PSPIF megszakítás-jelzőbit logikai "1"-re áll be, aminek hatására, ha engedélyezett, létrejön egy megszakításkérés;
ˇ
végrehajtódik a megszakításkezelő-szubrutin, amelynek feladatai:
• a PIRx regiszterben elhelyezett PSPIF megszakítás-jelzőbit vizsgálatával megállapítani, hogy a párhuzamos slave porttól jött-e a megszakítás;
• a TRISE regiszterben elhelyezett IBF és OBF jelzőbitek vizsgálatával megállapítani, hogy milyen irányú adatátvitel történt;
• hibátlanul végbement adatkiolvasás esetén szükség szerint betölteni a PORTD kimeneti regiszterbe a következő adatot;
• a PIRx regiszterben elhelyezett PSPIF megszakítás-jelzőbit nullázása.
A megszakításos kezelés beállításait mutatja be a következő programrészlet:
... ... b.f STATUS,5 ;az ADCON1 regiszter memórialapjának kiválasztása b.f STATUS,6 ;az ADCON1 regiszter memórialapjának kiválasztása movlw X ;az X konfigurációs érték megadása movwf ADCON1 ;a konfigurációs érték betöltése b.f STATUS,5 ;a TRISE regiszter memórialapjának kiválasztása b.f STATUS,6 ;a TRISE regiszter memórialapjának kiválasztása movlw b'00010111' ;a port bekapcsolása, mindhárom kivezetés bemenet movwf TRISE ;az E port konfiguráció betöltése bcf PIRx,PSPIF ;a port megszakítás jelzőbit nullázása bsf PIEx,PSPIE ;a port megszakítás engedélyezése bsf INTCON,PEIE ;a periféria megszakítások engedélyezése bsf INTCON,GIE ;a megszakítások globális engedélyezése ... ...
A beállítások után a párhuzamos slave port működésre kész és a mikroprocesszor bármilyen műveletvégzésére megszakításkérés generálódik. Egy lehetséges megszakításkezelő-szubrutin részletet mutat be a következő programtöredék:
... ISR ... ... b.f STATUS,5 ;a PIRx regiszter memórialapjának kiválasztása b.f STATUS,6 ;a PIRx regiszter memórialapjának kiválasztása btfss PIRx,PSPIF ;a port megszakítás jelzőbit vizsgálata goto TOVABB ;egyéb megszakításforrások vizsgálata b.f STATUS,5 ;a TRISE regiszter memórialapjának kiválasztása b.f STATUS,6 ;a TRISE regiszter memórialapjának kiválasztása btfsc TRISE,IBF ;A bejövő adat meglétének vizsgálata goto PSPBE ;IBF="1", bejövő adat a tárolóban goto PSPKI ;IBF="0", nem bevitel történt ... PSPBE b.f STATUS,5 ;a PORTD regiszter memórialapjának kiválasztása b.f STATUS,6 ;a PORTD regiszter memórialapjának kiválasztása movf PORTD,0 ;a beérkezett adat kiolvasása W-be movwf ADAT ;a beérkezett adat elmentése ... ... ;az adattól függő egyéb műveletek b.f STATUS,5 ;a PIRx regiszter memórialapjának kiválasztása b.f STATUS,6 ;a PIRx regiszter memórialapjának kiválasztása bcf PIRx,PSPIF ;a megszakítás jelzőbit nullázása retfie ;visszatérés a megszakításkezelésből ... PSPKI b.f STATUS,5 ;a TRISE regiszter memórialapjának kiválasztása b.f STATUS,6 ;a TRISE regiszter memórialapjának kiválasztása btfsc TRISE,OBF ;az OBF jelzőbit vizsgálata goto HIBA ;az IBF és OBF jelzőbitek állapota ellentmondásos b.f STATUS,5 ;az ADAT2 regiszter memórialapjának kiválasztása b.f STATUS,6 ;az ADAT2 regiszter memórialapjának kiválasztása movf ADAT2 ;a következő kiküldendő adat átírása W-be b.f STATUS,5 ;a PORTD regiszter memórialapjának kiválasztása b.f STATUS,6 ;a PORTD regiszter memórialapjának kiválasztása movwf PORTD ;a következő kiküldendő adat betöltése ... ... ;egyéb műveletek b.f STATUS,5 ;a PIRx regiszter memórialapjának kiválasztása b.f STATUS,6 ;a PIRx regiszter memórialapjának kiválasztása bcf PIRx,PSPIF ;a megszakítás jelzőbit nullázása retfie ;visszatérés a megszakításkezelésből ...
Jelzőbit figyelés:
Jelzőbit figyeléses módszer esetében nincs szükség különleges konfigurációs eljárásokra, csupán a párhuzamos slave port alapbeállításait kell elvégezni:
ˇ
ha a vezérlő jeleket fogadó E port analóg bemenetként is felhasználható, akkor azt digitális I/O kivezetésként kell konfigurálni az ADCON1 regiszterben;
ˇ
az E port három kivezetését bemenetnek kell beállítani a TRISE regiszterben;
ˇ
a párhuzamos slave port működését engedélyezni kell a TRISE regiszterben elhelyezett PSPMODE vezérlő bit logikai "1" szintre állításával, ekkor a TRISD regiszter kiiktatódik és a D port adatirányát már a párhuzamos slave port külső vezérlő jelei határozzák meg;
ˇ
nullázni kell a TRISE regiszterben elhelyezett IBOV túlcsordulás-jelzőbitet;
ˇ
a párhuzamos slave port megszakításkérését le kell tiltani a PIEx regiszterben elhelyezett PSPIE engedélyező bit logikai "0" szintre állításával.
A mikroprocesszorból a mikrovezérlőbe történő adatbevitel menete a következő:
ˇ
a mikroprocesszor a vezérlő jelek segítségével, az előző fejezetnek megfelelően, beírja a 8-bites adatot a mikrovezérlő PORTD bemeneti regiszterébe;
•
a TRISE regiszterben elhelyezett IBF jelzőbit folyamatos vizsgálatával (figyelésével) lehet megállapítani, hogy a bevitel megtörtént-e;
ˇ
adatbevitel észlelése esetén meg kell vizsgálni a TRISE regiszterben elhelyezett IBOV túlcsordulás-jelzőbit értékét, ha az "1", akkor adatvesztés történt, vagyis a mikroprocesszor egy vagy több, a PORTD bemeneti regiszterbe bevitt adatot még a PORTD regiszterből való kiolvasás előtt egy újabb adattal felülírt (Ilyen esetben hibaüzenetet, illetve újabb lekérést kell kiadni, majd az IBOV jelzőbitet nullázni!);
ˇ
a beérkezett adat kiolvasása a PORTD bemeneti regiszterből, aminek hatására az IBF jelzőbit automatikusan nullázódik;
ˇ
az adat értelmezése - a mikroprocesszortól jött parancs végrehajtása.
A mikrovezérlőből való adatkiolvasás a következőképpen megy végbe:
ˇ
a kiküldendő adatot a szoftver elhelyezi a PORTD kimeneti regiszterben, aminek hatására a TRISE regiszterben elhelyezett OBF jelzőbit automatikusan logikai "1"-re áll be, így jelzi, hogy egy kiolvasatlan adat van a regiszterben;
ˇ
a mikroprocesszor a vezérlő jelek segítségével, az előző fejezetnek megfelelően, kiolvassa a 8-bites adatot a PORTD kimeneti regiszterből, amelynek hatására automatikusan nullázódik az OBF jelzőbit;
ˇ
a TRISE regiszterben elhelyezett OBF jelzőbit folyamatos vizsgálatával (figyelésével) lehet megállapítani, hogy a kiolvasás megtörtént-e;
ˇ
a kiolvasás megtörténte után a következő adat betöltése a PORTD kimeneti regiszterbe, aminek hatására a TRISE regiszterben elhelyezett OBF jelzőbit ismét logikai "1"-re áll be...
Adatsor gyors átvitele:
A következő folyamatábra egy, az adatmemóriában folyamatosan elhelyezett adatsor gyors átvitelét mutatja be jelzőbit figyeléses módszerrel.
14.4-1. Ábra
A folyamatábrát, illetve az adatsor kiküldését (a KEZDET-től a VEGE címig) megvalósító programrészlet:
... ... movlw KEZDET-1 ;W = a kezdőcímnél eggyel kisebb érték movwf FSR ;az adatmemória indirekt címzése LOAD incf FSR,1 ;az indirekt cím növelése movf INDF ;W = az indirekt címzett adat movwf PORTD ;az adat betöltése a PORTD regiszterbe WAIT btfsc TRISE,OBF ;a kiolvasottság vizsgálata goto WAIT ;ha OBF="1", akkor tovább vár movlw VEGE ;W = végcím subwf FSR,0 ;W = FSR - W (egyenlőség vizsgálat) btfss STATUS,Z ;a zérusjelző bit vizsgálata goto LOAD ;ha FSR < végcím, visszalép ... ;ha FSR = végcím, itt folyatatódik ...
Tudomány és Technika (test@t-es-t.hu)
<< Előző oldal Vissza a tartalomjegyzékhez Vissza a lap tetejére Következő oldal >>