Skip to content

Commit d098cd6

Browse files
committed
RTOS: SysTimer: Split methods for testing
1 parent 1054277 commit d098cd6

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

rtos/TARGET_CORTEX/SysTimer.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ SysTimer::SysTimer() :
4545
TimerEvent(get_lp_ticker_data()), _start_time(0), _tick(0)
4646
{
4747
_start_time = ticker_read_us(_ticker_data);
48+
}
49+
50+
void SysTimer::setup_irq()
51+
{
4852
#if (defined(NO_SYSTICK))
4953
NVIC_SetVector(mbed_get_m0_tick_irqn(), (uint32_t)SysTick_Handler);
5054
NVIC_SetPriority(mbed_get_m0_tick_irqn(), 0xFF); /* RTOS requires lowest priority */
@@ -96,16 +100,26 @@ SysTimer::~SysTimer()
96100
{
97101
}
98102

99-
void SysTimer::handler()
103+
void SysTimer::set_irq_pending()
100104
{
101105
#if (defined(NO_SYSTICK))
102106
NVIC_SetPendingIRQ(mbed_get_m0_tick_irqn());
103107
#else
104108
SCB->ICSR = SCB_ICSR_PENDSTSET_Msk;
105109
#endif
110+
}
111+
112+
void SysTimer::increment_tick()
113+
{
106114
_tick++;
107115
}
108116

117+
void SysTimer::handler()
118+
{
119+
set_irq_pending();
120+
increment_tick();
121+
}
122+
109123
}
110124
}
111125

rtos/TARGET_CORTEX/SysTimer.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ class SysTimer: private mbed::TimerEvent, private mbed::NonCopyable<SysTimer> {
5151
SysTimer();
5252
virtual ~SysTimer();
5353

54+
/**
55+
* Enable an IRQ/SysTick with the correct priority.
56+
*/
57+
static void setup_irq();
58+
5459
/**
5560
* Schedule an os tick to fire
5661
*
@@ -92,6 +97,8 @@ class SysTimer: private mbed::TimerEvent, private mbed::NonCopyable<SysTimer> {
9297

9398
protected:
9499
virtual void handler();
100+
void increment_tick();
101+
static void set_irq_pending();
95102
us_timestamp_t _start_time;
96103
uint64_t _tick;
97104
};

rtos/TARGET_CORTEX/mbed_rtx_idle.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ int32_t OS_Tick_Enable (void)
4747
// Do not use SingletonPtr since this relies on the RTOS
4848
if (NULL == os_timer) {
4949
os_timer = new (os_timer_data) rtos::internal::SysTimer();
50+
os_timer->setup_irq();
5051
}
5152

5253
// set to fire interrupt on next tick

0 commit comments

Comments
 (0)