Changeset 762fa62 in rtems
- Timestamp:
- 05/22/18 06:52:13 (6 years ago)
- Branches:
- 5, master
- Children:
- b0c3ba2f
- Parents:
- 65f868c
- git-author:
- Sebastian Huber <sebastian.huber@…> (05/22/18 06:52:13)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (06/15/18 11:12:05)
- Files:
-
- 1 added
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
bsps/arm/lpc176x/start/system-clocks.c
r65f868c r762fa62 119 119 return lpc176x_get_timer1(); 120 120 } 121 122 inline CPU_Counter_ticks _CPU_Counter_difference(123 CPU_Counter_ticks second,124 CPU_Counter_ticks first125 )126 {127 return second - first;128 }129 -
bsps/arm/shared/clock/clock-armv7m.c
r65f868c r762fa62 1 1 /* 2 * Copyright (c) 2011 -2012Sebastian Huber. All rights reserved.2 * Copyright (c) 2011, 2018 Sebastian Huber. All rights reserved. 3 3 * 4 4 * embedded brains GmbH 5 * Obere Lagerstr. 305 * Dornierstr. 4 6 6 * 82178 Puchheim 7 7 * Germany … … 13 13 */ 14 14 15 #include <bsp/clock-armv7m.h> 16 15 17 #include <rtems.h> 16 #include <rtems/timecounter.h> 17 #include <rtems/score/armv7m.h> 18 19 #include <bsp.h> 18 #include <rtems/sysinit.h> 20 19 21 20 #ifdef ARM_MULTILIB_ARCH_V7M … … 24 23 static void Clock_isr(void *arg); 25 24 26 typedef struct { 27 rtems_timecounter_simple base; 28 void (*tick)(void); 29 bool countflag; 30 } ARMV7M_Timecounter; 25 ARMV7M_Timecounter _ARMV7M_TC; 31 26 32 static ARMV7M_Timecounter _ARMV7M_TC; 33 34 static uint32_t _ARMV7M_TC_systick_get(rtems_timecounter_simple *tc) 27 static uint32_t _ARMV7M_TC_get_timecount(struct timecounter *base) 35 28 { 36 volatile ARMV7M_Systick *systick = _ARMV7M_Systick; 37 38 return systick->cvr; 29 return _ARMV7M_Clock_counter((ARMV7M_Timecounter *) base); 39 30 } 40 31 41 static bool _ARMV7M_TC_systick_is_pending(rtems_timecounter_simple *base) 42 { 43 ARMV7M_Timecounter *tc = (ARMV7M_Timecounter *) base; 44 rtems_interrupt_level level; 45 bool countflag; 46 47 rtems_interrupt_disable(level); 48 49 countflag = tc->countflag; 50 if (!countflag) { 51 volatile ARMV7M_Systick *systick = _ARMV7M_Systick; 52 53 countflag = ((systick->csr & ARMV7M_SYSTICK_CSR_COUNTFLAG) != 0); 54 tc->countflag = countflag; 55 } 56 57 rtems_interrupt_enable(level); 58 59 return countflag; 60 } 61 62 static uint32_t _ARMV7M_TC_systick_get_timecount(struct timecounter *tc) 63 { 64 return rtems_timecounter_simple_downcounter_get( 65 tc, 66 _ARMV7M_TC_systick_get, 67 _ARMV7M_TC_systick_is_pending 68 ); 69 } 70 71 static void _ARMV7M_TC_systick_at_tick(rtems_timecounter_simple *base) 72 { 73 ARMV7M_Timecounter *tc = (ARMV7M_Timecounter *) base; 74 volatile ARMV7M_Systick *systick = _ARMV7M_Systick; 75 76 tc->countflag = false; 77 78 /* Clear COUNTFLAG */ 79 systick->csr; 80 } 81 82 static void _ARMV7M_TC_systick_tick(void) 83 { 84 rtems_timecounter_simple_downcounter_tick( 85 &_ARMV7M_TC.base, 86 _ARMV7M_TC_systick_get, 87 _ARMV7M_TC_systick_at_tick 88 ); 89 } 90 91 static void _ARMV7M_TC_tick(void) 92 { 93 (*_ARMV7M_TC.tick)(); 94 } 95 96 static void _ARMV7M_Systick_handler(void) 32 static void _ARMV7M_Clock_handler(void) 97 33 { 98 34 _ARMV7M_Interrupt_service_enter(); … … 101 37 } 102 38 103 static void _ARMV7M_ Systick_handler_install(void)39 static void _ARMV7M_Clock_handler_install(void) 104 40 { 105 41 _ARMV7M_Set_exception_priority_and_handler( 106 42 ARMV7M_VECTOR_SYSTICK, 107 43 BSP_ARMV7M_SYSTICK_PRIORITY, 108 _ARMV7M_ Systick_handler44 _ARMV7M_Clock_handler 109 45 ); 110 46 } 111 47 112 static void _ARMV7M_ Systick_initialize(void)48 static void _ARMV7M_Clock_initialize(void) 113 49 { 114 volatile ARMV7M_Systick *systick = _ARMV7M_Systick; 115 #ifdef BSP_ARMV7M_SYSTICK_FREQUENCY 116 uint64_t freq = BSP_ARMV7M_SYSTICK_FREQUENCY; 117 #else 118 uint64_t freq = ARMV7M_SYSTICK_CALIB_TENMS_GET(systick->calib) * 100ULL; 119 #endif 120 uint64_t us_per_tick = rtems_configuration_get_microseconds_per_tick(); 121 uint64_t interval = (freq * us_per_tick) / 1000000ULL; 50 volatile ARMV7M_Systick *systick; 51 ARMV7M_Timecounter *tc; 122 52 123 systick->rvr = (uint32_t) interval; 124 systick->cvr = 0; 53 systick = _ARMV7M_Systick; 54 tc = &_ARMV7M_TC; 55 125 56 systick->csr = ARMV7M_SYSTICK_CSR_ENABLE 126 57 | ARMV7M_SYSTICK_CSR_TICKINT 127 58 | ARMV7M_SYSTICK_CSR_CLKSOURCE; 128 59 129 _ARMV7M_TC.tick = _ARMV7M_TC_systick_tick; 130 rtems_timecounter_simple_install( 131 &_ARMV7M_TC.base, 132 freq, 133 interval, 134 _ARMV7M_TC_systick_get_timecount 135 ); 60 tc->base.tc_get_timecount = _ARMV7M_TC_get_timecount; 61 tc->base.tc_counter_mask = 0xffffffff; 62 tc->base.tc_frequency = _ARMV7M_Clock_frequency(); 63 tc->base.tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER; 64 rtems_timecounter_install(&tc->base); 136 65 } 137 66 138 static void _ARMV7M_Systick_cleanup(void) 67 static void _ARMV7M_Clock_initialize_early(void) 68 { 69 volatile ARMV7M_Systick *systick; 70 uint32_t us_per_tick; 71 uint64_t freq; 72 uint32_t interval; 73 74 systick = _ARMV7M_Systick; 75 us_per_tick = rtems_configuration_get_microseconds_per_tick(); 76 freq = _ARMV7M_Clock_frequency(); 77 78 interval = (uint32_t) ((freq * us_per_tick) / 1000000); 79 80 systick->rvr = interval; 81 systick->cvr = 0; 82 systick->csr = ARMV7M_SYSTICK_CSR_ENABLE | ARMV7M_SYSTICK_CSR_CLKSOURCE; 83 } 84 85 RTEMS_SYSINIT_ITEM( 86 _ARMV7M_Clock_initialize_early, 87 RTEMS_SYSINIT_CPU_COUNTER, 88 RTEMS_SYSINIT_ORDER_FIRST 89 ); 90 91 static void _ARMV7M_Clock_cleanup(void) 139 92 { 140 93 volatile ARMV7M_Systick *systick = _ARMV7M_Systick; … … 143 96 } 144 97 145 #define Clock_driver_timecounter_tick() _ARMV7M_TC_tick()146 147 98 #define Clock_driver_support_initialize_hardware() \ 148 _ARMV7M_ Systick_initialize()99 _ARMV7M_Clock_initialize() 149 100 150 101 #define Clock_driver_support_install_isr(isr) \ 151 _ARMV7M_ Systick_handler_install()102 _ARMV7M_Clock_handler_install() 152 103 153 104 #define Clock_driver_support_shutdown_hardware() \ 154 _ARMV7M_ Systick_cleanup()105 _ARMV7M_Clock_cleanup() 155 106 156 107 /* Include shared source clock driver code */ -
bsps/arm/shared/cpucounter/cpucounter-armv7m.c
r65f868c r762fa62 1 1 /* 2 * Copyright (c) 2016 embedded brains GmbH. All rights reserved.2 * Copyright (c) 2016, 2018 embedded brains GmbH. All rights reserved. 3 3 * 4 4 * embedded brains GmbH … … 13 13 */ 14 14 15 #include <rtems/score/armv7m.h> 16 #include <rtems/counter.h> 17 #include <rtems/sysinit.h> 18 19 #include <bsp.h> 20 #include <bsp/fatal.h> 15 #include <bsp/clock-armv7m.h> 21 16 22 17 uint32_t _CPU_Counter_frequency(void) 23 18 { 24 #ifdef BSP_ARMV7M_SYSTICK_FREQUENCY 25 return = BSP_ARMV7M_SYSTICK_FREQUENCY; 26 #else 27 volatile ARMV7M_Systick *systick = _ARMV7M_Systick; 28 return ARMV7M_SYSTICK_CALIB_TENMS_GET(systick->calib) * 100; 29 #endif 19 return _ARMV7M_Clock_frequency(); 30 20 } 31 21 32 22 CPU_Counter_ticks _CPU_Counter_read(void) 33 23 { 34 volatile ARMV7M_DWT *dwt = _ARMV7M_DWT; 35 36 return dwt->cyccnt; 24 return _ARMV7M_Clock_counter(&_ARMV7M_TC); 37 25 } 38 39 static void armv7m_cpu_counter_initialize(void)40 {41 bool cyccnt_enabled;42 43 cyccnt_enabled = _ARMV7M_DWT_Enable_CYCCNT();44 45 if (!cyccnt_enabled) {46 bsp_fatal(BSP_ARM_ARMV7M_CPU_COUNTER_INIT);47 }48 }49 50 RTEMS_SYSINIT_ITEM(51 armv7m_cpu_counter_initialize,52 RTEMS_SYSINIT_CPU_COUNTER,53 RTEMS_SYSINIT_ORDER_FIRST54 ); -
c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am
r65f868c r762fa62 44 44 # Shared 45 45 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c 46 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c47 46 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 48 47 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c -
c/src/lib/libbsp/arm/atsam/Makefile.am
r65f868c r762fa62 37 37 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c 38 38 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c 39 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c40 39 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 41 40 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c -
c/src/lib/libbsp/arm/beagle/Makefile.am
r65f868c r762fa62 45 45 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c 46 46 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/gpio/gpio-support.c 47 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c48 47 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c 49 48 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c -
c/src/lib/libbsp/arm/csb336/Makefile.am
r65f868c r762fa62 28 28 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 29 29 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 30 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c31 30 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/csb336/clock/clockdrv.c 32 31 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb336/btimer/btimer.c -
c/src/lib/libbsp/arm/csb337/Makefile.am
r65f868c r762fa62 37 37 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 38 38 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 39 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c40 39 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb337/start/pmc.c 41 40 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/csb337/clock/clock.c -
c/src/lib/libbsp/arm/edb7312/Makefile.am
r65f868c r762fa62 26 26 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 27 27 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 28 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c29 28 30 29 # clock -
c/src/lib/libbsp/arm/gdbarmsim/Makefile.am
r65f868c r762fa62 28 28 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 29 29 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 30 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c31 30 # console 32 31 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-polled.c -
c/src/lib/libbsp/arm/gumstix/Makefile.am
r65f868c r762fa62 27 27 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 28 28 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 29 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c30 29 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/gumstix/clock/clock.c 31 30 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/gumstix/btimer/btimer.c -
c/src/lib/libbsp/arm/imx/Makefile.am
r65f868c r762fa62 32 32 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c 33 33 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c 34 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c35 34 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c 36 35 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c -
c/src/lib/libbsp/arm/lm3s69xx/Makefile.am
r65f868c r762fa62 37 37 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 38 38 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 39 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c40 39 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 41 40 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c -
c/src/lib/libbsp/arm/lpc24xx/Makefile.am
r65f868c r762fa62 56 56 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c 57 57 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/uart-output-char.c 58 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c59 58 60 59 # Startup -
c/src/lib/libbsp/arm/lpc32xx/Makefile.am
r65f868c r762fa62 44 44 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c 45 45 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c 46 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c47 46 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 48 47 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c -
c/src/lib/libbsp/arm/raspberrypi/Makefile.am
r65f868c r762fa62 42 42 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 43 43 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 44 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c45 44 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 46 45 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c -
c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am
r65f868c r762fa62 41 41 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c 42 42 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c 43 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c44 43 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 45 44 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c -
c/src/lib/libbsp/arm/rtl22xx/Makefile.am
r65f868c r762fa62 28 28 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 29 29 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 30 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c31 30 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/rtl22xx/btimer/btimer.c 32 31 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/rtl22xx/clock/clockdrv.c -
c/src/lib/libbsp/arm/smdk2410/Makefile.am
r65f868c r762fa62 28 28 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 29 29 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 30 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c31 30 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/smdk2410/btimer/btimer.c 32 31 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/smdk2410/clock/clockdrv.c -
c/src/lib/libbsp/arm/stm32f4/Makefile.am
r65f868c r762fa62 36 36 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c 37 37 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c 38 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c39 38 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 40 39 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c -
c/src/lib/libbsp/arm/tms570/Makefile.am
r65f868c r762fa62 45 45 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 46 46 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c 47 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c48 47 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c 49 48 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c -
c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am
r65f868c r762fa62 39 39 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c 40 40 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c 41 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c42 41 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c 43 42 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c -
cpukit/score/cpu/arm/include/rtems/score/cpu.h
r65f868c r762fa62 601 601 CPU_Counter_ticks _CPU_Counter_read( void ); 602 602 603 CPU_Counter_ticks _CPU_Counter_difference(603 static inline CPU_Counter_ticks _CPU_Counter_difference( 604 604 CPU_Counter_ticks second, 605 605 CPU_Counter_ticks first 606 ); 606 ) 607 { 608 return second - first; 609 } 607 610 608 611 #if CPU_PROVIDES_IDLE_THREAD_BODY == TRUE
Note: See TracChangeset
for help on using the changeset viewer.