Ako používať dvojaký prerušenia v AVR?

E

Elitsa

Guest
Zdravím všetkých,
Chcem vedieť, ako používať dvojaký prerušenia v AVR (ATmega8515L)? I použitie INT0 a sériové, tak howto nastaviť to?i vybrať INT0 ako vysokú prioritu? by u dať nejaký odkaz?
vďaka ...

Elitsa

 
Je to všetko v údajovom hárku.

Nemôžete si vybrať INT0, ako vysokú prioritu len preto, že už si po predvolenom nastavení.Nemáte kontrolu na prioritné úrovni.Je to hardware definované.
Zoznam na strane 53 v údajovom hárku určuje priority úrovne jednotlivých prerušenia.Čím nižšia je adresa vyššia je úroveň priority.RESET má najvyššiu prioritu, a ďalšie je INT0 - vonkajšie Interrupt Request 0.Zjavné SPM_RDY má menej prioritné úrovni medzi všetkými.
Poďme za predpokladu, že nasledujúci program toku.
Poradové prerušenia dochádza v dôsledku prijatých charakteru, aktuálny program hodnota čítača je uložený v zásobníku a zaťaží príslušné vektor prerušenia hodnote 0009 dolárov a vaše sériové RX ISR je vykonaný teraz.
Globálne Interrupt Povoliť I-bit je vymazaná a všetky prerušenia sú vypnuté.
Ak INT0 dôjde, nebude doručená dnes, ale zodpovedajúce prerušenia vlajky na pamäti, až do prijatia všeobecnej prerušenie je povolené znova.
Je to miesto v tzv fronty čakajúcich.
Hej!, Ale INT0 má vyššiu prioritu, ako sériové Interrupt!Ako je možné, že?
No, to je spôsob, akým AVR spracováva prerušenia.Ak ste gentleman a chcete, aby vaše sériové ISR sa preruší na INT0 až prerušiť, môžete povoliť prerušenia písaním logickú "1" na I-bit (alebo vykonanie inštrukcie SEI) a vyššiu prioritu INT0 nemá byť doručená počas sériovej ISR.
To je to, čo sa nazýva vnorená prerušenia.
Zrejmé, ak nechcete, aby INT0 prerušenia, musia počkať, až vaše sériové Int je ukončená inštrukcií RETIE (čo umožňuje opäť prerušuje).

Ak chcete pokračovať, úroveň priority záleží len vtedy, keď viac prerušenia dôjde v rovnakom čase, alebo čakajú, až sa podáva od fronty čakajúcich.
Ak ste vykonávajúci Sériové ISR a INT0 a int1 dôjde, potom sa po návrate zo sériového ISR, úroveň priority je kontrolovaný a INT0, ktorý má vyššiu prioritu než int1 sa podáva ako prvý.

Jedná sa o prvý typ prerušenia, tie vyvolaná udalosť, ktorá stanovuje coresponding prerušenia vlajku.
Existuje iný typ prerušenia, ktoré vyvolá, ak prerušenie podmienka je prítomná.Tieto prerušenia nemusí mať nevyhnutne Prerušenie Flags.
Pokiaľ prerušíte podmienka zmizne skôr, než je povolené prerušenie, prerušenie nebude ani spustená ani spomínať.

Môžete sa opýtať, aký druh prerušenia sú tieto?Vy ste bližšie zoznámiť s prerušenia, ktoré sú podávané okamžite, ako sa zdá vzhľadom k prirodzeným spôsobom of slová prerušenia: Musíte interrupt všetci teraz robíte a odpovie na moju Querry, pretože som sa nemôžem dočkať, je to naliehavé!
Alebo spúšťa udalosti prerušenia dôjde počas realizácie časovo kritické rutiny (ako plnenie EEPROM úložisko dát vďaka bezprostrednému energie klesajú, keď nechcete byť prerušený - výkonný CLI vypne prerušenia), ktoré musia mať na pamäti, a slúžil po.

Keď Vonkajšie prerušenie je povolený a nastavený ako úroveň spustenia (iba INT0/INT1), skôr než vyvolaný pádom alebo zvýšenie okraj, prerušenie vyvolá tak dlho, ako pin je držaný na nízkej úrovni.Ak nebude nastaviť Interrupt Flag, aj keď sa na INT0 pin!
Nebude potrebné pripomenúť, že došlo taky.Preto, ak ste BUSSY, môžete to uniklo.Je to to prerušenie?Musíš byť srandu!
Áno, je to prerušiť, pokiaľ ide o význam slova.Problém je v tom, čo robíte, keď tento signál objaví.Keď ste nič nerobí, a tento signál sa objaví, je to len prerušiť taky, pretože je to klope na dvere.
Ako môžete robiť nič?Je to vtip?Nie, nie.Mikrokontroléru mohol ísť spať.Nechcete sa prebudiť?Môžete volať to prerušil ho!
Pamätajte si, že uznanie pádu alebo nábežnú hranu prerušenia na INT0 alebo int1 vyžaduje prítomnosť I / O hodiny, ktoré sa zastaví vo všetkých režimoch spánku, ale idle režime.
Ste v režime spánku a všetky vonkajšie činnosti musí byť zistený asynchrónne, čo úroveň prerušenia na INT0/INT1 sú.To znamená, že tieto prerušenia môže byť použitý pre prebudení mikro aj z režimu spánku iného ako idle režime.

Kým budete program poistka BOOTRST a nastaviť IVSEL bit v GICR to je všetko, čo musíte vedieť o prerušení.

Nezabudnite:
1.Nastavte si ukazovateľ zásobníka (SPL SPH) bodu nad $ 60 (použitie RAMEND podľa početných príkladoch)
2.Set I-bit z SREG k tomu, aby prerušenie
3.Set coresponding bit pre vaše INT0 alebo Serial prerušenie alebo čo prerušiť, ktorý chcete použiť
4.Napíšte svoj program pomocou všeobecných inštalačný program pre Interrupt Adresy vektorové ako na strane 54 v údajovom hárku (pomocou ORG je odporúčané).
5.Nezabudnite použiť RETIE na konci vášho ISR

ISR znamená Interrupt Service Rutinné.Viem, že by ste sa chcel opýtať.

Ospravedlňujem sa, ak moje vysvetlenie opúšťa viac zmätený, že si teraz, ale aspoň som sa snažil.

Ďalší originálny anglický štýl.
Prejsť na http://www.avrfreaks.net/user.php?op=register&module=NS-NewUser a zaregistrovať.http://www.avrfreaks.net/index.php?module=dpDocs&func=display&mid=68

Potom si prečítajte všetkých 7 lekcií na adrese: Základné prerušenia a I / O
http://www.avrfreaks.net/index.php?module=dpDocs&func=display&mid=68

 
Ak používate AC prekladač ako codevision alebo ICC AVR majú kód sprievodca, ktorý nastaví všetky prephierals pre Vás na stiahnutie demo verzie je a dať im vyskúšať

 

Welcome to EDABoard.com

Sponsor

Back
Top