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