Dokładne pomiary czasu z przerwaniami w AVR: INT0 i T0 w praktyce
Przerwania w AVR
From: "Kicak" <wzr7696_at_nospam_zeus.polsl.gliwice.pl>
Subject: Przerwania w AVR
Date: Wed, 2 May 2001 09:37:11 +0200
   
Mam pare pytan dotyczacych przerwan w uC AVR   
Jak wiadomo podczas zgloszenia przerwania kasowany jest znacznik zezwolenia   
na przerwania globalne (I) w rejestrze znacznikow (SREG) (czyli zostają   
zablokowane inne przerwania).   
Zalozmy ze zostaje zgloszone przerwanie z licznika T0.   
Czas wykonywania podprogramu obslogi przerwania niech wynosi 500 taktow   
zegarowych. Jezeli podczas wykonywania podprogramu obslogi przerwan zostanie   
wygenerowane inne przerwanie np. z INT0 (czyli o wyzszym priorytecie niz z   
licznika T0) to zostanie wykonane natychmiast czyli zostaje przerwny   
podprogram obslogi przerwania z T0 i wykonywany zostaje podprogram obslogi   
przerwania z INT0 badz jest kontynulowany podprogram obslogi przerwania z T0   
a dopiero po napotkaniu rozkazu RETI wykonany zostanie podprogram obslogi   
INT0.   
A teraz moze troche jasniej o co mi chodzi.   
Problem polega na tym ze zalezy mi na dokladnym odmierzeniu czasu pomiedzy   
wystąpieniem narastajacych zboczy na wejsciu INT0 (sygnal o czestotliwosci   
ok 4kHz ). Realizuje to po przez licznik 16bit T1. Kazde przerwanie powoduje   
wykonanie podprogramu w ktorym odczytany jest stanu licznika, zapamietanie   
wyniku w SRAM (przepraszam za wyrazy ;-)), zerowanie licznika oraz pare   
innych drobnych rzeczy. W sumie zajmuje to kolo 100 taktow zegarowych.   
Dodatkowo generowane jest przerwanie z licznika T0 (czyli o nizszym   
priorytecie niz z INT0) co okolo 5ms ktore zajmuje okolo 80 taktow   
zegarowych.   
Jezeli teraz zgloszone zostamie przerwanie z T0 a za kilka taktow zegarowych   
zgloszone zostanie przerwanie z INT0 to moge liczyc na to ze:   
1) Przerwanie z INT0 zostanie wykonane natychmiast po zgloszeniu mimo ze   
wykonywany jest podprogram obslogi przerwania z T0. Wtedy moge sie liczyc z   
malym bledem pomiaru czasu z licznika T1 (srednio okolo 10 taktow, bo wynika   
to z czasu obslogi przerwania).   
2) Przerwanie z INT0 zostanie wykonane zaraz po zakonczeniu wykonywania   
podprogramu obslogi przerwania z T0 (dopiero po rozkazie RETI) badz bedzie   
zignorowane. Wtedy moge sie liczyc w przypadku pesymistycznym z bledem okolo   
4% .   
3) A moze gdy wykonywany jest podprogram obslogi przerwania to zgloszone   
przerwanie jest ignorowane.   
Ktore z powyzszych pogladow jest prawdziwe?   
Czy lekarstwem na problem z punktu 2 bedzie umieszczenie na samym poczatku   
podprogramu obslogi przerwania z T0 instrukcji SEI ktora pozwolila by mi na   
obsloge przerwania z INT0?   
Za wszelka pomoc i dyskusje na ten temat szczere dzieki   
I jeszcze jedno.   
Do czego wykozystac mozna wyprowadzenie SS w 90S8515 oraz jaki jest sens   
(praktyczny) wykorzystania przerwania generowanego przez SPI w tym uC.   
Kicak   
From: "Tomasz Gumny" <tgumny_at_nospam_idn.org.pl>
Subject: Re: Przerwania w AVR
Date: Sun, 6 May 2001 20:51:07 +0200
   
Problem polega na tym ze zalezy mi na dokladnym odmierzeniu czasu pomiedzy   
wystąpieniem narastajacych zboczy na wejsciu INT0 (sygnal o czestotliwosci   
ok 4kHz ). Realizuje to po przez licznik 16bit T1.   
   
Podlacz sygnal do wejscia ICP, a T1 ustaw w tryb Capture i wszystkie problemy   
znikna.   
TG   
PS. obsl_u_gi   
From: Romuald Bialy <romekb_at_nospam_polbox.com>
Subject: Re: Przerwania w AVR
Date: Sun, 06 May 2001 22:27:46 +0200
   
Kicak wrote:   
Mam pare pytan dotyczacych przerwan w uC AVR   
   
[ciach]   
1) Przerwanie z INT0 zostanie wykonane natychmiast po zgloszeniu mimo ze   
wykonywany jest podprogram obslogi przerwania z T0. Wtedy moge sie liczyc z   
malym bledem pomiaru czasu z licznika T1 (srednio okolo 10 taktow, bo wynika   
to z czasu obslogi przerwania).   
   
Tak wlasnie sie stanie jezeli INT0 bedzie na wyzszym priorytecie.   
A najlepiej to faktycznie wykorzystac funkcje Capture timera T1. Zero   
bledow bo stan licznika zostaje zatrzasniety w momencie pojawienia sie   
zbocza na ICP, pozniej generowane jest przerwanie w ktorym sobie to   
odczytujesz.   
--    
	Pozdrawiam....  Romuald Bialy  
		E'mail: romekb_at_nospam_polbox.com  
		WWW:    http://www.polbox.com/r/romekb  
From: "Juliusz" <jul_at_nospam_fom.pl>
Subject: Re: Przerwania w AVR
Date: Mon, 7 May 2001 05:27:04 +0200
   
"Romuald Bialy" <romekb_at_nospam_polbox.com> wrote in message   
news:3AF5B3C2.12FC86A0_at_nospam_polbox.com...   
Kicak wrote:   
Mam pare pytan dotyczacych przerwan w uC AVR   
[ciach]   
1) Przerwanie z INT0 zostanie wykonane natychmiast po zgloszeniu mimo ze   
wykonywany jest podprogram obslogi przerwania z T0. Wtedy moge sie   
liczyc z   
malym bledem pomiaru czasu z licznika T1 (srednio okolo 10 taktow, bo   
wynika   
to z czasu obslogi przerwania).   
Tak wlasnie sie stanie jezeli INT0 bedzie na wyzszym priorytecie.   
   
Eee no chyba nie stanie sie tak. Priorytet jest wazny jedynie jak sie dwa   
zrodla odezwa w tym samym momencie. Zeby przerwac przerwanie trzeba podobno   
wstawic SEI w to akurat wykonywane o nizszym priorytecie. No ale nigdy nie   
probowalem tego, tak mowia.   
Juliusz