avr-gcc i priorytety przerwań

Witam. Może mi ktoś wytłumaczyć jak to jest z tymi przerwaniami?

Z tego co wyczytałem to avr maja sprzętowy priorytet przerwań i nie da się go zmienić i że przerwanie o niższym wektorze ma większy priorytet. Jednak nie do końca mi to działa w avr-gcc.

Obsługuję trzy zewnętrzne przerwania INT0, INT4 i INT7. Może podam uproszczny przykład kodu:

SIGNAL(SIG_INTERRUPT4){ printf_P(PSTR("Przerwanie 4\r\n")); sei(); while(1); //sprawdzenie priorytetów przerwań }

SIGNAL(SIG_INTERRUPT0){ printf_P(PSTR("Przerwanie 0\r\n")); } SIGNAL(SIG_INTERRUPT7){ printf_P(PSTR("Przerwanie 7\r\n")); }

Rozumiem że po wiejściu w przerwanie 4 wszystkie inne przerwania domyślnie są zablokowane nawet te o wyższym priotytecie jak IN0. Więc odblokowałem sei(). Rozumiem też że w tym momencie już może wykonać się przerwanie INT0 i tak się dzieje. Nie rozumiem tylko dlaczego wykonuje się też przerwanie INT7? Przecież ma niższy priorytet i nie powinno? A może powinno?

Proszę o wyjaśnienie. Dziękuję i pozdrawiam Paweł

Reply to
pawel
Loading thread data ...

pawel napisał(a):

Priorytet tylko swiadczy o kolejnosci obslugiwania przerwan...

pozdrawiam Pawel K

Reply to
Pawel K

pawel napisał(a):

Priorytety odnoszą się do kolejności wykonania jeśli wystąpią w tym samym momencie.

W momencie przyjęcia przerwania blokowane jest globalne zezwolenie na przerwania. Jeśli je włączysz poprzez sei() to możesz w przerwać aktualną funkcję obsługi przerwania innym przerwaniem. Nie ma tu żadnych priorytetów ani ograniczeń(poza rozmiarem stosu). Jeśli chciałbyś przyjmować wybrane przerwania musisz je programowo włączyć/wyłączyć.

Pozdro

Reply to
Luk

Ech. Najważniejsze to rozumieć co się czyta. Dzięki serdeczne. Pozdrawiam Paweł

Reply to
pawel

Ale zaraz, zaraz. Czy to znaczy że przerwanie o wyższym priorytecie może zostać przerwane przez przerwanie o niższym jeżeli jest włączone ogólne zezwolenie sei()? Czyli inaczej niż w procesorach 8051?

Paweł

Reply to
pawel

pawel napisał(a):

tak, i wcale nie ma znaczenia priorytet przerwania jakie nadejdzie w trakcie wykonywania aktualnego.

Reply to
Pawel K

Użytkownik "Pawel K" snipped-for-privacy@kpw.qs.pl> napisał w wiadomości news:euu0rb$lpu$ snipped-for-privacy@inews.gazeta.pl...

Niestety jest inaczej niz w 51.

W AVR wlasciwie nie ma priorytetow w takim sensie, ktore przerwanie moze przerwac inne.

Trzeba to kontrolowac samemu uzywajac flag lub odpowiednich sekwencji sei, cli.

Reply to
Andy

Poczytaj o INTERRUPT...

Mister

Reply to
Mister

Mister napisał(a):

Albo (żeby być "trendy") o ISR( ).

Reply to
Łukasz Zemła

Mister napisał(a):

formatting link

Reply to
Krzysztof Piecuch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.