(6) Mikrokontrolery MSP430: porty I/O, obsługa wejść

Żeby skrócić czas wykonania procedury obsługi przerwania w MSP430FR5739 zastosowano specjalny rejestr PxIV (rejestr tylko do odczytu). W rejestrze zapisywana jest wartość informująca o numerze flagi przerwania o najwyższym priorytecie która jest aktualnie ustawiona. Dla wejścia numer 0 jest to wartość 2, dla wejścia numer 1 jest to wartość 4 – a dalej kolejno – dla wejścia numer 7 jest to wartość 16. Podczas odczytu rejestru PxIV zerowana jest jego wartość. Dodatkowo automatycznie czyszczona jest flaga przerwania o najwyższym priorytecie. Szablon procedury obsługi przerwania dla portów P1, P2 i P3 z wykorzystaniem rejestru PxIV pokazano na listingu 3.

List. 3. Szablon procedury obsługi przerwania dla portów P1, P2 i P3

*  w miejsce znaku „X” należy wstawić numer portu mikrokontrolera

Szablony procedury obsługi przerwania dla portu P4 z wykorzystaniem rejestru PxIV pokazano na listingu 4 (port P4 ma 2 linie wejścia/wyjścia).

List. 4. Szablon procedury obsługi przerwania dla portu P4

Korzystając z rejestru PxIV w pierwszej kolejności obsłużymy przerwanie o najwyższym priorytecie. Przykładowo jeśli ustawione są dwie flagi przerwania, jedna dla wejścia numer 0 druga dla wejścia numer 1 to procedura obsługi przerwania wywołana będzie dwukrotnie. Za pierwszym wywołaniem procedury w rejestrze PxIV ustawiona będzie wartość 2. Odczyt rejestru (instrukcja switch) wyzeruje jego wartość, a w rejestrze PxIFG wyzerowana zostanie flagę przerwania dla wejścia numer 0. Ponieważ ciągle pozostaje ustawiona flaga przerwania dla wejścia 1, to procedura obsługi przerwania zostanie wywołana ponownie. Przy drugim wywołaniu procedury obsługi przerwania w rejestrze PxIV ustawiona jest wartość 4. Odczyt rejestru PxIV wyzeruje jego wartość i wyczyści flagę przerwania dla wejścia numer 1.

Na płytce startowej LaunchPad do linii numer 0 portu P4 mikrokontrolera podłączono przycisk S1. W prezentowanym przykładzie linie P4.0 mikrokontrolera konfigurujemy jako wejście z włączonym rezystorem podciągającym pull-up . Wciśnięcie przycisku S1 powoduje pojawienie się stanu niskiego na wejściu. Gdy przycisk nie jest wciśnięty to rezystor podciągający pull-up wymusza stanu wysoki na wejściu. W programie wciśnięcie przycisku S1 sygnalizować będziemy włączeniem diody LED1. Na płytce startowej LaunchPad dioda LED1 podłączona jest do linii numer 0 portu PJ. W programie linię PJ.0 konfigurujemy jako wyjście (stan wysoki na wyjściu włącza diodę LED1, stan niski na wyjściu wyłącza diodę).

 

Rys. 1. Schemat podłączenia a) przycisku S1 do linii P4.0 b) diody LED1 do linii PJ.0 (połączenia wykonane na płytce zestawu LaunchPad)

Rys. 1. Schemat podłączenia a) przycisku S1 do linii P4.0 b) diody LED1 do linii PJ.0 (połączenia wykonane na płytce zestawu LaunchPad)

 

Przykład „Obsługa wejścia” został napisany w dwóch wersjach. W pierwszej wersji programu wejście obsługiwane jest w trybie pollingu (cykliczne sprawdzanie stanu wejścia). W drugiej wersji programu wejście obsługiwane jest w trybie przerwań (wykrycie zmiany stanu sygnału na wejściu).

 

Tryb pollingu

Kod źródłowy programu z obsługą wejścia w trybie pollingu pokazano na listingu 5.

List. 5. Obsługa wejścia. Tryb pollingu

Do pobrania

O autorze