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