33 #include "contiki-conf.h"
35 #include "sys/clock.h"
37 #include "rtimer-arch.h"
38 #include "isr_compat.h"
42 #define INTERVAL (RTIMER_ARCH_SECOND / CLOCK_SECOND)
44 #define MAX_TICKS (~((clock_time_t)0) / 2)
46 static volatile unsigned long seconds;
48 static volatile clock_time_t count = 0;
50 static unsigned short last_tar = 0;
52 ISR(TIMER1_A1, timera1)
54 ENERGEST_ON(ENERGEST_TYPE_IRQ);
60 while(TA1CTL & MC1 && TA1CCR1 - TA1R == 1);
73 #if (CLOCK_CONF_SECOND & (CLOCK_CONF_SECOND - 1)) != 0
74 #error CLOCK_CONF_SECOND must be a power of two (i.e., 1, 2, 4, 8, 16, 32, 64, ...).
75 #error Change CLOCK_CONF_SECOND in contiki-conf.h.
77 if(count % CLOCK_CONF_SECOND == 0) {
81 }
while((TA1CCR1 - TA1R) > INTERVAL);
96 ENERGEST_OFF(ENERGEST_TYPE_IRQ);
111 clock_set(clock_time_t clock, clock_time_t fclock)
114 TA1CCR1 = fclock + INTERVAL;
131 return (
unsigned short) (TA1R - t);
145 #if INTERVAL==32768/CLOCK_SECOND
146 TA1CTL = TASSEL0 | TACLR;
147 #elif INTERVAL==16384/CLOCK_SECOND
148 TA1CTL = TASSEL0 | TACLR | ID_1;
150 #error NEED TO UPDATE clock.c to match interval!
185 #ifdef __IAR_SYSTEMS_ICC__
221 while(
clock_time() - start < (clock_time_t)i);
233 unsigned long t1, t2;