wersja mobilna | kontakt z nami

Renesas Synergy - Internet Rzeczy w zasięgu ręki. cz. 2

Numer: Czerwiec/2016

W poprzednim artykule opisaliśmy bazę sprzętową - platformę S7G2 Starter Kit. Teraz opiszemy oprogramowanie oraz przykład mikrokontrolerowego "Hello World" - program migający diodą LED. Jego przygotowanie wymaga użycia środowiska programowego wyposażonego w edytor, kompilator, debugger oraz programy narzędziowe. Na nieskomplikowanym przykładzie pokażemy sposób ich użycia.

Pobierz PDF

Każdy układ mikroprocesorowy jest tak dobry, jak dobre jest jego oprogramowanie. Standardem stało się oferowanie przez producentów mikrokontrolerów modułów ewaluacyjnych. Takim samym standardem jest też zapewnianie bezpłatnego wsparcia.

Początkowo były to zintegrowane środowiska IDE, w których można było tworzyć projekt, edytować pliki źródłowe i korzystać z kompilatora asemblera. Teraz jest to zestaw kompletnych narzędzi z bezpłatnym kompilatorem i możliwością zaawansowanego debugowania.

Rysunek 10. Wybór wsparcia dla Synergy w trakcie instalowania e2studio

Rysunek 11. Wybór kompilatora GCC ARM

Rysunek 12. Okno konfiguracji projektu

Takie bezpłatne narzędzia są często porównywalne użytkowo z bardzo drogimi pakietami płatnymi firm trzecich. Jedyna różnica (jednak często ważna w zastosowaniach profesjonalnych) to brak systemu wsparcia (support). Dla mikrokontrolerów Synergy Renesas przygotował środowisko projektowe e2studio. Pobieramy je ze strony Rensasa. Pakiet jest bezpłatny, ale żeby go pobrać, trzeba się zarejestrować (utworzyć konto).

Instalacja przebiega standardowo, jednak trzeba pamiętać by wybrać Device Families → Renesas Synergy, jak pokazano na rysunku 10. Następnie, w sekcji Select Additional Software, trzeba zaznaczyć GCC ARM Embedded 4.8 2014q3 (rysunek 11).

Oprócz e2studio musimy też pobrać i zainstalować pakiet Synergy Software Package SSP. Pierwszą, zalecaną czynnością po zainstalowaniu jest wykonanie aktualizacji, ponieważ wersja instalacyjna może nie zawierać najnowszych wersji wszystkich komponentów.

Rysunek 13. Kolejne okno konfiguracji projektu

Rysunek 14. Wybór szablonu projektu

Po uruchomieniu należy wywołać polecenie Check Updates wywoływane z menu Help. Wyszukiwanie najnowszych wersji wymaga połączenia komputera z Internetem. Po zainstalowaniu aktualizacji pakiet jest gotowy do użycia.

Formalny opis wszystkich okien, menu narzędziowego itp. jest możliwy, ale przynajmniej dla poczatkującego użytkownika mało przydatny. Najlepiej jest pokazać na prostym przykładzie tworzenie, kompilowanie i uruchomienie prostego przykładu. Bardziej zaawansowane funkcje e2studio (a jest ich sporo) można poznawać stopniowo w miarę potrzeb. Dlatego krok po kroku pokażę sposób utworzenia projektu dla mikrokontrolerów z rodziny Synergy.

Pracę rozpoczynamy od wybrania z menu File polecenia New → Synergy Project. Otwiera się wtedy okno Project Configuration pokazane na rysunku 12, w którym musimy wpisać nazwę projektu w polu Project Name i wybrać folder dla plików projektu w polu Location.

Rysunek 15. Wybór otwarcia perspektywy konfiguracji

Rysunek 16. Otwieranie perspektywy konfiguracji

Po zaznaczeniu opcji Use default location projekt zostanie zapisany w lokalizacji domyślnej, przyjętej w momencie instalacji. Przy pierwszym projekcie jesteśmy proszeni o podanie ścieżki dostępu do pliku licencji kompilatora GCC. Jeżeli pakiet kompilatora został prawidłowo zainstalowany, to plik licencji jest zapisany w folderze domyślnym Renesase2_studiointernalprojectgenarmLicenses. Przy tworzeniu kolejnych projektów nie musimy wskazywać pliku licencji.

Po zaakceptowaniu zmian jest wyświetlane okno konfiguracji projektu pokazane na rysunku 13. W tym oknie wybieramy moduł ewaluacyjny. W rozwijanej liście Board znajdujemy i zaznaczamy moduł SK-S7G2. Jednocześnie w oknie Device zostaje wyświetlony typ wybranego mikrokontrolera.

Rysunek 17. Zakładka ustawień BSP

Rysunek 18. Zakładka Clock – konfigurowanie taktowania mikrokontrolera

