Processor Expert z Kinetis Design Studio – wygoda tworzenia [PRZYKŁAD]
Na tym etapie zaczniemy implementację obsługi czerwonej diody LED zamontowanej w zestawie FRDM-KL25Z (rysunek 5). Proces ten można podzielić na dwie części:
- dodanie i skonfigurowanie komponentu BitIO_LDD (sterowanie pojedynczą linią GPIO),
- napisanie kodu sterującego linią GPIO.
W celu dodania nowego komponentu do projektu klikamy PPM na bloczku PTB (widok Processor) i z menu kontekstowego wybieramy Add Component/Template ? BitIO_LDD (rysunek 6). W wyniku tej operacji w widoku Components pojawi się odpowiedni element (rysunek 7).
Rys. 6. Dodanie komponentu typu BitIO_LDD
Rys. 7. Komponent typu BitIO_LDD dodany do projektu
Dalej otwieramy widok Component Inspector, wybieramy zakładkę Properties oraz dokonujemy następujących zmian, uprzednio przełączywszy się z trybu Basic do Advanced (rysunek 8):
- zmiana nazwy komponentu z Bit1 na RLED,
- wybranie linii wejścia/wyjścia GPIO: PTB18,
- ustawienie kierunku linii GPIO: Output (wyjście),
- ustawienie stanu początkowego linii GPIO: 1 (stan wysoki; logiczna 1),
- aktywacja automatycznej inicjalizacji komponentu.
Rys. 8. Konfiguracja komponentu typu BitIO_LDD
W zakładce Methods możemy wybrać funkcje jakie powinny zostać wygenerowane do wykorzystania przez użytkownika (rysunek 9). W ramach pierwszego przykładu sterowania pojedynczą diodą LED wystarczą nam dwie funkcje: ClrVal() i SetVal(). Dodatkowo można wybrać funkcję NegVal(), którą można zastosować zamiast dwóch poprzednich.
Rys. 9. Wybór funkcji do wygenerowania dla komponentu typu BitIO_LDD
Całość projektu zapisujemy i z menu głównego wybieramy Project ? Generate Processor Expert Code w wyniku czego zostanie wygenerowany konfiguracyjny kod źródłowy zgodny z wybranymi przez nas ustawieniami dla poszczególnych komponentów.
Kolejnym zadaniem jest uzupełnienie funkcji main(). W tym celu przełączamy się do perspektywy C/C++ i w widoku Project Explorer otwieramy plik main.c znajdujący się w katalogu Sources (rysunek 10).
Rys. 10. Perspektywa C/C++
W danym pliku deklarujemy zmienną 'int i’ zaraz za wierszem:
/* Write your local variable definition here */ Dalej wyszukujemy: /* Write your code here */ /* For example: for(;;) { } */ /* KOD UŻYTKOWNIKA */ /*** Don't write any code pass this line, or it will be deleted during code generation. ***/ i w miejscu komentarza ”KOD UŻYTKOWNIKA” umieszamy następujący kod: while(1){ for(i = 0; i < 0xAFFF; ++i); RLED_ClrVal(NULL); for(i = 0; i < 0xAFFF; ++i); RLED_SetVal(NULL); }
Jest to dosyć prosty programik, który wykorzystuje wspomniane wcześniej funkcje komponentu BitIO_LDD oraz dwie pętle for(), których czas wykonywania na razie nie znamy i „przyjmujemy na oko”. Projekt zapisujemy i kompilujemy klikająć PPM na nazwie projektu w widoku Project Explorer i wybierając z menu kontekstowego Build Project (rysunek 11). W wyniku bezbłędnej kompilacji w widoku Project Explorer w katalogu projektu powinien pojawić się katalog Binaries, w którym to będzie znajdował się plik wykonywalny naszego programu.
Rys. 11. Zmodyfikowany plik main.c oraz bezbłędna kompilacja projektu
Praktycznie we wszystkich funkcjach generowanych przez narzędzie Processor Expert dla dodanych do projektu komponentów, w tym również dla BitIO_LDD, jako argument występuje wskaźnik na strukturę typu LDD_TDeviceData, która z kolei może zostać utworzona podczas inicjalizacji komponentu (odpowiednia funkcja inicjalizacji zwraca wskaźnik do takiego obiektu), jednak nie wszędzie wymagane jest jej stosowanie i zazwyczaj wystarczy przekazać wartość NULL. Więcej szczegółów na temat sygnatur funkcji (parametry zwracane oraz przyjmowane) można znaleźć w plikach nagłówkowych zawartych w podkatalogu projektu Generated_Code.