/********************************************************************* * SEGGER Microcontroller GmbH * * The Embedded Experts * ********************************************************************** * * * (c) 1995 - 2021 SEGGER Microcontroller GmbH * * * * www.segger.com Support: support@segger.com * * * ********************************************************************** * * * SEGGER SystemView * Real-time application analysis * * * ********************************************************************** * * * All rights reserved. * * * * SEGGER strongly recommends to not make any changes * * to or modify the source code of this software in order to stay * * compatible with the SystemView and RTT protocol, and J-Link. * * * * Redistribution and use in source and binary forms, with or * * without modification, are permitted provided that the following * * condition is met: * * * * o Redistributions of source code must retain the above copyright * * notice, this condition and the following disclaimer. * * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * * DAMAGE. * * * ********************************************************************** * * * SystemView version: 3.30 * * * ********************************************************************** -------------------------- END-OF-HEADER ----------------------------- File : SEGGER_SYSVIEW_Config_embOS_RZA1.c Purpose : Sample setup configuration of SystemView with embOS on Renesas RZA1 devices. Revision: $Rev: 12316 $ Additional information: SEGGER_SYSVIEW_TickCnt must be incremented in the SysTick handler before any SYSVIEW event is generated. Example in embOS RTOSInit.c: void SysTick_Handler(void) { #if (OS_PROFILE != 0) SEGGER_SYSVIEW_TickCnt++; // Increment SEGGER_SYSVIEW_TickCnt before calling OS_INT_EnterNestable(). #endif OS_INT_EnterNestable(); OS_TICK_Handle(); OS_INT_LeaveNestable(); } SEGGER_SYSVIEW_InterruptId has to be set in the IRQ handler to identify the active interrupt. */ #include "RTOS.h" #include "SEGGER_SYSVIEW.h" #include "SEGGER_SYSVIEW_embOS.h" /********************************************************************* * * Defines, fixed * ********************************************************************** */ #define OSTM_CNT (*(volatile unsigned int*) 0xFCFEC004u) #define OSTM_INT_ID (134) #define TIMER_INTERRUPT_PENDING() (OS_GIC_IsPending(OSTM_INT_ID)) /********************************************************************* * * Local functions * ********************************************************************** */ /********************************************************************* * * _cbSendSystemDesc() * * Function description * Sends SystemView description strings. */ static void _cbSendSystemDesc(void) { SEGGER_SYSVIEW_SendSysDesc("N=" SEGGER_SYSVIEW_APP_NAME ",O=embOS,D=" SEGGER_SYSVIEW_DEVICE_NAME ); #ifdef SEGGER_SYSVIEW_SYSDESC0 SEGGER_SYSVIEW_SendSysDesc(SEGGER_SYSVIEW_SYSDESC0); #endif #ifdef SEGGER_SYSVIEW_SYSDESC1 SEGGER_SYSVIEW_SendSysDesc(SEGGER_SYSVIEW_SYSDESC1); #endif #ifdef SEGGER_SYSVIEW_SYSDESC2 SEGGER_SYSVIEW_SendSysDesc(SEGGER_SYSVIEW_SYSDESC2); #endif } /********************************************************************* * * Global functions * ********************************************************************** */ /********************************************************************* * * SEGGER_SYSVIEW_Conf() * * Function description * Configure and initialize SystemView and register it with embOS. * * Additional information * If enabled, SEGGER_SYSVIEW_Conf() will also immediately start * recording events with SystemView. */ void SEGGER_SYSVIEW_Conf(void) { SEGGER_SYSVIEW_Init(SEGGER_SYSVIEW_TIMESTAMP_FREQ, SEGGER_SYSVIEW_CPU_FREQ, &SYSVIEW_X_OS_TraceAPI, _cbSendSystemDesc); OS_TRACE_SetAPI(&embOS_TraceAPI_SYSVIEW); // Configure embOS to use SYSVIEW. #if SEGGER_SYSVIEW_START_ON_INIT SEGGER_SYSVIEW_Start(); // Start recording to catch system initialization. #endif } /********************************************************************* * * SEGGER_SYSVIEW_X_GetTimestamp() * * Function description * Returns the current timestamp in cycles using the system tick * count and the SysTick counter. * All parameters of the SysTick have to be known and are set via * configuration defines on top of the file. * * Return value * The current timestamp. * * Additional information * SEGGER_SYSVIEW_X_GetTimestamp is always called when interrupts are * disabled. Therefore locking here is not required. */ U32 SEGGER_SYSVIEW_X_GetTimestamp(void) { U32 TickCount; U32 Cycles; // // Get the cycles of the current system tick. // Sample timer is down-counting, subtract the current value from the number of cycles per tick. // Cycles = OS_TIMER_RELOAD - OSTM_CNT; // // Get the system tick count. // TickCount = SEGGER_SYSVIEW_TickCnt; // // If a SysTick interrupt is pending, re-read timer and adjust result // if (TIMER_INTERRUPT_PENDING() != 0) { TickCount++; Cycles = OS_TIMER_RELOAD - OSTM_CNT; } Cycles += TickCount * OS_TIMER_RELOAD; return Cycles; } /********************************************************************* * * SEGGER_SYSVIEW_X_GetInterruptId() */ U32 SEGGER_SYSVIEW_X_GetInterruptId(void) { return SEGGER_SYSVIEW_InterruptId; } /*************************** End of file ****************************/