Renesas Synergy – pierwszy projekt w e2studio
- Components – wyświetla komponenty biblioteki SSP i te bieżąca, które są dołączone do projektu – rysunek 11. Komponenty mogą być dołączane jeżeli to możliwe przez zakładkę Threads.
Rys. 11. Zakładka Components
Wszystkie konfiguracje generowane przez konfiguratora są umieszczane w plikach źródłowych projektu po kliknięciu na Generate Project Content – wygląd przycisku pokazano poniżej.
Pliki są umieszczane w folderach z prefiksem nazwy synergy: synergy_gen, synergy i synergy_cfg. Nie powinno się plików konfiguracyjnych modyfikować ręcznie. Jeżeli trzeba coś zmienić to należy to robić za pomocą narzędzia Synergy Configurator. W przeciwnym przypadku ręcznie naniesione zmiany zostaną nadpisane przez kolejne uruchomienie konfiguratora.
W katalogu synergy_cfg umieszczono 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 widać na rysunku 12 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.
Rys. 12. Struktura plików projektu
Wróćmy do naszego projektu „migacza LED”. Konfigurator projektu wygenerował dwa pliki źródłowe: main.c i hal_entry.c przeznaczone do modyfikacji przez użytkownika umieszczone w katalogu src/synergy_gen. Główną funkcję main() pokazano na listingu 1.
List. 1. Funkcja main()
int main(void) { hal_entry (); return 0; }
Nie robi ona niczego poza wywołaniem funkcji hal_entry() umieszczonej w pliku hal_entry.c – listing 2.
List. 2. Funkcja migania diodami LED
/*******************************************************************************************************************//** * @brief Blinky example application * * Blinks all leds at a rate of 1 second using the software delay function provided by the BSP. * Only references two other modules including the BSP, IOPORT. * **********************************************************************************************************************/ void hal_entry(void) { /* Define the units to be used with the software delay function */ const bsp_delay_units_t bsp_delay_units = BSP_DELAY_UNITS_MILLISECONDS; /* Set the blink frequency (must be <= bsp_delay_units */ const uint32_t freq_in_hz = 2; /* Calculate the delay in terms of bsp_delay_units */ const uint32_t delay = bsp_delay_units/freq_in_hz; /* LED type structure */ bsp_leds_t leds; /* LED state variable */ ioport_level_t level = IOPORT_LEVEL_HIGH; /* Get LED information for this board */ R_BSP_LedsGet(&leds); /* If this board has no LEDs then trap here */ if (0 == leds.led_count) { while(1); // There are no LEDs on this board } while(1) { /* Determine the next state of the LEDs */ if(IOPORT_LEVEL_LOW == level) { level = IOPORT_LEVEL_HIGH; } else { level = IOPORT_LEVEL_LOW; } /* Update all board LEDs */ for(uint32_t i = 0; i < leds.led_count; i++) { g_ioport.p_api->pinWrite(leds.p_leds[i], level); } /* Delay */ R_BSP_SoftwareDelay(delay, bsp_delay_units); } }
Funkcja hal_entry.c jest przeznaczona do edycji i jest stosunkowo prosta. Odczytuje stan linii portów sterujących trzema diodami LED umieszczonymi na płytce SK-S7G2, zmienia stan tych linii na przeciwny i odlicza opóźnienie ok. 1s.
Funkcja biblioteczna R_BSP_SoftwareDelay odlicza opóźnienie programowo – nie wykorzystuje do tego celu liczników sprzętowych ani układu przerwań. Potem pokażemy jak skonfigurować wewnętrzny licznik tak by przepełniał się co określony interwał i zgłaszał przerwanie. To przerwanie będzie wykorzystywane do odliczania opóźnień.
Program demonstracyjny jest prosty, ale jak wiemy w projekcie zostały umieszczone pliki konfiguracyjne wygenerowane przez konfiguratora Synergy. Cała konfiguracja nie jest jawnie wywoływana w programie głównym main(). Żeby zobaczyć jak jest wykonywana 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 13.
Rys. 13. ustawienie projektu w tryb Debug
Następnie kompilujemy projekt. Po bezbłędnej kompilacji, a taka powinna być dla projektu utworzonego z szablonu możemy przejść do debugowania. Łączymy moduł kablem USB ze złączem microUSB dołączonym do J19 DEBUG_USB zestawu SK-S7G2 (fotografia 14) z portem USB komputera PC.
Fot. 14. Położenie złącza DEBUG_USB w zestawie SK-S7G2