Vicky
Guest
Tue Nov 09, 2004 9:21 am
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.
Krzysztof Gawryś
Guest
Tue Nov 09, 2004 9:50 am
Użytkownik "Vicky" <vickyBADMAIL@hotmail.com> napisał w wiadomości
news:cmq2eg$ej2$1@nemesis.news.tpi.pl...
Quote:
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.
np.
for(;

;
w C
Quote:
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.
Dokładnie tak, przerwania mają zawsze wyższy piorytet niż program główny.
Quote:
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?
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.
Piotr Chmiel
Guest
Tue Nov 09, 2004 10:14 am
On Tue, 9 Nov 2004, Vicky wrote:
Quote:
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?
Dokładnie
Quote:
Jesli tak, to nie jest istotne, jak zrealizuje petle nieskonczona w
programie glownym.
nie jest
Quote:
Jesli wywolane jest drugie przerwanie, gdy obsluga
pierwszego jeszcze sie nie skonczyla, to w jakis sposob
zachowuje sie procesor?
Kończy obsługę pierwszego i zajmuje się 2 :)
Quote:
Wykonuje na przemian po
jednym rozkazie podprogramu dla poszczegolnych
przerwan?
Absolutnie , to nie praca choperowa jak w oscyloskopie
UdioS
Guest
Tue Nov 09, 2004 10:31 am
Quote:
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?
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
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
peters
Guest
Tue Nov 09, 2004 12:22 pm
Quote:
podczas rozpoczęcia obsługi przerwania mikroprocesor wyłancza obsługę
przerwań
i załancza ją spowrotem
Bardzo Cie prosze: wyłącza i załącza
nie moglem sie powstrzymac, peters
Piotr Gałka
Guest
Tue Nov 09, 2004 12:51 pm
Użytkownik "peters" <peters@poczta.onet.pl> napisał w wiadomości
news:cmqd2l$r3t$1@nemesis.news.tpi.pl...
Quote:
podczas rozpoczęcia obsługi przerwania mikroprocesor wyłancza
obsługę
przerwań
i załancza ją spowrotem
Bardzo Cie prosze: wyłącza i załącza
nie moglem sie powstrzymac, peters
"siłom i godnościom osobistom" - wężykiem Jasiu.
Też się nie mogłem.
P.G.