Preruseni INT0 u PIC18
RV
vicek.radek@cpost.cz
Pátek Srpen 24 11:16:18 CEST 2007
Aha jasne tohle chapu, omlouvam se, nedoslo mi jak je polozen puvodni
dotaz - tedy nedoslo mi, ze je tam jedno dulezite slovicko, ze je
preruseni LOKALNE zakazane a presto se zpracuje v int rutine.
Proto mi nebylo jasne v cem je problem a to ze to tazatel testuje v
preruseni ma jen kvuli tomu, ze mu to dela nejake problemy a tak to
radeji zpracuje.
Nicmene popsal jste to dokonale a urcite to pomuze nekomu az to tu bude
nekdo priste hledat. Urcite jste to nepsal zbytecne.
Radek Vicek
Lukas Grepl napsal(a):
>> A proc se nastavuje INTOIF? Proc je to normalni?
>
> No protoze se ten flag (a to plati obecne pro vsechny interrupt flagy)
> nastavuje vzdy, kdyz dojde k prislusne udalosti - v tomto pripade zmene
> napeti na pinu nebo u jineho k preteceni casovace ci k prijeti znaku na
> seriovem portu atd.
>
> Pokud ale neni prislusne preruseni povoleno (INT0IE atd.) nebo jsou
> preruseni zakazana globalne (GIEL/GIEH resp. PEIE/GIE), tak je tim
> prisluny flag vymaskovan a preruseni se nevyvola. Ale to maskovani
> preruseni nema zadny vliv na hodnotu flagu jako takoveho. Ten se nastavi
> pri vyvolani prislusne udalosti vzdy.
>
> Proto je mj. vetsinou vhodne/nutne pred povolenim urciteho preruseni
> nejprve vymazat jeho flag, protoze casto neni zadouci, aby se vyvolalo
> ono preruseni diky udalosti, ktera nastala nekdy drive - cekame na
> nejakou novou.
>
> Dale je u vetsiny preruseni mozne, coz se nekdy hodi, vyvolat preruseni
> softwarove nastavenim prisluneho flagu (vyvola se samozrejme jen tehdy,
> neni li maskovano).
>
> Cely mechanizmus vyvolani preruseni je dobre patrny na obr. 8-1, str. 4
> http://ww1.microchip.com/downloads/en/DeviceDoc/31008a.pdf. Ten manual
> je pro PIC16, tam je to prehledejsi (a family reference manual pro PIC18
> jsem nevim proc nenasel). U PIC18 je to jeste navic okoreneno rozdelenim
> do dvou urovni, viz. napr. obr. 9-1, str. 94(pdf)
> http://ww1.microchip.com/downloads/en/DeviceDoc/39631D.pdf.
>
> V a v onom kousku kodu z prerusovaci rutiny by melo obecne byt:
>
> void interrupt isr()
> {
> if (TMR1IF && TMR1IE) // napr. ...
> {
> // ...
> }
>
> if (INT0IF && INT0IE)
> {
> // ...
> }
> }
>
> Ve specialnich pripadech, tzn. zejmena tehdy, kdyz jednotliva preruseni
> nezakazujete a nepovolujete dynamicky za behu programu, tak to neni
> nutne, stejne tak kdyz pouzivate jenom jedno preruseni (pak je tam ta
> podminka vicemene uplne zbytecna, ale stejne ji tam ze zvyku pisu).
>
> Lukas Grepl
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
Další informace o konferenci Hw-list