From ca82044d4948888cb4dd1dbf50e3df303d02e1f2 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 10 Dec 2010 22:17:28 +0100 Subject: [PATCH] added softtimer to slave --- firmware/masterchip/main.c | 19 ------------------- firmware/slavechip/main.c | 25 +++++++++++++++++++++++++ firmware/slavechip/main.h | 1 + firmware/slavechip/softtimer.c | 1 + firmware/slavechip/softtimer.h | 1 + 5 files changed, 28 insertions(+), 19 deletions(-) create mode 120000 firmware/slavechip/softtimer.c create mode 120000 firmware/slavechip/softtimer.h diff --git a/firmware/masterchip/main.c b/firmware/masterchip/main.c index e8f1835..0368648 100644 --- a/firmware/masterchip/main.c +++ b/firmware/masterchip/main.c @@ -3,25 +3,6 @@ uint8_t newThermoData = 1; uint16_t thermoData[] = {1024, 814, 2475, 2243}; -volatile uint16_t timer1_acc; -uint16_t softtimer_last[SOFTTIMERNUMS]; - -void softtimer_reset(uint8_t timernum){ - softtimer_last[timernum] = timer1_acc; -} - -uint8_t softtimer(uint8_t timernum, uint16_t interval){ - uint16_t timer1_acc_tmp = timer1_acc; // because of volatile - if((uint16_t)(timer1_acc_tmp - (uint16_t)(softtimer_last[timernum]) >= interval )){ - softtimer_last[timernum] = timer1_acc_tmp; - return(1); - } - return(0); -} - -// SOFTTIMER( , ); -#define SOFTTIMER(n,a) if(softtimer((n),(a*8))) - void hardinit() { /* initializes the hardware */ diff --git a/firmware/slavechip/main.c b/firmware/slavechip/main.c index 55bfe7c..9e81ca0 100644 --- a/firmware/slavechip/main.c +++ b/firmware/slavechip/main.c @@ -5,10 +5,14 @@ void hardinit() { /* initializes the hardware */ + // enable softtimer isr + TIMSK1 |= _BV(TOIE1); + sei(); } void softinit() { + } @@ -17,6 +21,27 @@ int __attribute__((noreturn)) main(void) { softinit(); for(;;){ + + SOFTTIMER(1,500) { + // do_stuff(); + } + } } + + +ISR(TIMER1_OVF_vect,ISR_NOBLOCK){ + uint16_t tmp; + tmp=timer1_acc; + tmp++; + + /* the ATOMIC is acutally only needed if timer1_acc is never read from an ISR, which + * is probably the case. + * ATOMIC_FORCEON: the ISR_NOBLOCK sets sei() a few cycles before. + */ + ATOMIC_BLOCK(ATOMIC_FORCEON){ + timer1_acc=tmp; + } + +} diff --git a/firmware/slavechip/main.h b/firmware/slavechip/main.h index c816a95..9719590 100644 --- a/firmware/slavechip/main.h +++ b/firmware/slavechip/main.h @@ -10,5 +10,6 @@ #include #define SOFTTIMERNUMS 4 +#include "softtimer.h" #endif //__MAIN_H diff --git a/firmware/slavechip/softtimer.c b/firmware/slavechip/softtimer.c new file mode 120000 index 0000000..28d64fd --- /dev/null +++ b/firmware/slavechip/softtimer.c @@ -0,0 +1 @@ +../shared/softtimer.c \ No newline at end of file diff --git a/firmware/slavechip/softtimer.h b/firmware/slavechip/softtimer.h new file mode 120000 index 0000000..2d6405e --- /dev/null +++ b/firmware/slavechip/softtimer.h @@ -0,0 +1 @@ +../shared/softtimer.h \ No newline at end of file