AVR IRQ
Szima Gábor
sygma at tesla.hu
Thu Apr 6 10:25:53 CEST 2006
On Thu, 6 Apr 2006, HWSW Famulus wrote:
> ...szerintem alapbol igy muxik, adatlap 14 oldal
> a rutin vegi RETI-ig a global int flag tiltva van...
Latom, a doksi szerint is igy megy:
"When an interrupt occurs, the Global Interrupt Enable I-bit is cleared
and all interrupts are disabled.
...
The I-bit is automatically set when a Return from Interrupt instruction
RETI is executed."
Csak en belefutottam ebbe a hibaba. Akkor a gcc IRQ kezelese kavarna
valamit?
"The user software can write logic one to the I-bit to enable nested
interrupts."
Most nezem, hogy tobbfele IRQ kezelese is van;
INTERRUPT
SIGNAL
ISR
Mind maskepp mukodik.
> Viszont megjegyzi ha keletkezik varakozo interrupt a rutin vegrehajtasa
> kozben.
Gondolom nem vegtelen szamban, csak nezi a visszatereskor, hogy az
Interrupt Flag be van-e billenve, vagy hasonlo.
> Az ilyen varakozo keletkezeset az adott INT tipusra sajtkezuleg kell
> letiltani
> a rutin legelejen egy CLI -vel.
> DE EKKOR AZ EL IS VESZIK OROKRE...
> azaz valoban nem is kell az az interrupt?
Nagyon nem kell, mivel emberi tavolsagokra (200..800 us) levo elvaltasok
idejet nezem. Ha gyorsabban jon a jel, mert mondjuk gerjed az azt meghajto
erosito/komparator, akkor az ugyis szemet, ki vele! :) A vedelem arra
kell, ha netan "pogozna" a bemeneten a jel, akkor ne vigye el a p-be
csoringer AVR-t.
Egyebkent hogy a legegyszerubb ezt neznem? Most az INT0 IRQ-t inditja az
elvaltas, onnan olvasom majd nullazom a TCNT1-et (16 bites timer), majd
atallitom az eldetektalast (felfuto/lefuto).
De ha van erre egyszerubb modszer...
-Sygma
More information about the Elektro
mailing list