added DCO/CPU speed re-synch each 30 seconds

This commit is contained in:
joxe 2009-02-04 19:32:20 +00:00
parent 80848e4106
commit 9689a579be
2 changed files with 23 additions and 3 deletions

View file

@ -1,5 +1,5 @@
/* -*- C -*- */ /* -*- C -*- */
/* @(#)$Id: contiki-conf.h,v 1.32 2009/01/15 09:04:04 fros4943 Exp $ */ /* @(#)$Id: contiki-conf.h,v 1.33 2009/02/04 19:32:20 joxe Exp $ */
#ifndef CONTIKI_CONF_H #ifndef CONTIKI_CONF_H
#define CONTIKI_CONF_H #define CONTIKI_CONF_H
@ -9,6 +9,10 @@
#define SHELL_VARS_CONF_RAM_BEGIN 0x1100 #define SHELL_VARS_CONF_RAM_BEGIN 0x1100
#define SHELL_VARS_CONF_RAM_END 0x2000 #define SHELL_VARS_CONF_RAM_END 0x2000
/* DCO speed resynchronization for more robust UART, etc. */
#define DCOSYNCH_CONF_ENABLED 1
#define DCOSYNCH_CONF_PERIOD 30
#define TIMESYNCH_CONF_ENABLED 1 #define TIMESYNCH_CONF_ENABLED 1
#define CC2420_CONF_TIMESTAMPS 1 #define CC2420_CONF_TIMESTAMPS 1

View file

@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)$Id: contiki-sky-main.c,v 1.44 2009/01/31 12:45:03 joxe Exp $ * @(#)$Id: contiki-sky-main.c,v 1.45 2009/02/04 19:32:20 joxe Exp $
*/ */
#include <signal.h> #include <signal.h>
@ -61,8 +61,12 @@
#include "sys/autostart.h" #include "sys/autostart.h"
#include "sys/profile.h" #include "sys/profile.h"
SENSORS(&button_sensor); SENSORS(&button_sensor);
#if DCOSYNCH_CONF_ENABLED
static struct timer mgt_timer;
#endif
#ifndef WITH_UIP #ifndef WITH_UIP
#define WITH_UIP 0 #define WITH_UIP 0
#endif #endif
@ -305,6 +309,9 @@ main(int argc, char **argv)
/* /*
* This is the scheduler loop. * This is the scheduler loop.
*/ */
#if DCOSYNCH_CONF_ENABLED
timer_set(&mgt_timer, DCOSYNCH_PERIOD * CLOCK_SECOND);
#endif
watchdog_start(); watchdog_start();
/* watchdog_stop();*/ /* watchdog_stop();*/
while(1) { while(1) {
@ -330,6 +337,15 @@ main(int argc, char **argv)
splx(s); /* Re-enable interrupts. */ splx(s); /* Re-enable interrupts. */
} else { } else {
static unsigned long irq_energest = 0; static unsigned long irq_energest = 0;
#if DCOSYNCH_CONF_ENABLED
/* before going down to sleep possibly do some management */
if (timer_expired(&mgt_timer)) {
timer_reset(&mgt_timer);
msp430_sync_dco();
}
#endif
/* Re-enable interrupts and go to sleep atomically. */ /* Re-enable interrupts and go to sleep atomically. */
ENERGEST_OFF(ENERGEST_TYPE_CPU); ENERGEST_OFF(ENERGEST_TYPE_CPU);
ENERGEST_ON(ENERGEST_TYPE_LPM); ENERGEST_ON(ENERGEST_TYPE_LPM);