Witam,
Mam pytanie odnośnie obsługi przerwań w mikroprocesorze Atmega16.
Procesor ten ma możliwość pracy z trzema przerwaniami zewnętrznymi. Powiedzmy, że aktywuję wszystkie trzy przerwania. Występować one będą średnio co 3,33ms i będą spowodowane detekcją zera na trzech kolejnych fazach zasilania trójfazowego. Czas trwania przerwania będzie się wahać od minimum do nawet blisko 10ms (przy czym czas trwania będzie dla poszczególnych faz taki sam w danej chwili). Nie trudno zauważyć, że przerwania (a właściwie wykonywane w nich funkcje) będą się na siebie nakładały. I tu pytanie: Jeśli podczas trwania jednego przerwania nr1 pojawi się przerwanie nr2 i np do tego w skrajnym przypadku dołoży się przerwanie nr3 to czy wszystkie te przerwania wykonają się poprawnie (równolegle)?
Czy może jeśli w momencie trwania funkcji wywołanej w przerwaniu nr1 pojawi się przerwanie nr2 procesor zakończy (przerwie wykonywanie) przerwanie nr1 i zacznie realizować funkcje umieszczone w przerwaniu nr2?
Dodam, że we wszystkich trzech przerwaniach będzie funkcja odliczająca konkretną ilość impulsów timera i ustawiająca na chwilę stan wysoki na danym pinie.
Z góry dziękuję za pomoc. Zabieram się za nowy projekt i muszę najpierw ustalić czy taki algorytm jaki sobie założyłem jest wykonywalny na jednym procesorze.
Mam pytanie odnośnie obsługi przerwań w mikroprocesorze Atmega16.
Procesor ten ma możliwość pracy z trzema przerwaniami zewnętrznymi. Powiedzmy, że aktywuję wszystkie trzy przerwania. Występować one będą średnio co 3,33ms i będą spowodowane detekcją zera na trzech kolejnych fazach zasilania trójfazowego. Czas trwania przerwania będzie się wahać od minimum do nawet blisko 10ms (przy czym czas trwania będzie dla poszczególnych faz taki sam w danej chwili). Nie trudno zauważyć, że przerwania (a właściwie wykonywane w nich funkcje) będą się na siebie nakładały. I tu pytanie: Jeśli podczas trwania jednego przerwania nr1 pojawi się przerwanie nr2 i np do tego w skrajnym przypadku dołoży się przerwanie nr3 to czy wszystkie te przerwania wykonają się poprawnie (równolegle)?
Czy może jeśli w momencie trwania funkcji wywołanej w przerwaniu nr1 pojawi się przerwanie nr2 procesor zakończy (przerwie wykonywanie) przerwanie nr1 i zacznie realizować funkcje umieszczone w przerwaniu nr2?
Dodam, że we wszystkich trzech przerwaniach będzie funkcja odliczająca konkretną ilość impulsów timera i ustawiająca na chwilę stan wysoki na danym pinie.
Z góry dziękuję za pomoc. Zabieram się za nowy projekt i muszę najpierw ustalić czy taki algorytm jaki sobie założyłem jest wykonywalny na jednym procesorze.