Ponieważ mamy zainstalowany tylko bezpłatny kompilator GCC, to sekcja Select Tools pozostaje z ustawieniami domyślnymi. W oknie Available Tools są wyświetlane dostępne narzędzia dla naszego projektu: kompilator GCC ARM, programator/debugger J-Link ARM, RTOS Express Logic ThreadX, IO Register Supported oraz Software Manual Support.

W kolejnym kroku wybieramy szablon projektu S7G2-SK Blinky (rysunek 14). Po kliknięciu na przycisk Finish zostaje wyświetlone okno z pytaniem o otwarcie perspektywy konfiguracyjnej (rysunek 15). Klikamy na Yes i e2studio tworzy projekt według wybranego szablonu w pespektywie konfiguracyjnej.

Rysunek 19. Zakładka Pins

Rysunek 20. Zakładka Threads

Synergy Configuration

Mikrokontroler mający rozbudowane układy peryferyjne, systemy przerwań i taktowania wymaga wstępnej konfiguracji. Konfigurowanie zwykle wykonuje się zapisując rejestry konfiguracyjne. Im bardziej skomplikowany mikrokontroler, tym bardziej żmudne jest jego konfigurowanie.

Aby ułatwić pracę programistom wiele programów narzędziowych IDE ma wbudowywane konfiguratory, które znacznie tę pracę ułatwiają. Konfigurator wbudowany w e2studio nazywa się Synergy Configurator, a jego ustawienia są zapisywane w pliku configuration.xml. Otwarcie tego pliku powoduje otwarcie perspektywy konfiguracyjnej z konfiguracją projektu.

Rysunek 21. Zakładka ICU

Rysunek 22. Zakładka Components

Pespektywę konfiguracyjna otwieramy po kliknięciu na przycisk Synergy Configuration, jak pokazano na rysunku 16. Konfiguracje są podzielone funkcjonalnie na etapy wybierane za pomocą zakładek:

  • BSP. Wybiera się tu wersję biblioteki BSP, moduł ewaluacyjny i mikrokontroler. Te ustawienia zostały wskazane w trakcie generowania projektu Synergy, ale tu można je zmienić. Z zakładką jest skojarzone okno Properties (rysunek 17), w którym są wyświetlane ustawienia dotyczące wybranego mikrokontrolera. Te ustawienia można zmieniać z poziomu okna Properties.
  • Clock. Przeznaczona do skonfigurowania systemu taktowania mikrokontrolera. Zakładka jest przedstawiona w formie graficznej, co znacznie ułatwia konfigurowanie taktowania. Jeżeli któreś z ustawień nie jest możliwe do uzyskania, na przykład - taktowanie modułu USB częstotliwością 48 MHz, to ustawienie jest wyświetlane na czerwono, jak na rysunku 18.
  • Pins. Przeznaczona do graficznego konfigurowania funkcji wyprowadzeń mikrokontrolera. Wyprowadzenia mogą być konfigurowane w dwóch grupach - jako linie portów lub jako wyprowadzenia układów peryferyjnych (rysunek 19).
  • Threads. Przeznaczona do dodawania i konfigurowania komponentów, które chcielibyśmy użyć w projekcie. Ponieważ w naszym projekcie nie używamy RTOS poprzestaniemy na domyślnym HAL/Common (rysunek 20).
  • ICU (Interrupt Controller Unit). Pokazuje wszystkie źródła przerwań od układów peryferyjnych i umożliwia skonfigurowanie przerwań (rysunek 21).
  • Components. Wyświetla komponenty biblioteki SSP oraz dołączone do projektu (rysunek 22). Komponenty mogą być dołączane za pomocą zakładki Threads.

Wszystkie generowane konfiguracje są umieszczane w plikach źródłowych projektu po kliknięciu na Generate Project Content. Te pliki są umieszczane w folderach o nazwach: synergy_gen, synergy i synergy_cfg. Nie powinno się plików konfiguracyjnych modyfikować ręcznie. Jeżeli trzeba coś zmienić, to należy to zrobić za pomocą programu Synergy Configurator. W przeciwnym przypadku ręcznie naniesione zmiany zostaną nadpisane przy kolejnym uruchomieniu konfiguratora.

Rysunek 23. Struktura plików projektu

Rysunek 24. Ustawienie w trybie Debug

W katalogu synergy_cfg są umieszczone pliki konfigurujące komponenty projektu Synergy. Te konfiguracje bazują na ustawieniach zapisanych w perspektywie Synergy Configuration. Katalog synergy zawiera pliki źródłowe wydzielone z biblioteki SSP przeznaczone dla komponentów aktualnie używanych w projekcie. Konfiguracja tych komponentów jest umieszczona również w katalogu synergy_cfg. Katalog synergy_gen zawiera konfiguracje wcieleń komponentów, które użytkownik dodał do projektu.

