Jaka jest różnica między Przerwaniem przy zmianie a Przerwaniem zewnętrznym na PIC

11

Jaka jest różnica w funkcji między IOC a EXT Interrupt na PIC? Obecnie używam PIC12F1822 i oprócz dodatkowej warstwy sprawdzania masz do czynienia z IOC (tj. Który pin spowodował przerwanie) oba są identyczne.

Jaka jest praktyczna różnica, jeśli w ogóle? Kiedy użyjesz jednego z nich?

tsiflana
źródło

Odpowiedzi:

8

Spójrz na ten dokument, który stwierdza:

Przerwanie przy zmianie
Ta funkcja jest podobna do funkcji zewnętrznego przerwania , z tą różnicą, że przerwanie zmiany portu zostanie wywołane przez dowolną zmianę (nie tylko jeden rodzaj przejścia) na dowolnym z pinów, dla których jest on włączony. To sprawia, że ​​jest bardziej elastyczny (dostępny na większej liczbie pinów), ale również trudniejszy w obsłudze.

perilbrain
źródło
5

Jest to prawdopodobnie zrobione, aby uprościć architekturę przerwań czipu, ponieważ ma mniej pozycji w tablicy wektorów przerwań. Przerwanie przy zmianie można ustawić tak, aby uruchamiało się, gdy zmienia się rejestr portu, i może być przydatne do czegoś takiego jak matryca klawiatury, w której nie chcesz zapisywać procedury przerwania usługi (ISR) dla każdego pojedynczego pinu. Możesz napisać tylko jeden, który może sprawdzić wartość całego portu, co może być tym, czym naprawdę jesteś zainteresowany, w zależności od aplikacji.

Jon L.
źródło
5

Trzy największe różnice między zmianą przerwania a zewnętrznymi pinami przerwań:

  1. Zewnętrzne piny przerwań pozwalają oprogramowaniu określić, czy przerwanie powinno być wyzwalane przez zbocze narastające, czy zbocze opadające; jeśli np. szpilka jest niska, a zainteresowany jest tylko opadającymi krawędziami, przerwanie nie zostanie uruchomione, dopóki szpilka nie podniesie się, a następnie opadnie. Używając przerwania przy zmianie, trzeba obudzić się na obu zdarzeniach.
  2. Zewnętrzne piny przerwań mają indywidualne bity stanu zatrzaśnięcia. Nawet jeśli impuls wejściowy przychodzi i odchodzi, zanim oprogramowanie ma szansę na nie zareagować, oprogramowanie nadal może dowiedzieć się, że tak się stało i odpowiednio zareagować.
  3. Odczyt portu I / O z włączonym przerwaniem zmiany pinów dokładnie w momencie, gdy zmiany wejścia mogą spowodować, że przerwanie zmiany pinów nie zostanie uruchomione. Natomiast odczyt portu I / O podłączonego do zewnętrznego pinu przerwań nie ma wpływu na przerwanie.

Zewnętrzne przerwania PIC są bardziej wszechstronne i niezawodne niż przerwania ogólnego przeznaczenia do zmiany pinów. Sugeruję użycie tego pierwszego, gdy jest to praktyczne.

supercat
źródło
3

Zasadniczo, zewnętrzne przerwanie zostanie wyzwolone na określonym zboczu (narastającym lub opadającym, zdefiniowanym przez użytkownika), podczas gdy przerwanie przy zmianie zostanie wyzwolone na dowolnym zboczu (zarówno narastającym, jak i opadającym).

Bruno Ferreira
źródło
Przynajmniej dla wspomnianego PIC12F1822 OP, IOC można również skonfigurować (zdefiniowane przez użytkownika) do wyzwalania przy zboczu narastającym, zboczu opadającym lub obu (sekcja 13). Wydaje mi się, że jedyną różnicą jest to, że zewnętrzne przerwanie można skonfigurować tak, aby wyzwalało tylko jedną z dwóch detekcji krawędzi.
PetPaulsen,
2

Przerwanie przy zmianie dotyczy zwykle połowy bajtu We / Wy, przy czym przerwania zewnętrzne są zwykle dla poszczególnych bitów. Jak już powiedziałeś, jedną rzeczą, którą musisz zrobić w IOC ISR, jest ustalenie, który bit (lub bity) zmienił się.

MKOl jest również nieco trudniejszy w użyciu, nawet poza tym. Konieczne jest przeczytanie portu wkrótce przed umożliwieniem przerwania, a jeszcze ważniejsze, aby ODCZYTAĆ PORT wewnątrz ISR! Jeśli masz powolny sygnał i myślisz, że możesz ustawić flagę wewnątrz ISR i poczytać później, poza ISR, pomyśl jeszcze raz! Odczyt portu (lub dowolnego fragmentu portu, jeśli dobrze pamiętam), resetuje zatrzask komparatora, który wyzwala przerwanie. Jeśli nie wyczyścisz go w ISR, natychmiast uruchomi się ponownie po wyjściu z ISR. Jeśli pamiętasz, aby to zrobić, wszystko jest w porządku, ale jeśli zapomnisz i pomyślisz, że możesz przeczytać port, gdy się do niego zbliżysz, będziesz trochę sfrustrowany, dopóki nie pamiętasz, aby przeczytać w ISR.

Scott Seidman
źródło