42 #include "sys/clock.h"
43 #include <AppHardwareApi.h>
44 #include <PeripheralRegs.h>
45 #include <MicroSpecific.h>
46 #include "dev/watchdog.h"
55 #define PRINTF(...) printf(__VA_ARGS__)
60 #define RTIMER_TIMER_ISR_DEV E_AHI_DEVICE_TICK_TIMER
62 static volatile rtimer_clock_t scheduled_time;
63 static volatile uint8_t has_next;
66 rtimer_arch_run_next(uint32 u32DeviceId, uint32 u32ItemBitmap)
70 if(u32DeviceId != RTIMER_TIMER_ISR_DEV) {
74 ENERGEST_ON(ENERGEST_TYPE_IRQ);
75 vAHI_TickTimerIntPendClr();
76 vAHI_TickTimerIntEnable(0);
81 delta = u32AHI_TickTimerRead() - scheduled_time;
82 if(delta >> 28 == 0) {
90 vAHI_TickTimerIntEnable(1);
91 vAHI_TickTimerInterval(scheduled_time);
93 ENERGEST_OFF(ENERGEST_TYPE_IRQ);
100 vAHI_TickTimerConfigure(E_AHI_TICK_TIMER_DISABLE);
101 vAHI_TickTimerIntEnable(0);
102 vAHI_TickTimerRegisterCallback(rtimer_arch_run_next);
103 vAHI_TickTimerWrite(0);
104 vAHI_TickTimerConfigure(E_AHI_TICK_TIMER_CONT);
107 vAHI_WakeTimerEnable(WAKEUP_TIMER,
FALSE);
108 vAHI_WakeTimerEnable(TICK_TIMER,
FALSE);
110 vAHI_WakeTimerStartLarge(TICK_TIMER, 2);
116 rtimer_arch_reinit(rtimer_clock_t sleep_start, rtimer_clock_t sleep_ticks)
120 vAHI_TickTimerConfigure(E_AHI_TICK_TIMER_DISABLE);
121 vAHI_TickTimerIntEnable(0);
123 vAHI_InterruptSetPriority(MICRO_ISR_MASK_TICK_TMR, 15);
124 vAHI_TickTimerRegisterCallback(rtimer_arch_run_next);
126 vAHI_TickTimerWrite(sleep_start + sleep_ticks);
127 vAHI_TickTimerConfigure(E_AHI_TICK_TIMER_CONT);
133 vAHI_TickTimerIntPendClr();
134 vAHI_TickTimerIntEnable(1);
135 vAHI_TickTimerInterval(scheduled_time);
142 return u32AHI_TickTimerRead();
148 PRINTF(
"rtimer_arch_schedule time %lu\n", t);
149 vAHI_TickTimerIntPendClr();
150 vAHI_TickTimerIntEnable(1);
151 vAHI_TickTimerInterval(t);
157 rtimer_arch_time_to_rtimer(
void)
161 return scheduled_time >= now ? scheduled_time - now : 0;
164 return (rtimer_clock_t)-1;
Header file for the real-time timer module.
#define RTIMER_NOW()
Get the current clock time.
Header file for the energy estimation mechanism
rtimer_clock_t rtimer_arch_now()
Returns the current real-time clock time.
void rtimer_arch_init(void)
We don't need to explicitly initialise anything but this routine is required by the API...
void rtimer_run_next(void)
Execute the next real-time task and schedule the next task, if any.
Header file for the Contiki process interface.
#define FALSE
An alias for zero, used for clarity.
int process_nevents(void)
Number of events waiting to be processed.
void rtimer_arch_schedule(rtimer_clock_t t)
Schedules an rtimer task to be triggered at time t.
void watchdog_start(void)
Starts the WDT in watchdog mode if enabled by user configuration, maximum interval.