Handle Overflow of Timer by Reset dedection (Problem was wenn Reset comes verry soon...
authorTobias <tm@tm3d.de>
Fri, 18 Sep 2015 18:14:28 +0000 (20:14 +0200)
committerTobias <tm@tm3d.de>
Fri, 18 Sep 2015 18:14:28 +0000 (20:14 +0200)
common/OWPinInterrupt.s
common/OWSet_ATTINYX4.s
common/OWTimerInterrupt.s

index 660c7f3..b5b7b87 100644 (file)
@@ -143,6 +143,7 @@ no_zerromaker:
        sts sendflag,r_sendflag
        sts bcount,r_bcount
        sts rwbyte,r_rwbyte
+       //cdb
        pop r_sendflag
        pop r_rwbyte
        pop r_bcount
index c0a074b..de42063 100644 (file)
@@ -37,6 +37,7 @@
 #define OW_DDR _SFR_IO_ADDR(DDRB)  //pin direction register
 #define TCNT_REG _SFR_IO_ADDR(TCNT0)
 
+
 #define DB_PORT _SFR_IO_ADDR(PORTB) //DEBUG
 #define DB_PIN _SFR_IO_ADDR(PINB) //DEBUG
 #define DB_DDR _SFR_IO_ADDR(DDRB) //DEBUG
 //#define OWT_WRITE 18
 //#define OWT_READ 4
 
-#define OWT_MIN_RESET 80 
-#define OWT_RESET2 100
+#define OWT_MIN_RESET 120
+#define OWT_RESET2 80
 #define OWT_RESET_PRESENT 30
 #define OWT_PRESENT 130
 #define OWT_WRITE 35
 #define OWT_READ 12
 
+.macro CLEAR_TOV_FLAG
+       ldi r_temp,1
+       out _SFR_IO_ADDR(TIFR0),r_temp
+.endm
 
+.macro JMP_NO_TOV
+       in r_temp, _SFR_IO_ADDR(TIFR0)
+       sbrc r_temp,TOV0 ; wenn ueberlauf gleiich weiter
+.endm
 
 .macro CLEAR_INTERRUPT_FLAG 
        ldi r_temp,(1<<INTF0);inerrupt flags durch 1 loeschen..... 0 macht nix
index cd8af1c..504a68b 100644 (file)
@@ -32,7 +32,7 @@
 
 
 .global TIMER_INTERRUPT
-       TIMER_INTERRUPT:
+TIMER_INTERRUPT:
        push r_temp
        in r_temp,_SFR_IO_ADDR(SREG)  
        push r_temp
        rjmp tint_end ; Leitung 1 kein Reset
        ldi r_temp,0  
        out TCNT_REG,r_temp
+       CLEAR_TOV_FLAG
 tint_loop_rend:
        sbis OW_PIN,OW_PINN ;warten bis leitung wieder h 
        rjmp tint_loop_rend
+       JMP_NO_TOV ;ueberspringe wenn kein ueberlauf
+       rjmp tint_overrun
        in r_temp,TCNT_REG ;schauen ob es lange genug gedauert hat fuer reset
        cpi r_temp,OWT_RESET2 
        brlo tint_end
+tint_overrun:
        ldi r_temp,0
        out TCNT_REG,r_temp
        ;zwischen Reset und Presets