; *************************************************************************** ; defs .equ TIMER_FLAGS_100MS = 1 .equ TIMER_FLAGS_1S = 2 ; *************************************************************************** ; data .dseg timerModuleData: timerModuleTickCounter: .byte 1 ; only low byte used timerModuleFlags: .byte 1 timerModuleCounter10s: .byte 1 timerModuleCounter1m: .byte 1 timerModuleCounterSecs: .byte 4 timerModuleData_end: ; *************************************************************************** ; code .cseg ; *************************************************************************** ; Timer_Init ; ; IN: ; - nothing ; OUT: ; - nothing ; USED: r16, r17, x Timer_Init: ; setup timer for 15.2588 interrupts per second (e.g. every 65.5 ms) ; reset data in SDRAM ldi xh, HIGH(timerModuleData) ldi xl, LOW(timerModuleData) ldi r16, 0 ldi r17, (timerModuleData_end-timerModuleData) rcall Utils_FillSram ; CTC mode (WGM2:0=2, OCR0A=value, OCF0A Flag =1, -> IRQ_OC0A ; CMP-A interrupt about every 100ms ldi r16, (1<