Laboratorium 1 sterowanie diodami 1. Programowanie portów układu MSP 430 2.1 Porty MSP340F149 Układ MSP340F149, zamontowany na płytce rozwojowej EasyWeb2 zawiera 6 8- bitowych portów, mogących pracować w trybie wejściowym i wyjściowym. Porty te oznacza się odpowiednio P1 P6. Porty P1 i P2 umo\liwiają dodatkowo pracę w systemie przerwań. [msp430f149.pdf] W mikrokontrolerze MSP430 wszystkie porty są zmapowane w przestrzeni adresowej procesora, a dostęp do poszczególnych rejestrów wszystkich portów odbywa się poprzez odwołanie się do wybranego adresu portu. Ka\demu z 6 portów układu MSP przyporządkowane są 4 rejestry: " Port Px selection PxSEL " Port Px direction PxDIR " Port Px output PxOUT " Port Px input PxIN x= 1..6 Ponadto porty P1 i P2 posiadają rejestry odpowiedzialne za pracę z przerwaniami: " Port Px interrupt enable PxIE " Port Px interrupt-edge select PxIES " Port Px interrupt flag PxIFG x= 1..2 Przyporządkowanie adresów do poszczególnych portów ilustruje tabela: PORT REJESTR NAZWA ADRES Port P6 Port P6 selection P6SEL 037h Port P6 direction P6DIR 036h Port P6 output P6OUT 035h Port P6 input P6IN 034h Port P5 Port P5 selection P5SEL 033h Port P5 direction P5DIR 032h Port P5 output P5OUT 031h Port P5 input P5IN 030h Port P4 Port P4 selection P4SEL 01Fh Port P4 direction P4DIR 01Eh Port P4 output P4OUT 01Dh Port P4 input P4IN 01Ch Port P3 Port P3 selection P3SEL 01Bh Port P3 direction P3DIR 01Ah Port P3 output P3OUT 019h Port P3 input P3IN 018h Port P2 Port P2 selection P2SEL 02Eh Port P2 interrupt enable P2IE 02Dh Port P2 interrupt-edge select P2IES 02Ch Port P2 interrupt flag P2IFG 02Bh Port P2 direction P2DIR 02Ah Port P2 output P2OUT 029h Port P2 input P2IN 028h Port P1 Port P1 selection P1SEL 026h Port P1 interrupt enable P1IE 025h Port P1 interrupt-edge select P1IES 024h Port P1 interrupt flag P1IFG 023h Port P1 direction P1DIR 022h Port P1 output P1OUT 021h Port P1 input P1IN 020h [msp430f149.pdf] Pełny zakres rejestrów urządzeń wejścia wyjścia mo\na znalezć w dokumentacji producenta mikrokontrolera MSP430F149. 2.2. Uzyskiwanie dostępu do portów Wszystkie 6 portów MSP430 jest zmapowanych na 8-bitowe rejestry dostępne pod określonym adresem w pamięci. Rozpatrzmy port P1. Dla portu P1 trzy podstawowe rejestry są dostępne pod następującymi adresami P1IN 20 jest zmapowany na adres 20 szesnastkowo, P1OUT jest zmapowany na adres 21 szesnastkowo, P1DIR jest zmapowany na adres 22 szesnastkowo. Rejestr P1DIR wskazuje na kierunek działania portu dla poszczególnych bitów i przyporządkowanych do nich pinów układu. Piny oznacza się kolejno od P1.0 do P1.7. Je\eli pojedynczy bit rejestru ustawimy na 0, odpowiadający pin pracuje jako układ wejściowy, jeśli 1, odpowiadający pin pracuje jako układ wyjściowy. Chcąc ustawić pin P1.1 do pracy jako wejście, bit 1 rejestru P1DIR ustawiamy na 1, w przeciwnym wypadku na 0. [http://eleceng.dit.ie/frank/msp430/] Jeśli podłączmy do Portu P1.0 klawisz, a do portu P1.1 diodę LED, w rejestrze P1DIR tryb pracy poru P1.1 ustawiamy na wejściowy (1), a P1.0 na wyjściowy (0) W języku c taka operacja mo\e wyglądać następująco: typedef unsigned char byte; #define P1DIR *((byte *)0x22) P1DIR |= 0x02; // Ustawienie bitu P1.1 na 1 (tryb wyjściowy) P1DIR &= ~0x01; // Ustawienie bitu P1.0 na 0 (tryb wejściowy) Operacja |= jest funkcją bitowego or wykonanego na zawartości rejestru P1DIR. Operacja ta, w odró\nieniu od przypisania = nie zmienia stanu innych bitów. Operacja P1DIR |= 0x02 Bit P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P1DIR 0 1 0 1 0 1 0 1 0x02 0 0 0 0 0 0 1 0 P1DIR |= 0x02 0 1 0 1 0 1 1 1 Operacja P1DIR = 0x02 Bit P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P1DIR 0 1 0 1 0 1 0 1 0x02 0 0 0 0 0 0 1 0 P1DIR = 0x02 0 0 0 0 0 0 1 1 Operacja &= jest funkcją bitowego and wykonanego na zawartości rejestru P1DIR. Operacja ta, tak\e nie zmienia stanu innych bitów. Bit P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P1DIR 0 1 0 1 0 1 0 1 0x01 0 0 0 0 0 0 0 1 ~0x01 1 1 1 1 1 1 1 0 P1DIR &= ~0x01 0 1 0 1 0 1 0 0 [http://eleceng.dit.ie/frank/msp430/] Je\eli w układzie z rysunku xx2 chcemy kontrolować stan klawisza przyłączonego do pinu b0 portu P1, konieczne jest odczytanie stanu portu P1.0. Jeśli naciśnięcie klawisza ma sterować zapaleniem diody przyłączonej do pinu b1 portu P1, nale\y na port P1.1 wysłać odpowiedni sygnał. Aby załączyć diodę, bit 1 portu P1 musi być ustawiony na 0, wyłączenie uzyskamy ustawiając ten bit na 1. Podobnie odczytany stan bitu portu P1.1 równy 0 informuje o wciśniętym klawiszu, a stan bitu równy 1 mówi, \e klawisz nie jest wciśnięty. Program, zapalający diodę w zale\ności od stanu klawisza mo\e wyglądać następująco: typedef unsigned char byte; #define P1IN *((byte *)0x20) #define P1OUT *((byte *)0x21) #define P1DIR *((byte *)0x22) // Definicje dotyczące Watchdog timer #define WDTCL *((short *)0x120) #define WDTHOLD 0x0080 #define WDTPW 0x5a00 void main(void) { WDTCTL = WDTPW + WDTHOLD; // Zatrzymanie watchdog timera P1DIR |= 0x02; // Ustawienie bitu P1.1 na 1 (tryb wyjściowy) P1DIR &= ~0x01; // Ustawienie bitu P1.0 na 0 (tryb wejściowy) while( 1==1 ) { if( (P1IN & 0x01) != 0) { // Odczcytanie stanu bitu P1.0 // jeśli klawisz był naciśnięty ... P1OUT = P1OUT | 0x02; // zgaś diodę } else { P1OUT = P1OUT & 0xfd; // zapal diodę } } } 2.3. Połączenia portów w układzie EasyWeb2 W układzie EasyWeb2 mamy do dyspozycji 4 klawisze, podłączone do portów P4.4 P4.7 oraz 3 diody LED: " Dioda status, podłączona do portu P2.1 " Dioda przyłączona równolegle z przekaznikiem 1, podłączona do portu P1.5 (REL1) " Dioda przyłączona równolegle z przekaznikiem 2, podłączona do portu P1.6 (REL2) Potrzebne definicje portów P1, P2 i P4 mo\na przygotować bazując na opisie w tabeli 1 lub dołączając zdefiniowany przez twórców plik nagłówkowy o nazwie msp430x14x.h #include msp430x14x.h 2.4. Zadania 1. Zdefiniuj funkcje słu\ące do zapalania wybranej diody i do gaszenia wybranej diody. 2. Zdefiniuj funkcje słu\ące do cyklicznego zapalania i gaszenia wybranej diody z określonym interwałem czasowym. Opóznienie dobierz doświadczalnie poprzez odpowiednią liczbę iteracji pustej pętli for. 3. Napisz dla układu EasyWeb2 program, który za pomocą trzech klawiszy będzie kontrolował zapalanie i gaszenie trzech diod. 4. Napisz dla układu EasyWeb2 program, działający w 2 trybach: konfiguracji i pracy. Klawisz 1 wybiera tryb działania (konfiguracja, praca) W trybie konfiguracji: 2 klawisz wybiera aktywną diodę (jedna z trzech) 3 klawisz wybiera tryb pracy aktywnej diody (włączona, wyłączona, bistabilna, astabilna, cykliczne zapalanie ) W trybie pracy 2 klawisz aktywuje 1 diodę 3 klawisz aktywuje 2 diodę 4 klawisz aktywuje 3 diodę