LinkedIn YouTube Facebook
Szukaj

Wstecz
IoT

Renesas Synergy – pierwszy projekt w e2studio

Ustawienia taktowania są zapisane w pliku bsp_clock_cfg.hlisting 6.

List. 6. Plik nagłówkowy bsp_clock_cfg.h

/* generated configuration header file - do not edit */
#ifndef BSP_CLOCK_CFG_H_
#define BSP_CLOCK_CFG_H_
#define BSP_CFG_XTAL_HZ (24000000) /* XTAL 24000000Hz */
#define BSP_CFG_PLL_SOURCE (CGC_CLOCK_MAIN_OSC) /* PLL Src: XTAL */
#define BSP_CFG_HOCO_FREQUENCY (0) /* HOCO 16MHz */
#define BSP_CFG_PLL_DIV (CGC_PLL_DIV_2) /* PLL Div /2 */
#define BSP_CFG_PLL_MUL (20.0) /* PLL Mul x20.0 */
#define BSP_CFG_CLOCK_SOURCE (CGC_CLOCK_PLL) /* Clock Src: PLL */
#define BSP_CFG_ICK_DIV (CGC_SYS_CLOCK_DIV_1) /* ICLK Div /1 */
#define BSP_CFG_PCKA_DIV (CGC_SYS_CLOCK_DIV_2) /* PCLKA Div /2 */
#define BSP_CFG_PCKB_DIV (CGC_SYS_CLOCK_DIV_4) /* PCLKB Div /4 */
#define BSP_CFG_PCKC_DIV (CGC_SYS_CLOCK_DIV_4) /* PCLKC Div /4 */
#define BSP_CFG_PCKD_DIV (CGC_SYS_CLOCK_DIV_2) /* PCLKD Div /2 */
#define BSP_CFG_SDCLK_OUTPUT (1) /* SDCLKout On */
#define BSP_CFG_BCK_DIV (CGC_SYS_CLOCK_DIV_2) /* BCLK Div /2 */
#define BSP_CFG_BCLK_OUTPUT (2) /* BCK/2 */
#define BSP_CFG_UCK_DIV (CGC_USB_CLOCK_DIV_5) /* UCLK Div /5 */
#define BSP_CFG_FCK_DIV (CGC_SYS_CLOCK_DIV_4) /* FCLK Div /4 */
#endif /* BSP_CLOCK_CFG_H_ */

Istnieje też możliwość debugowania konfiguracji projektu. Zamiast Debug As klikamy na Debug Configurations i w nim na zakładkę Debugrysunek 18.

 

 

Rys. 18. Okno konfiguracji debugowania

 

Po kliknięciu na przycisk Debug otwiera się okno z plikiem startup_S7G2.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 w zakładce Threads (rysunek 19).

 

 

Rys. 19. Dodanie drivera GPT

 

Po dodaniu drivera w modułach projektu pojawia się g_timer Timer Driver on r_gpt (rysunek 20), który trzeba skonfigurować w zakładce Propertiesrysunek 21.

 

Rys. 20. Po dodaniu drivera w modułach żywanych w projekcie pojawia się g_timer Timer Driver on r_gpt

 

Rys. 21. Konfiguracja drivera GPT

 

Najpierw konfigurujemy przerwania od GPT0 zgłaszane przy przepełnieniu licznika – rysunek 22. Potem we właściwościach licznika (zakładka Threads) wpisujemy:

  • Period value=1,
  • period unit = seconds i
  • Callback = user_gpt_callback.

Tak skonfigurowany timer przepełnia się i zgłasza przerwanie co 1 s.

 

Rys. 22. Konfigurowanie przerwań od drivera GPT0

 

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.

 

List. 7. Zmodyfikowany fragment pliku hal_data.h

extern const timer_instance_t g_timer;
#if TIMER_ON_GPT_CALLBACK_USED_g_timer
void user_gpt_callback(timer_callback_args_t * p_args);
#endif

W pliku hal_data.c konfigurator dopisał definicje konfiguracji licznika – listing 8.

List. 8. zmodyfikowany fragment pliku hal_data.c

#pragma weak user_gpt_callback  user_gpt_callback_internal
static timer_ctrl_t g_timer_ctrl;
static const timer_cfg_t g_timer_cfg =
{.mode = TIMER_MODE_PERIODIC,.period = 1,.unit = TIMER_UNIT_PERIOD_SEC,.duty_cycle = 50,.duty_cycle_unit =
   TIMER_PWM_UNIT_RAW_COUNTS,
.channel = 0,.autostart = true,.p_callback = user_gpt_callback,.p_context = &g_timer,.p_extend = &g_timer_extend };
/* Instance structure to use this module. */
const timer_instance_t g_timer =
{.p_ctrl = &g_timer_ctrl,.p_cfg = &g_timer_cfg,.p_api = &g_timer_on_gpt };
#if TIMER_ON_GPT_CALLBACK_USED_g_timer
/*******************************************************************************************************************//**
 * @brief  This is a weak example callback function. It should be overridden by defining a user callback function 
 *    with the prototype below.
 *    - void user_gpt_callback(timer_callback_args_t * p_args)
 *
 * @param[in] p_args Callback arguments used to identify what caused the callback.
 **********************************************************************************************************************/
void user_gpt_callback_internal(timer_callback_args_t * p_args);
void user_gpt_callback_internal(timer_callback_args_t * p_args)
{
 /** Do nothing. */
 SSP_PARAMETER_NOT_USED(p_args);
}
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.