LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

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.5. Nowy projekt Synergy

 

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

Firma Arrow Electronics przygotowała 10 zestawów, w skład których wchodzą Aris Edge S3A3 oraz nakładka z ekranem LCD Aris Edge LCD. Będą one nagrodami w konkursie, w którym pytania oparte będą na treści artykułów o zestawie. Zadania konkursowe ogłoszone zostaną niebawem. Serdecznie zapraszamy do udziału już teraz!
Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC. Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.