From 46265063e3300ab613c03151d7aaade580b10554 Mon Sep 17 00:00:00 2001 From: Pavel Pisa Date: Thu, 21 Aug 2014 08:38:24 -0500 Subject: bsp/tms570: implemented support functions to satisfy complete tests build requirements. This patch enables to build all RTEMS tests for tms570ls3137_hdk_sdram BSP variant in in default build. Debug build with --enable-rtems-debug set has succeed for samples subset of tests as well. --- c/src/lib/libbsp/arm/tms570/Makefile.am | 9 ++++ .../lib/libbsp/arm/tms570/clock/benchmark_timer.c | 61 +++++++++++++++++++++ c/src/lib/libbsp/arm/tms570/clock/clock.c | 4 +- .../lib/libbsp/arm/tms570/include/system-clocks.h | 62 ++++++++++++++++++++++ .../arm/tms570/make/custom/tms570ls3137_hdk.cfg | 2 +- .../tms570/make/custom/tms570ls3137_hdk_intram.cfg | 2 +- .../tms570/make/custom/tms570ls3137_hdk_sdram.cfg | 2 +- c/src/lib/libbsp/arm/tms570/misc/cpucounterread.c | 44 +++++++++++++++ c/src/lib/libbsp/arm/tms570/preinstall.am | 4 ++ 9 files changed, 186 insertions(+), 4 deletions(-) create mode 100644 c/src/lib/libbsp/arm/tms570/clock/benchmark_timer.c create mode 100644 c/src/lib/libbsp/arm/tms570/include/system-clocks.h create mode 100644 c/src/lib/libbsp/arm/tms570/misc/cpucounterread.c diff --git a/c/src/lib/libbsp/arm/tms570/Makefile.am b/c/src/lib/libbsp/arm/tms570/Makefile.am index 02d7b666eb..e66cf79f60 100644 --- a/c/src/lib/libbsp/arm/tms570/Makefile.am +++ b/c/src/lib/libbsp/arm/tms570/Makefile.am @@ -39,6 +39,7 @@ include_bsp_HEADERS += include/tms570-rti.h include_bsp_HEADERS += include/tms570-vim.h include_bsp_HEADERS += include/tms570-pom.h include_bsp_HEADERS += include/tms570-sci-driver.h +include_bsp_HEADERS += include/system-clocks.h include_HEADERS += ../../shared/include/tm27.h @@ -78,6 +79,7 @@ libbsp_a_SOURCES += ../../shared/bsppredriverhook.c libbsp_a_SOURCES += ../../shared/gnatinstallhandler.c libbsp_a_SOURCES += ../../shared/sbrk.c libbsp_a_SOURCES += ../../shared/src/stackalloc.c +libbsp_a_SOURCES += ../../shared/cpucounterdiff.c # Startup libbsp_a_SOURCES += ../shared/startup/bsp-start-memcpy.S @@ -105,6 +107,7 @@ libbsp_a_SOURCES += console/tms570-sci.c # Clock libbsp_a_SOURCES += ../../shared/clockdrv_shell.h libbsp_a_SOURCES += clock/clock.c +libbsp_a_SOURCES += clock/benchmark_timer.c # RTC @@ -115,9 +118,15 @@ libbsp_a_SOURCES += clock/clock.c # Benchmark Timer # Misc +libbsp_a_SOURCES += misc/cpucounterread.c # Watchdog +# Cache +libbsp_a_SOURCES += ../../../libcpu/shared/src/cache_manager.c +libbsp_a_SOURCES += ../../../libcpu/arm/shared/include/cache_.h +libbsp_a_CPPFLAGS += -I$(srcdir)/../../../libcpu/arm/shared/include + # Start hooks libbsp_a_SOURCES += startup/bspstarthooks.c diff --git a/c/src/lib/libbsp/arm/tms570/clock/benchmark_timer.c b/c/src/lib/libbsp/arm/tms570/clock/benchmark_timer.c new file mode 100644 index 0000000000..b45f0f4919 --- /dev/null +++ b/c/src/lib/libbsp/arm/tms570/clock/benchmark_timer.c @@ -0,0 +1,61 @@ +/** + * @file benchmark_timer.c + * + * @ingroup tms570 + * + * @brief clock functions definitions. + */ + +/* + * Copyright (c) 2014 Pavel Pisa + * + * Czech Technical University in Prague + * Zikova 1903/4 + * 166 36 Praha 6 + * Czech Republic + * + * Based on LPC24xx and LPC1768 BSP + * by embedded brains GmbH and others + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#include + +#include +#include +#include +#include +#include + +bool benchmark_timer_find_average_overhead = false; + +static uint32_t benchmark_timer_base; + +void benchmark_timer_initialize(void) +{ + benchmark_timer_base = _CPU_Counter_read(); +} + +uint32_t benchmark_timer_read(void) +{ + uint32_t delta = _CPU_Counter_read() - benchmark_timer_base; + + if (benchmark_timer_find_average_overhead) { + return delta; + } else { + /* TODO check on hardware */ + if (delta > 74) { + return delta - 74; + } else { + return 0; + } + } +} + +void benchmark_timer_disable_subtracting_average_overhead(bool find_average_overhead ) +{ + benchmark_timer_find_average_overhead = find_average_overhead; +} diff --git a/c/src/lib/libbsp/arm/tms570/clock/clock.c b/c/src/lib/libbsp/arm/tms570/clock/clock.c index 2a8bb5f4a6..4dba949c86 100644 --- a/c/src/lib/libbsp/arm/tms570/clock/clock.c +++ b/c/src/lib/libbsp/arm/tms570/clock/clock.c @@ -29,6 +29,7 @@ #include #include #include +#include /** * holds HW counter value since last interrupt event @@ -49,6 +50,8 @@ static void tms570_clock_driver_support_initialize_hardware( void ) uint32_t microsec_per_tick = rtems_configuration_get_microseconds_per_tick(); + rtems_counter_initialize_converter(BSP_PLL_OUT_CLOCK); + /* Hardware specific initialize */ TMS570_RTI.RTIGCTRL = 0; TMS570_RTI.RTICPUC0 = BSP_PLL_OUT_CLOCK /1000000 / 2; /* prescaler */ @@ -80,7 +83,6 @@ static void tms570_clock_driver_support_at_tick( void ) { TMS570_RTI.RTIINTFLAG = 0x00000001; tms570_rti_last_tick_fcr0 = TMS570_RTI.RTICOMP0 - TMS570_RTI.RTIUDCP0; - /* TMS570_RTI.RTICOMP0 += 1000; */ } /** diff --git a/c/src/lib/libbsp/arm/tms570/include/system-clocks.h b/c/src/lib/libbsp/arm/tms570/include/system-clocks.h new file mode 100644 index 0000000000..d441ec475a --- /dev/null +++ b/c/src/lib/libbsp/arm/tms570/include/system-clocks.h @@ -0,0 +1,62 @@ +/** + * @file benchmark_timer.c + * + * @ingroup tms570 + * + * @brief System clocks. + */ + +/* + * Copyright (c) 2014 Pavel Pisa + * + * Czech Technical University in Prague + * Zikova 1903/4 + * 166 36 Praha 6 + * Czech Republic + * + * Based on LPC24xx and LPC1768 BSP + * by embedded brains GmbH and others + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifndef LIBBSP_ARM_TMS570_SYSTEM_CLOCKS_H +#define LIBBSP_ARM_TMS570_SYSTEM_CLOCKS_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * @defgroup tms570_clock System Clocks + * + * @ingroup tms570 + * + * @brief System clocks. + * + * @{ + */ + +/** + * @brief Returns current standard timer value in microseconds. + * + * This function uses RTI module free running counter 0 used + * which is used as system tick timebase as well. + */ +static inline unsigned tms570_timer(void) +{ + uint32_t actual_fcr0 = TMS570_RTI.RTIFRC0; + return actual_fcr0; +} + +/** @} */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBBSP_ARM_TMS570_SYSTEM_CLOCKS_H */ diff --git a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk.cfg b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk.cfg index eb4a65fd55..e90414acc9 100644 --- a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk.cfg +++ b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk.cfg @@ -8,7 +8,7 @@ RTEMS_CPU = arm CPU_CFLAGS = -march=armv7-r -mthumb -mbig-endian -CFLAGS_OPTIMIZE_V = -O2 -ggdb3 -DNDEBUG +CFLAGS_OPTIMIZE_V = -O2 -ggdb BINEXT?=.bin # This defines the operations performed on the linked executable. diff --git a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_intram.cfg b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_intram.cfg index eb4a65fd55..e90414acc9 100644 --- a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_intram.cfg +++ b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_intram.cfg @@ -8,7 +8,7 @@ RTEMS_CPU = arm CPU_CFLAGS = -march=armv7-r -mthumb -mbig-endian -CFLAGS_OPTIMIZE_V = -O2 -ggdb3 -DNDEBUG +CFLAGS_OPTIMIZE_V = -O2 -ggdb BINEXT?=.bin # This defines the operations performed on the linked executable. diff --git a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_sdram.cfg b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_sdram.cfg index eb4a65fd55..e90414acc9 100644 --- a/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_sdram.cfg +++ b/c/src/lib/libbsp/arm/tms570/make/custom/tms570ls3137_hdk_sdram.cfg @@ -8,7 +8,7 @@ RTEMS_CPU = arm CPU_CFLAGS = -march=armv7-r -mthumb -mbig-endian -CFLAGS_OPTIMIZE_V = -O2 -ggdb3 -DNDEBUG +CFLAGS_OPTIMIZE_V = -O2 -ggdb BINEXT?=.bin # This defines the operations performed on the linked executable. diff --git a/c/src/lib/libbsp/arm/tms570/misc/cpucounterread.c b/c/src/lib/libbsp/arm/tms570/misc/cpucounterread.c new file mode 100644 index 0000000000..f25380cc85 --- /dev/null +++ b/c/src/lib/libbsp/arm/tms570/misc/cpucounterread.c @@ -0,0 +1,44 @@ +/** + * @file + * + * @ingroup tms570_clocks + * + * @brief System clocks. + */ + +/* + * Copyright (c) 2014 Pavel Pisa + * + * Czech Technical University in Prague + * Zikova 1903/4 + * 166 36 Praha 6 + * Czech Republic + * + * Based on LPC24xx and LPC1768 BSP + * by embedded brains GmbH and others + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#include + +#include +#include + + +/** + * @brief returns the actual value of Cortex-R cycle counter register + * + * The register is incremented at each core clock period + * + * @retval x actual core clock counter value + * + */ +CPU_Counter_ticks _CPU_Counter_read(void) +{ + uint32_t ticks; + asm volatile ("mrc p15, 0, %0, c9, c13, 0\n": "=r" (ticks)); + return ticks; +} diff --git a/c/src/lib/libbsp/arm/tms570/preinstall.am b/c/src/lib/libbsp/arm/tms570/preinstall.am index 81dbad1506..d7ac6287d3 100644 --- a/c/src/lib/libbsp/arm/tms570/preinstall.am +++ b/c/src/lib/libbsp/arm/tms570/preinstall.am @@ -109,6 +109,10 @@ $(PROJECT_INCLUDE)/bsp/tms570-sci-driver.h: include/tms570-sci-driver.h $(PROJEC $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/tms570-sci-driver.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/tms570-sci-driver.h +$(PROJECT_INCLUDE)/bsp/system-clocks.h: include/system-clocks.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/system-clocks.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/system-clocks.h + $(PROJECT_INCLUDE)/tm27.h: ../../shared/include/tm27.h $(PROJECT_INCLUDE)/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/tm27.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/tm27.h -- cgit v1.2.3