Aris Edge S3A3 – moduł z mikrokontrolerem Renesas Synergy S3
Renesas oferuje bardzo silne wsparcie programowe dla programistów. Do tej pory można było używać świetnego, bezpłatnego firmowego pakietu IDE znanego jako e2studio, zintegrowanego z firmowym pakietem SSP. Od pewnego czasu dostępny jest bezpłatny pakiet IAR Embedded Workbench, przeznaczony dla projektów z wykorzystaniem mikrokontrolerów Renesas Synergy. Pakiet IAR współpracuje z samodzielnym konfiguratorem SSC oferowanym przez Renesas. To wsparcie powoduje, że IAR Workbench ma takie same możliwości używania SSC i ich konfigurowania jak e2studio.
Firma Reloc, producent modułu, oferuje wsparcie projektów w postaci plików z rozszerzeniem .PACK używanych w bezpłatnym środowisku programowym e2studio. Pliki .PACK są przygotowywane dla konkretnej wersji bibliotek SSP i żeby ich używać musi być wybrana w konfiguracji odpowiednia wersja SSP. Dla naszego modułu w momencie pisania artykułu były dostępne pliki Reloc.Aris_Edge3.1.3.3.PACK przeznaczony dla wersji SSP V1.3.3 i Reloc.Aris_Edge3.1.4.0.PACK przeznaczony dla wersji SSP V1.4.0. Wsparcie dla modułu Aris Edge pokażemy na podstawie przykładowego projektu środowiska e2studio v 6.2.0 i biblioteki SSP V1.4.0.
W pierwszym kroku trzeba skopiować plik Reloc.Aris_Edge3.1.4.0.PACK do katalogu Renesas\Synergy\e2studioV6.2.0\internal\projectgen\arm\packs. Po uruchomieniu e2studio tworzymy nowy projekt z menu narzędziowego File->New->Synergy C/C++ Project (rysunki 5, 6 i 7).
Rys.6. Wybór rodzaju projektu (Synergy C executable)
Rys.7. Nazwa projektu, ścieżki dostępu do projektu i plików licencji
Na rysunku 8 zostało pokazane kolejne okno konfiguracji projektu, w którym wybiera się wersję zainstalowanej biblioteki SSP – w naszym przypadku V1.4.0 i wsparcie dla płyty Aris Edge 3. Możliwość wyboru aris_edge3 z rozwijanego okna board pojawi się po skopiowaniu pliku Reloc.Aris_Edge3.1.4.0.PACK do opisanej powyżej lokalizacji.

Rys.8. Wybór wersji biblioteki SSP i płyty Aris Edge 3
Ostatnim krokiem generowania projektu jest wybór rodzaju szkieletu. Do celów testowych możemy wybrać opcję Blinky. Wygenerowany projekt będzie cyklicznie zapalał i gasił diody LED2 i LED3 umieszczone na płytce. Na listingu pokazana jest procedura hal_entry.c wygenerowana przez kreator projektu i sterująca cyklicznym zapalaniem i gaszeniem diod LED2 i LED3.
/***********************************************************************************************************************
* File Name : hal_entry.c
* Description : This is a very simple example application that blinks all LEDs on a board.
***********************************************************************************************************************/
#include "hal_data.h"
/*******************************************************************************************************************//**
* @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);
}
}
Listing 1. Procedura sterująca zapaleniem i gaszeniem diod LED modułu
Rys.9. Wybór szkieletu projektu
Po kliknięciu na przycisk Finish, kreator projektu wygeneruje wszystkie niezbędne pliki źródłowe i pliki pomocnicze, w tym plik konfiguratora otwierany w oknie perspektywy Synergy Configuration.
Wybór aris_edge3 w oknie Board powoduje, że konfigurator projektu umieści kilka plików dodatkowych w folderze aris_edge3 – zostało to pokazane na rysunku 10. Poza definiowaniem diod LED2 i LED3 (listing 2) nie znajdziemy tam zbyt wielkiego wsparcia dla układów peryferyjnych. Dlatego należy je traktować jako szkielet wypełniany przez użytkownika zależnie od potrzeb.
/***********************************************************************************************************************
* Private global variables and functions
**********************************************************************************************************************/
/** Array of LED IOPORT pins. */
static const ioport_port_pin_t g_bsp_prv_leds[] =
{
IOPORT_PORT_03_PIN_03, ///< LED2
IOPORT_PORT_01_PIN_13, ///< LED3
};
/***********************************************************************************************************************
* Exported global variables (to be accessed by other files)
**********************************************************************************************************************/
/** Structure with LED information for this board. Recommended to get this information through R_BSP_LedsGet() function
* instead of using this structure directly to remove dependency on structure name. */
const bsp_leds_t g_bsp_leds =
{
.led_count = (uint16_t)(((uint16_t)sizeof(g_bsp_prv_leds) / (uint16_t)sizeof(g_bsp_prv_leds[0U]))),
.p_leds = &g_bsp_prv_leds[0]
};
Listing 2. Wsparcie użycia diod LED z pliku bsp_leds.c
Rys.10. Pliki związane z wyborem płyty aris_edge3
Trochę inaczej wygląda wsparcie pliku .PACK konfiguracji wyprowadzeń mikrokontrolera zapisanej w pliku configuration.xml i dostępnej w zakładce Pins perspektywy Configurations. Zdefiniowano tu wstępnie przypisania wyprowadzeń peryferiów do wyprowadzeń mikrokontrolera. Na przykład w standardzie Arduino interfejs I2C jest wyprowadzony na piny 9, 10 złącza J6. Do tego złącza są podłączone sygnały z portów P205 i P206 skonfigurowane jako linie SDA i SCL portu szeregowego I2C. Zostało to pokazane na rysunku 11.
Rys.11. Predefiniowana definicja wyprowadzeń modułu komunikacyjnego I2C
Jeżeli użytkownik chce korzystać z interfejsów komunikacyjnych, dla których przygotowano konfiguracje Pins, musi zdefiniować drivery do układów peryferyjnych. Na rysunku 12 pokazano przykład dodawania drivera dla interfejsu I2C.

Rys.12. Dodawanie obsługi interfejsu I2C Master w zakładce Thread



Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



