sysview: always use TG as timestamp source

This commit is contained in:
Ivan Grokhotkov 2017-08-29 18:34:43 +08:00
parent fba9678c56
commit c2fff997ea
3 changed files with 8 additions and 26 deletions

View file

@ -63,13 +63,13 @@ config SYSVIEW_ENABLE
help help
Enables supporrt for SEGGER SystemView tracing functionality. Enables supporrt for SEGGER SystemView tracing functionality.
if !FREERTOS_UNICORE
choice SYSVIEW_TS_SOURCE choice SYSVIEW_TS_SOURCE
prompt "ESP32 timer to use as SystemView timestamp source" prompt "ESP32 timer to use as SystemView timestamp source"
depends on SYSVIEW_ENABLE depends on SYSVIEW_ENABLE
default SYSVIEW_TS_SOURCE_TIMER_00 default SYSVIEW_TS_SOURCE_TIMER_00
help help
SystemView needs one source for timestamps when tracing events from both cores. SystemView needs to use a hardware timer as the source of timestamps
when tracing
This option selects HW timer for it. This option selects HW timer for it.
config SYSVIEW_TS_SOURCE_TIMER_00 config SYSVIEW_TS_SOURCE_TIMER_00
@ -93,7 +93,6 @@ config SYSVIEW_TS_SOURCE_TIMER_11
Select this to use timer 1 of group 1 Select this to use timer 1 of group 1
endchoice endchoice
endif #FREERTOS_UNICORE
config SYSVIEW_EVT_OVERFLOW_ENABLE config SYSVIEW_EVT_OVERFLOW_ENABLE
bool "Trace Buffer Overflow Event" bool "Trace Buffer Overflow Event"

View file

@ -70,6 +70,7 @@ Revision: $Rev: 3734 $
#include "esp_app_trace.h" #include "esp_app_trace.h"
#include "esp_app_trace_util.h" #include "esp_app_trace_util.h"
#include "esp_intr_alloc.h" #include "esp_intr_alloc.h"
#include "esp_clk.h"
extern const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI; extern const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI;
@ -85,14 +86,12 @@ extern const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI;
// The target device name // The target device name
#define SYSVIEW_DEVICE_NAME "ESP32" #define SYSVIEW_DEVICE_NAME "ESP32"
// Timer group timer divisor
#define SYSVIEW_TIMER_DIV 2
// Frequency of the timestamp. // Frequency of the timestamp.
#if CONFIG_FREERTOS_UNICORE == 0 #define SYSVIEW_TIMESTAMP_FREQ (esp_clk_apb_freq() / SYSVIEW_TIMER_DIV)
#define SYSVIEW_TIMESTAMP_FREQ (TIMER_BASE_CLK/2)
#else
#define SYSVIEW_TIMESTAMP_FREQ (XT_CLOCK_FREQ)
#endif
// System Frequency. // System Frequency.
#define SYSVIEW_CPU_FREQ (XT_CLOCK_FREQ) #define SYSVIEW_CPU_FREQ (esp_clk_cpu_freq())
// The lowest RAM address used for IDs (pointers) // The lowest RAM address used for IDs (pointers)
#define SYSVIEW_RAM_BASE (0x3F400000) #define SYSVIEW_RAM_BASE (0x3F400000)
@ -104,10 +103,8 @@ extern const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI;
#define SYSTICK_INTR_ID (ETS_INTERNAL_TIMER1_INTR_SOURCE+ETS_INTERNAL_INTR_SOURCE_OFF) #define SYSTICK_INTR_ID (ETS_INTERNAL_TIMER1_INTR_SOURCE+ETS_INTERNAL_INTR_SOURCE_OFF)
#endif #endif
#if CONFIG_FREERTOS_UNICORE == 0
static timer_idx_t s_ts_timer_idx; static timer_idx_t s_ts_timer_idx;
static timer_group_t s_ts_timer_group; static timer_group_t s_ts_timer_group;
#endif
// SystemView is single core specific: it implies that SEGGER_SYSVIEW_LOCK() // SystemView is single core specific: it implies that SEGGER_SYSVIEW_LOCK()
// disables IRQs (disables rescheduling globaly). So we can not use finite timeouts for locks and return error // disables IRQs (disables rescheduling globaly). So we can not use finite timeouts for locks and return error
@ -214,7 +211,6 @@ static void _cbSendSystemDesc(void) {
* *
********************************************************************** **********************************************************************
*/ */
#if CONFIG_FREERTOS_UNICORE == 0
static void SEGGER_SYSVIEW_TS_Init() static void SEGGER_SYSVIEW_TS_Init()
{ {
timer_config_t config; timer_config_t config;
@ -238,7 +234,7 @@ static void SEGGER_SYSVIEW_TS_Init()
config.alarm_en = 0; config.alarm_en = 0;
config.auto_reload = 0; config.auto_reload = 0;
config.counter_dir = TIMER_COUNT_UP; config.counter_dir = TIMER_COUNT_UP;
config.divider = 2; config.divider = SYSVIEW_TIMER_DIV;
config.counter_en = 0; config.counter_en = 0;
/*Configure timer*/ /*Configure timer*/
timer_init(s_ts_timer_group, s_ts_timer_idx, &config); timer_init(s_ts_timer_group, s_ts_timer_idx, &config);
@ -247,14 +243,11 @@ static void SEGGER_SYSVIEW_TS_Init()
/*Enable timer interrupt*/ /*Enable timer interrupt*/
timer_start(s_ts_timer_group, s_ts_timer_idx); timer_start(s_ts_timer_group, s_ts_timer_idx);
} }
#endif
void SEGGER_SYSVIEW_Conf(void) { void SEGGER_SYSVIEW_Conf(void) {
U32 disable_evts = 0; U32 disable_evts = 0;
#if CONFIG_FREERTOS_UNICORE == 0
SEGGER_SYSVIEW_TS_Init(); SEGGER_SYSVIEW_TS_Init();
#endif
SEGGER_SYSVIEW_Init(SYSVIEW_TIMESTAMP_FREQ, SYSVIEW_CPU_FREQ, SEGGER_SYSVIEW_Init(SYSVIEW_TIMESTAMP_FREQ, SYSVIEW_CPU_FREQ,
&SYSVIEW_X_OS_TraceAPI, _cbSendSystemDesc); &SYSVIEW_X_OS_TraceAPI, _cbSendSystemDesc);
SEGGER_SYSVIEW_SetRAMBase(SYSVIEW_RAM_BASE); SEGGER_SYSVIEW_SetRAMBase(SYSVIEW_RAM_BASE);

View file

@ -26,16 +26,6 @@ const static char *TAG = "segger_rtt";
#define SYSVIEW_EVENTS_BUF_SZ 255U #define SYSVIEW_EVENTS_BUF_SZ 255U
#if SYSVIEW_RTT_MAX_DATA_RATE > 0
#include "SEGGER_SYSVIEW_Conf.h"
#if CONFIG_FREERTOS_UNICORE == 0
#include "driver/timer.h"
#define SYSVIEW_TIMESTAMP_FREQ (TIMER_BASE_CLK/2)
#else
#define SYSVIEW_TIMESTAMP_FREQ (XT_CLOCK_FREQ)
#endif
#endif
// size of down channel data buf // size of down channel data buf
#define SYSVIEW_DOWN_BUF_SIZE 32 #define SYSVIEW_DOWN_BUF_SIZE 32
#define SEGGER_HOST_WAIT_TMO 500 //us #define SEGGER_HOST_WAIT_TMO 500 //us