Jak pokazano na rysunku 23, tylko plik źródłowy hal_entry.c jest przeznaczony do edytowania przez użytkownika. Nawet plik main.c jest generowany przez konfigurator i nie powinien być edytowany przez użytkownika.

Rysunek 25. Okno sterujące sprzętowego debuggera Segger J-Link

Rysunek 26. Uruchamianie debugowania

Wróćmy do naszego projektu, którego zadaniem jest miganie diodą LED. Konfigurator projektu wygenerował między innymi plik źródłowy hal_entry.c przeznaczony do modyfikacji przez użytkownika, umieszczony w katalogu src oraz plik main.c umieszczony w katalogu src/synergy_gen. Funkcję główną main() pokazano na listingu 1.

Funkcja hal_entry.c jest przeznaczona do edycji i jest raczej nieskomplikowana. Odczytuje poziom występujący na liniach portów sterujących trzema diodami LED zamontowanymi na płytce SK-S7G2, zmienia go na przeciwny i odlicza opóźnienie ok 1 sekundy. Funkcja biblioteczna R_BSP_SoftwareDelay odlicza opóźnienie programowo - nie używa do tego celu liczników sprzętowych ani układu przerwań.

Rysunek 27. Okno debugowania konfiguracji

Rysunek 28. Dodanie drivera GPT

Jak wiemy, w projekcie zostały umieszczone pliki konfiguracyjne wygenerowane przez konfigurator Synergy. Konfigurowanie nie jest jawnie uruchamiane w programie głównym. Żeby zobaczyć jak przebiega konfiguracja wykorzystamy możliwość sprzętowego debugowania programu.

Projekt musi być ustawiany w trybie Debug. Robimy to klikając obok ikonki młotka w pasku narzędzi (rysunek 24). Następnie kompilujemy projekt. Po bezbłędnym skompilowaniu możemy przejść do debugowania. Łączymy moduł kablem USB ze złączem microUSB (J19 - DEBUG_USB) z portem USB komputera PC.

Rysunek 29. Właściwości drivera GPT

Rysunek 30. Konfigurowanie przerwań od drivera GPT0

Po automatycznym zainstalowaniu się sterownika J-Link można przejść do sprzętowego debugowania programu. Jeśli debugger J-link jest przyłączony do komputera, to automatycznie jest wyświetlane okno Segger J-Link Control Panel (rysunek 25).

Debugowanie jest uruchamiane po kliknięciu na ikonkę przypominającą owada i wybraniu Debug As → Renesas GDB Hardware Debugging (rysunek 26). Debbuger programu e2studio działa podobnie jak w środowiskach IDE innych producentów.

Listing 1. Funkcja main()

Listing 2. Funkcja migania diodami LED

Do sterowania debugowaniem używa się następujących ikonek:

  • uruchom program,
  • zatrzymaj program,
  • zakończ debugowanie,
  • odłącz proces debugowania,
  • wykonanie jednego kroku programu z wejściem do funkcji,
  • wykonanie całej funkcji,
  • krok powrotu,
  • debugowanie instrukcji assemblera,
  • usuń wszystkie punkty zatrzymania (breakpoints),
  • zapisz program do pamięci,
  • zeruj debugger,
  • zeruj mikrokontroler (działanie programu),
  • odśwież.

Listing 3. Funkcja Reset_Handler

Listing 4. Funkcja inicjalizacji mikrokontrolera

Po uruchomieniu debugowania automatycznie są wyświetlane okna: Debug, Project Explorer, okno z debugowanym kodem i Disassembly. W oknie z debugowanym kodem będziemy oglądać wykonywanie programu napisanego w C, a w oknie Dissasembly kod w aseblerze.

Teraz możemy zobaczyć jak się wykonuje nasz program z listingu 2. Wskaźnik rozkazów nie zatrzymuje się na wywołaniu pierwszej procedury z funkcji main(), ale na pierwszej procedurze funkcji Reset_Handler(), którą pokazano na listingu 3. Jak się łatwo domyślić, jest to funkcja wywoływana po zerowaniu mikrokontrolera i to dopiero ona wywołuje funkcję główną main(). Jednak zanim to nastąpi, wywoływana jest funkcja System Init() umieszczona w pliku startup_S7G2.c (listingu 4).

 

Listing 5. Konfigurowanie taktowania mikrokontrolera

 

Listing 6. Plik nagłówkowy bsp_clock_cfg.h

Zgodnie z przewidywaniami inicjalizacja jest dość rozbudowana i zawiera procedury ustawiające między innymi taktowanie, system przerwań, protekcję zapisu rejestrów, inicjowanie linii GPIO itp. Każdą z funkcji inicjalizujących można w debugerze wykonywać krokowo i posiłkując się dokumentacją mikrokontrolera patrzeć jak postępuje konfigurowanie mikrokontrolera.

