Prerušenie u PIC16Fxxx

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
relatko
Příspěvky: 85
Registrován: 08 úno 2009, 00:00

Prerušenie u PIC16Fxxx

#1 Příspěvek od relatko »

Zdravím.
Chcem sa opýtať ako to je u PIC 16Fxxx keď počas výkonu prerušenia
napríklad od pinov RB7/4 dôjde k pretečeniu TMR0 a v reg.INTCON je povolené aj prerušenie od TMR0 aj od zmeny na pinoch RB7/4.
Potrebujem vedieť či je požiadavka na prerušenie od TMR0 odignorovaná alebo či bude spracovaná po ukončení toho prerušenia ktoré "prišlo skôr na rad".Prípadne či je možné niekde nastaviť priority vo výkone rozličných prerušení.
Vopred ďakujem.Relatko.
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#2 Příspěvek od Chenzee »

Pokud už je přerušení vykonáváno, GIE je zakázano a tedy nové přerušení není možné vyvolat. Nastaví se pouze příznak a pokud ho během vykonávání nezrušíš, po instrukci retfie (kdy se automaticky povoluje GIE) ihned vyvolá přerušení další. Tedy záleží, jak máš napsaný program a dle toho se buďto v obsluze přerušení vykoná to jedno jediné a po návratu druhé nebo se můžou vykonat všechny, které nestaly. Priorita se dá nastavit dle mého pouze tím, jaké přerušení budeš testovat jako první, druhé, třetí, ... . (pořadí testování příznaků přerušení). Jiná priorita se nastavit nedá, to prostě nelze, protože by byla velká náhoda, kdyby se vyvolalo několik (nebo jen dvě) přerušení ve stejný okamžik (mluvíme většinou o us). A udělat přerušení v přerušení PIC neumí (pokud se nepletu). Jo vlastně kdybys ručně povolil GIE. Ale to nevím, zda by program poté neskolaboval. :idea:
Uživatelský avatar
Hula
Příspěvky: 47
Registrován: 01 dub 2008, 00:00
Kontaktovat uživatele:

#3 Příspěvek od Hula »

Priority nezle nastavit, jedine si je sam naprogramovat.
A myslim ze PIC16FXX automaticky pri preruseni automaticky zakazuje dalsi. Na konci obsluhy vzdy musis povolit GIE.
Uživatelský avatar
relatko
Příspěvky: 85
Registrován: 08 úno 2009, 00:00

#4 Příspěvek od relatko »

Zdravím.
Ďakujem za odpovede,pozliepal nasledovný testovací program.Pozrete sa naň prosím či by to mohlo fungovať.Som trochu zaskočený tým že po skončení obluhy druhého prerušenia ,sa dvakrát po sebe obnovujú registe zálohované na začiatku prerušenia.Keď sa obnovujú prvý krát,tak vďaka inštrukcii swapf sa zmení obsah W_save a pri druhom obnovení reg.ho takýto zmenený načíta do W reg.Program pokračuje na šťastie tam kde skončil v maine po vyvolaní prvého prerušenia.Tento stav sa udeje samozrejme len vtedy,keď počas jedného prerušenia príde požiadavka aj na druhé.Prioritu má prerušenie od TMR0
pred prer.od RB0.Platí to len dovtedy,kým nepríde na :
PRERUS BTFSC INTCON,2 ; bolo prerušenie od TMR0 ???
GOTO PRER01 ; bolo od TMR0 !!!
BTFSC INTCON,1 ; bolo prerušenie od RB0 ???
GOTO PRERO ;áno bolo od RB0 !!!
GOTO PRERKON ; nezname = nic

selekciu prirít.Pokiaľ aj príde požiadavka na prer.od TMR0 počas výkonu
obsluhy prer. od RB0,musí si počkať na ukončenie obsluhy vykonávaného prer.od RB0 a až po jej ukončení pokračuje obsluhou prer.od TMR0
Budem rád za prípadné rady ,ako vylepšiť tento program ako aj za vysvetlenie toho pre mńa záhadného dvojnásobného obnovovania reg. na konci prerušenia.
Relatko.
Přílohy
prerusenie.asm
(2.3 KiB) Staženo 126 x
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#5 Příspěvek od Chenzee »

Tímto řádkem "PRERKON BSF INTCON,7;povolenie všetkých prerusení " povolíš přerušení a pokud se ti vykoná před dokončením prvního přerušení druhé, program se sice neztratí ale přepíše ti hodnoty před prvním přerušením a tím po odeznění všech přerušení nebude program pracovat správně (samozřejmě pokud je main 9x nop, tak není co řešit, ale to není standardní program, že?!). SWAP instrukce se používá proto, že jako jedna z mála nenastavuje Z,C,CD ve STATUSU a tedy nezmění se ti jeho obsah při nahrávání původního obsahu W. (např. výběr banky) při ukončování přerušení. PRERKON BSF INTCON,7 vynech, to je obsaženo v příkazu RETFIE, protože tím je zajištěno, že se nejprve vrátí obsah pracovních registrů, které zálohuješ a pak povol GIE.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“