Przerwania zewnętrzne w kontrolerach STM32.

Każdy kto spotkał się z kontrolerami AVR32 docenia ścisłą regularność budowy portów I/O. każdy z nich ma przypisaną ścisłą ilość dokładnie takich samych urządzeń, na dokładnie tych samych liniach portów a najważniejsze, to możliwość odblokowania przerwania od dowolnej linii wyprowadzenia wejściowego. Każda linia w każdym porcie może zgłosić przerwanie. Jest to tak zorganizowane, iż oprogramowanie pisane dla jednego portu, jeśli odwołamy się poprzez odwołanie za pośrednictwem wskaźników do zasobu, jest obsługiwane bez najmniejszych problemów. Niestety rozwiązanie użyte w rodzinie STM32 wskazyje, iż kontrolery były projektowane na „Mieczysława” cz<yli zaraz po sylwestrowej północy. Na dodatek różne kontrolery po różnych północhach sylwestrowych. Do dyspozycji mamy tylko 16 przerwań łączonych w nieregularne grupy zależne od wersji mikrokontrolera. Każda grupa to w zależności od kontrolera może łączyć przerwania np:

  • grupa 0_1 => przerwanie nr 0..1

  • grupa 2_4 =? przerwania 2..4

  • grupa 5_15 => przerwania 5..15

Jeszcze gdyby grupowania były identyczne we wszystkich wersjach to pal licho. Niestety przejście na inną wersję z iinaczej pogrupowanymi przerwaniami pociąga za sobą zmiany budowy funkcji obsługi przerwań. A największa pomyłka jeśli chodzi o przrwania zewnętrzne, to wybór źródła przerwania zewnętrznego. Przerwanie nr 0 może zostać zgłoszone albo z wejścia portu A PA0 albo z PB0, PC0 itd. aż do PH0 jeśli takowy port i wejście posiada kontroler. kończy się to na tym, iż kontroler, który ma około 200 wyprowadzeń i tak może przyjąć tylko 16 przerwań zewnętrznych. na dodatek łatwo o kolizję pomiędzy wyprowadzeniami różnych portów co komplikuje znacznie projektowanie sprzętu.