diff --git a/avr/att84_temp1.asm b/avr/att84_temp1.asm index 1e1ac34..0c34587 100644 --- a/avr/att84_temp1.asm +++ b/avr/att84_temp1.asm @@ -243,6 +243,12 @@ .dseg +sramTimerProtocolEverySec: .byte 2 +sramTimerEnqueueSendStats: .byte 2 +sramTimerEnqueueMemStats: .byte 2 +sramTimerEnqueueValues: .byte 2 +sramTimerSI7021Measure: .byte 2 + ; *************************************************************************** @@ -256,6 +262,25 @@ blinkPattern: .db 2, 50, 0xff, 0xff ; 1 short blink, 2s pause, restart + +; --------------------------------------------------------------------------- +; timer list + + +; TODO: add flags (IF_COM_ADDR) +timerList: +; SRAM variable/counter routine flags secs (0=don't start or restart) + .dw sramTimerProtocolEverySec, CPRO_OnEverySecond, 0, 1 ; every 1s + .dw sramTimerEnqueueSendStats, enqueueSendStats, TIMER_FLAGS_IF_ADDR, 300 ; every 5m + .dw sramTimerEnqueueMemStats, enqueueMemStats, TIMER_FLAGS_IF_ADDR, 120 ; every 2m + .dw sramTimerSI7021Measure, SI7021_PeriodicMeasurement, 0, 30 ; every 30s + .dw sramTimerEnqueueValues, Main_SendValueMsg, TIMER_FLAGS_IF_ADDR, 60 ; every 1m + .dw 0 ; end of list + + + + + .include "main.asm" @@ -265,6 +290,7 @@ blinkPattern: .db 2, 50, 0xff, 0xff ; 1 short blink, 2s pause, restart onSystemStart: #ifdef MODULES_COM + ; todo: setup once timer to start reclaiming address rcall CPRO_StartReclaimAddrProcedure #endif @@ -272,6 +298,27 @@ onSystemStart: +#ifdef MODULES_COM +enqueueSendStats: + ldi r16, 0xff ; send stats to everybody + rcall CPRO_EnqueueComSendStats + + ldi r16, 0xff ; send stats to everybody + rjmp CPRO_EnqueueComRecvStats +#endif + + +#ifdef MODULES_COM +enqueueMemStats: + ldi r16, 0xff ; send to everybody + rcall CPRO_EnqueueMemStats +#endif + + + + + + ; --------------------------------------------------------------------------- ; Called every 100ms. Add your routine calls here. No arguments, no results. @@ -288,52 +335,6 @@ onEvery100ms: -; --------------------------------------------------------------------------- -; Called every second. Add your routine calls here. No arguments, no results. - -onEverySecond: -; rcall TWI_Master_ScanNext - rcall CPRO_OnEverySecond - ret - - - -; --------------------------------------------------------------------------- -; Called every 5 seconds. Add your routine calls here. No arguments, no results. - -onEvery5s: - ret - - - -; --------------------------------------------------------------------------- -; Called every 10 seconds. Add your routine calls here. No arguments, no results. - -onEvery10s: -#ifdef MODULES_LCD - rcall printSendStats -#endif - ret - - - -; --------------------------------------------------------------------------- -; Called every 30 seconds. Add your routine calls here. No arguments, no results. - -onEvery30s: -#ifdef MODULES_SI7021 - in r15, SREG - push r15 - cli - rcall SI7021_PeriodicMeasurement - rcall Main_SendValueMsg - pop r15 - out SREG, r15 -#endif - ret - - - ; --------------------------------------------------------------------------- ; Called every minute. Add your routine calls here. No arguments, no results. @@ -352,64 +353,6 @@ onEvery1m_l1: ret -; --------------------------------------------------------------------------- -; Called every 5 minutes. Add your routine calls here. No arguments, no results. - -onEvery5m: - -#ifdef MODULES_COM - ; will later send these only every hour or so - ldi r16, 0xff ; send stats to everybody - rcall CPRO_EnqueueComSendStats - - ldi r16, 0xff ; send recv to everybody - rcall CPRO_EnqueueComRecvStats -#endif - - ret - - - -; --------------------------------------------------------------------------- -; Called every 15 minutes. Add your routine calls here. No arguments, no results. - -onEvery15m: - ret - - - -; --------------------------------------------------------------------------- -; Called every 30 minutes. Add your routine calls here. No arguments, no results. - -onEvery30m: - ret - - - -; --------------------------------------------------------------------------- -; Called every hour. Add your routine calls here. No arguments, no results. - -onEvery1h: - ret - - - -; --------------------------------------------------------------------------- -; Called every 12 hours. Add your routine calls here. No arguments, no results. - -onEvery12h: - ret - - - -; --------------------------------------------------------------------------- -; Called every day. Add your routine calls here. No arguments, no results. - -onEvery1d: - ret - - - ; --------------------------------------------------------------------------- ; onPacketReceived: ; diff --git a/avr/timer.asm b/avr/timer.asm index e1dbceb..aff3c65 100644 --- a/avr/timer.asm +++ b/avr/timer.asm @@ -14,9 +14,7 @@ ; *************************************************************************** ; defs -.equ TIMER_FLAGS_100MS = 1 -.equ TIMER_FLAGS_1S = 2 - +.equ TIMER_FLAGS_IF_ADDR = 1 @@ -27,11 +25,9 @@ timerModuleData: timerModuleTickCounter: .byte 1 -timerModuleFlags: .byte 1 +timerTicksSinceLastRun: .byte 2 timerModuleCounterSecs: .byte 4 -timerModuleDerivedCounters: .byte 10 ; size must be number of entries in timer table - timerModuleData_end: @@ -45,21 +41,6 @@ timerModuleData_end: TIMER_BEGIN: -; number of entries here must be equal to bytes in timerModuleDerivedCounters! -timerTable: - .db 5, 0, LOW(onEvery5s), HIGH(onEvery5s) ; 5s: overflow after 5*1s (1) - .db 2, 0, LOW(onEvery10s), HIGH(onEvery10s) ; 10s: overflow after 2*5s (2) - .db 3, 0, LOW(onEvery30s), HIGH(onEvery30s) ; 30s: overflow after 3*10s (3) - .db 2, 0, LOW(onEvery1m), HIGH(onEvery1m) ; 1m: overflow after 2*30s (4) - .db 5, 0, LOW(onEvery5m), HIGH(onEvery5m) ; 5m: overflow after 5*1m (5) - .db 3, 0, LOW(onEvery15m), HIGH(onEvery15m) ; 15m: overflow after 3*5m (6) - .db 2, 0, LOW(onEvery30m), HIGH(onEvery30m) ; 30m: overflow after 2*15m (7) - .db 2, 0, LOW(onEvery1h), HIGH(onEvery1h) ; 1h: overflow after 2*30m (8) - .db 12, 0, LOW(onEvery12h), HIGH(onEvery12h) ; 12h: overflow after 12*1h (9) - .db 2, 0, LOW(onEvery1d), HIGH(onEvery1d) ; 1d: overflow after 2*12h (10) - .db 0, 0 - - ; --------------------------------------------------------------------------- ; Timer_Init @@ -96,6 +77,8 @@ Timer_Init: ; setup timer for IRQ every 100ms ldi r16, (1<