diff --git a/platform/galileo/Makefile.galileo b/platform/galileo/Makefile.galileo index 350f0c899..9fd8b60ba 100644 --- a/platform/galileo/Makefile.galileo +++ b/platform/galileo/Makefile.galileo @@ -3,7 +3,7 @@ LIBGCC_PATH = /usr/lib/gcc/$(shell gcc -dumpmachine)/$(shell gcc -dumpversion) CONTIKI_TARGET_DIRS = . CONTIKI_TARGET_MAIN = ${addprefix $(OBJECTDIR)/,contiki-main.o} -CONTIKI_SOURCEFILES += contiki-main.c newlib-syscalls.c loader.S clock.c +CONTIKI_SOURCEFILES += contiki-main.c newlib-syscalls.c loader.S clock.c rtimer-arch.c LINKERSCRIPT = $(CONTIKI)/platform/galileo/galileo.ld diff --git a/platform/galileo/contiki-conf.h b/platform/galileo/contiki-conf.h index 8cc6aa9d6..4f1b0fe4b 100644 --- a/platform/galileo/contiki-conf.h +++ b/platform/galileo/contiki-conf.h @@ -36,6 +36,10 @@ #define CLOCK_CONF_SECOND 128 typedef unsigned long clock_time_t; +typedef uint64_t rtimer_clock_t; +#define RTIMER_ARCH_SECOND 1024 +#define RTIMER_CLOCK_LT(a, b) ((int64_t)((a) - (b)) < 0) + /* We define the following macros and types otherwise Contiki does not * compile. */ diff --git a/platform/galileo/contiki-main.c b/platform/galileo/contiki-main.c index 53b7f9cb1..199ae45cc 100644 --- a/platform/galileo/contiki-main.c +++ b/platform/galileo/contiki-main.c @@ -37,6 +37,7 @@ main(void) { cpu_init(); clock_init(); + rtimer_init(); ENABLE_IRQ(); diff --git a/platform/galileo/rtimer-arch.c b/platform/galileo/rtimer-arch.c new file mode 100644 index 000000000..862c26692 --- /dev/null +++ b/platform/galileo/rtimer-arch.c @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2015, Intel Corporation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "sys/rtimer.h" + +#include "contiki-conf.h" +#include "drivers/pit.h" + +static volatile rtimer_clock_t tick_count = 0; +static rtimer_clock_t trigger = UINT64_MAX; + +static void +update_ticks(void) +{ + if(++tick_count >= trigger) { + /* Disable trigger by assigning it to the maximum value */ + trigger = UINT64_MAX; + rtimer_run_next(); + } +} +/*---------------------------------------------------------------------------*/ +void +rtimer_arch_init(void) +{ + pit_init(RTIMER_ARCH_SECOND, update_ticks); +} +/*---------------------------------------------------------------------------*/ +rtimer_clock_t +rtimer_arch_now() +{ + return tick_count; +} +/*---------------------------------------------------------------------------*/ +void +rtimer_arch_schedule(rtimer_clock_t t) +{ + trigger = t; +} diff --git a/platform/galileo/rtimer-arch.h b/platform/galileo/rtimer-arch.h index 086602aa2..3f12056e1 100644 --- a/platform/galileo/rtimer-arch.h +++ b/platform/galileo/rtimer-arch.h @@ -31,4 +31,6 @@ #ifndef RTIMER_ARCH_H #define RTIMER_ARCH_H +rtimer_clock_t rtimer_arch_now(); + #endif /* RTIMER_ARCH_H */