Możemy jako przykład zobaczyć jak wygląda ustawianie taktowania mikrokontrolera wykonywane przez procedurę bsp_clock_init ( listing 5). Ustawienia taktowania są zapisane w pliku bsp_clock_cfg.h (listing 6). Istnieje też możliwość debugowania konfiguracji projektu. Zamiast Debug As klikamy na Debug Configurations i w nim na zakładkę Debug (rysunek 27). Po kliknięciu na przycisk Debug jest wyświetlane okno z plikiem startup_S7G2.c (rysunku 28).

Listing 7. Zmodyfikowany fragment pliku hal_data.h

Listing 8. zmodyfikowany fragment pliku hal_data.c

Na koniec pokażę jak dodać nowy komponent do konfiguracji projektu. Będzie to sprzętowy timer GPT odliczający opóźnienia. Ma on zastąpić możliwość programowego odliczania opóźnień w naszym projekcie. Jak wiemy dodawanie komponentów może by wykonywane za pomocą zakładki Threads.

Najpierw konfigurujemy przerwania od GPT0 zgłaszane przy przepełnieniu licznika (rysunek 29). Potem we właściwościach licznika (zakładka Threads) wpisujemy: Period value=1, Period unit = seconds, Callback = user_gpt_callback (rysunek 30).

Tak skonfigurowany Timer przepełnia się i zgłasza przerwanie co 1 sekundę. Teraz na podstawie nowej konfiguracji Synergy Configurator wygeneruje nowe pliki konfiguracyjne po kliknięciu na Generate Project Content. W pliku hal_data.h konfigurator dopisał definicje pokazane na listingu 7.

Listing 9. Procedura obsługi przerwania

Listing 10. Miganie diodami ze zmodyfikowanym odliczaniem opóźnień

A w pliku hal_data.c konfigurator dopisał definicję konfiguracji licznika (listing 8). Teraz pozostaje napisać tylko procedurę user_gpr_callback wywoływaną przy każdym zgłoszeniu przerwania od licznika GPT. Tę procedurę możemy umieścić tylko w pliku hal_entry.c, jak pokazano na listingu 9. Zmodyfikowana pętla cyklicznie gasząca i zapalająca diody LED na module ewaluacyjnym pokazano na listingu 10.

Tomasz Jabłoński, EP

Pozostałe artykuły

System sterowania DMX512 dla każdego (3) Adresowanie urządzeń

Numer: Sierpień/2016

W kolejnej części kursu obsługi urządzeń z interfejsem DMX512 wykonamy próbne sterowanie oświetleniem w postaci diod LED RGB. Zainstalujemy też program pomocniczy, ułatwiający adresowanie urządzeń DMX i chroniący przed popełnianiem błędów.

Zastosowanie modułu Wi-Fi ESP-12 (2). Wirtualny interfejs szeregowy

Numer: Sierpień/2016

UART jest jednym z interfejsów używanych do komunikacji. Jest on łatwy w obsłudze programowej i użyciu, szczególnie w wypadku komunikacji z komputerem PC. Dla uzyskania podstawowej funkcjonalności jest przyłączenie jedynie 3 linii: RxD, TxD oraz masy. Ileż prościej by było, gdyby można zastosować taki interfejs bez używania żadnych kabli. Pozwoliłoby to na bezproblemową komunikację komputera z systemem wbudowanym, bez konieczności ...

Programowanie paneli HMI (4)

Numer: Lipiec/2016

Praca z nowym urządzeniem zawsze zaczyna się od prostego przykładu. Takim przykładem zazwyczaj jest Hello world, czyli tak naprawdę sprawdzenie poprawności działania urządzenia. W tym odcinku kursu HMI wykonamy nieskomplikowany ekran wizualizacji z napisem "Hello world!".

System sterowania DMX512 dla każdego (2). Konfigurowanie urządzeń oraz okablowanie sieci

Numer: Lipiec/2016

W kolejnej części kursu obsługi urządzeń z interfejsem DMX512 zajmiemy się skonfigurowaniem urządzeń w sieci DMX512. Podamy też uwagi, które pozwolą na wykonanie poprawnego okablowania oraz uzyskanie wymaganego zasięgu transmisji danych. Jest to szczególnie ważne przy tworzeniu rozległych instalacji scenicznych.

Podstawy programowania STM32F746G-DISCO (3). Jak zbudować oscyloskop z FFT z użyciem STM32F746G-DISCO

Numer: Lipiec/2016

W ostatniej części artykułu poświęconego aplikacji próbkującej i wyświetlającej sygnał z wejścia liniowego zostaną omówione pakiet BSP, biblioteki graficzna STemWin, matematyczna ARM CMSIS DSP oraz moduł do wykrywania podstawowych gestów wykonanych przez użytkownika na panelu dotykowym.

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Sierpień 2017

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym