64 #define RTIMER_CLOCK_TICK_RATIO (RTIMER_SECOND / CLOCK_SECOND)
67 #if SYS_CTRL_SYS_CLOCK < SYS_CTRL_1MHZ
68 #error System clock speeds below 1MHz are not supported
70 #define PRESCALER_VALUE (SYS_CTRL_SYS_CLOCK / SYS_CTRL_1MHZ - 1)
73 #if SYS_CTRL_SYS_CLOCK % CLOCK_SECOND
75 #error System clock speed too slow for CLOCK_SECOND, accuracy reduced
77 #define RELOAD_VALUE (SYS_CTRL_SYS_CLOCK / CLOCK_SECOND - 1)
79 static volatile uint64_t rt_ticks_startup = 0, rt_ticks_epoch = 0;
95 REG(SYSTICK_STRELOAD) = RELOAD_VALUE;
98 REG(SYSTICK_STCTRL) |= SYSTICK_STCTRL_CLK_SRC | SYSTICK_STCTRL_ENABLE;
101 REG(SYSTICK_STCTRL) |= SYSTICK_STCTRL_INTEN;
126 return rt_ticks_startup / RTIMER_CLOCK_TICK_RATIO;
132 rt_ticks_epoch = (uint64_t)sec * RTIMER_SECOND;
138 return rt_ticks_epoch / RTIMER_SECOND;
147 while(
clock_time() - start < (clock_time_t)i);
196 uint64_t prev_rt_ticks_startup, cur_rt_ticks_startup;
197 uint32_t cur_rt_ticks_startup_hi;
200 prev_rt_ticks_startup = rt_ticks_startup;
202 cur_rt_ticks_startup_hi = prev_rt_ticks_startup >> 32;
203 if(now < (rtimer_clock_t)prev_rt_ticks_startup) {
204 cur_rt_ticks_startup_hi++;
206 cur_rt_ticks_startup = (uint64_t)cur_rt_ticks_startup_hi << 32 | now;
207 rt_ticks_startup = cur_rt_ticks_startup;
209 rt_ticks_epoch += cur_rt_ticks_startup - prev_rt_ticks_startup;
233 REG(SYSTICK_STCTRL) &= ~SYSTICK_STCTRL_ENABLE;
238 REG(SYSTICK_STCTRL) |= SYSTICK_STCTRL_ENABLE;
250 ENERGEST_ON(ENERGEST_TYPE_IRQ);
254 ENERGEST_OFF(ENERGEST_TYPE_IRQ);
void clock_isr(void)
The clock Interrupt Service Routine.
Header file for the real-time timer module.
#define SYS_CTRL_RCGCGPT_GPT0
GPT0 clock enable, CPU running.
Header file with register manipulation macro definitions.
static void start(void)
Start measurement.
#define RTIMER_NOW()
Get the current clock time.
void etimer_request_poll(void)
Make the event timer aware that the clock has changed.
int etimer_pending(void)
Check if there are any non-expired event timers.
clock_time_t clock_time(void)
Get the current clock time.
#define GPTIMER_TAMR
GPTM Timer A mode.
#define GPTIMER_CTL_TAEN
Timer A enable.
Header file for the energy estimation mechanism
void clock_init()
Initialize the clock library.
static void update_ticks(void)
Update the software clock ticks and seconds.
Header for with definitions related to the cc2538 SysTick.
void clock_adjust(void)
Adjust the clock following missed SysTick ISRs.
#define GPT_0_BASE
GPTIMER0.
Header file for the cc2538 System Control driver.
#define SYS_CTRL_RCGCGPT
GPT[3:0] clocks - active mode.
void clock_delay(unsigned int i)
Obsolete delay function but we implement it here since some code still uses it.
#define GPTIMER_TAILR
GPTM Timer A interval load.
void clock_wait(clock_time_t i)
Wait for a given number of ticks.
#define GPTIMER_CFG
GPTM configuration.
#define GPTIMER_TAPR
GPTM Timer A prescale.
unsigned long clock_seconds(void)
Get the current value of the platform seconds.
Header file for the cc2538 General Purpose Timers.
#define GPTIMER_CTL
GPTM control.
void clock_delay_usec(uint16_t usec)
Delay a given number of microseconds.
void clock_set_seconds(unsigned long sec)
Set the value of the platform seconds.