Atmel AVR, nieobciazajaca petla nieskonczona

Nov 09, 2004 5 Replies

Witam,



Mam procesor Atmel AVR. Aplikacja, ktora tworze polega na tym, ze do procesora podawane sa dwa sygnaly, ktore generuja przerwania wykonujace jakies podprogramy. Sam procesor nie ma nic do roboty i w glownym programie powinna byc petla nieskonczona. I tu pytanie o dzialanie procesora: jesli przyjdzie przerwanie, to czy program glowny jest przerywany i wykonywany jest w calosci program obslugi przerwania? Jesli tak, to nie jest istotne, jak zrealizuje petle nieskonczona w programie glownym. Jesli wywolane jest drugie przerwanie, gdy obsluga pierwszego jeszcze sie nie skonczyla, to w jakis sposob zachowuje sie procesor? Wykonuje na przemian po jednym rozkazie podprogramu dla poszczegolnych przerwan?



Z gory dziekuje za odpowiedzi. Vicky.



U¿ytkownik "Vicky" snipped-for-privacy@hotmail.com napisa³ w wiadomo¶ci news:cmq2eg$ej2$ snipped-for-privacy@nemesis.news.tpi.pl...

np.

for(;;);

w C

Dok³adnie tak, przerwania maj± zawsze wy¿szy piorytet ni¿ program g³ówny.

Taka sytuacja nie mo¿e mieæ miejsca, system obs³ugi przerwañ w AVR, wy³±cza bit "I" w rejestrze SREG procesora i dopiero albo ustawienie tego bitu z cia³a programu, albo powrót z funkcji obs³ugi przerwania poprzez instrukcjê RETI, która ustawia bit "I" w SREG, uaktywnia system przerwañ.

Natomiast w przypadku równoleg³ego zaistnienia zg³oszenia dwóch przerwañ (oba w tym samym cyklu zegara), decyzja o tym które przerwanie zostaje wywo³ane jako pierwsze, ustalana jest na podstawie piorytetu przerwania. Wy¿szy piorytet zawsze ma pierwszeñstwo w powy¿szej sytuacji.

K.

Dokładnie

nie jest

Kończy obsługę pierwszego i zajmuje się 2 :)

Absolutnie , to nie praca choperowa jak w oscyloskopie :)

podczas pracy programu gdy wystąpi przerwanie mikroprocesor zawiesza wykonywane dotychczas czynnosci i przechodzi do obsługi przerwania. Musisz pamietać, że podczas obsługi przerwania należy zapamiętać na stosie zmienne które mogły by zostać zmienione w przerwaniu. W tym przypadku to nie dotyczy, bo główna pętla nic nie wykonuje. Ja na ogół w takiej pętli umieszczam kilka rozkazów 'nop' czyli nie rób nic. kontynułując: jeżeli przyjdzie drugie przerwanie w momencie gdy mikroprocesor wykonuje juz jakieś, to zostanie ono dopiero wykonane gdy zakończy się obsłóga pierwszego. Chyba, że załączycz (na początku przerwania) ogólne zezwolenie na przerwania.( podczas rozpoczęcia obsługi przerwania mikroprocesor wyłancza obsługę przerwań i załancza ją spowrotem gdy kończy obsługe przerwania) wówczas zostanie przerwana ponownie przaca mikroprocesaora i zacznie on obsługiwać drógie przerwanie. gdy skonczy je powróci do miejsca przerwania pierwszego przerwania, skończy je i wróci w końcu do pętli głównej

Niewiem troszkę to chyba zamotałem, ale mam nadzieje że coś Ci to rozjaśni sprawę

Pozdrawiam

UdioS

Bardzo Cie prosze: wy³±cza i za³±cza

nie moglem sie powstrzymac, peters

U¿ytkownik "peters" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:cmqd2l$r3t$ snipped-for-privacy@nemesis.news.tpi.pl...

"si³om i godno¶ciom osobistom" - wê¿ykiem Jasiu. Te¿ siê nie mog³em. P.G.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required