-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de\r
+// Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
// All rights reserved. \r
// \r
// Redistribution and use in source and binary forms, with or without \r
#endif\r
\r
#define TIMER_INTERRUPT TIM0_OVF_vect\r
-#define PIN_INTERRIPT EXT_INT0_vect\r
+#define PIN_INTERRUPT EXT_INT0_vect\r
\r
\r
//#define OWT_MIN_RESET 160 \r
//#define OWT_PRESENT 50\r
//#define OWT_WRITE 18\r
//#define OWT_READ 4\r
-\r
+#ifdef __4MHZ__\r
+#define OWT_MIN_RESET 80\r
+#define OWT_RESET2 30\r
+#define OWT_RESET_PRESENT 15\r
+#define OWT_PRESENT 60\r
+#define OWT_WRITE 15\r
+#define OWT_READ 5\r
+#define OWT_ZP_WAIT_LOW_TO 36 ; Zeit fuer die Maximale Lowzeit bei der Zerro Polling pruefung. Ist die Leitung laenger low, ist es vieleicht ein Reset \r
+#define OWT_ZP_WAIT_HIGH_TO 54 ; Zeit fuer die Maximale Hight zeit bis zu einem Low Impuls vom Master. Nach laengeren Pausen wird nicht mehr gepollt sondern der Interrup vererndet.\r
+#else\r
#define OWT_MIN_RESET 180\r
#define OWT_RESET2 80\r
#define OWT_RESET_PRESENT 30\r
#define OWT_PRESENT 130\r
-#define OWT_WRITE 35\r
+#define OWT_WRITE 33\r
#define OWT_READ 12\r
#define OWT_ZP_WAIT_LOW_TO 60 ; Zeit fuer die Maximale Lowzeit bei der Zerro Polling pruefung. Ist die Leitung laenger low, ist es vieleicht ein Reset \r
#define OWT_ZP_WAIT_HIGH_TO 90 ; Zeit fuer die Maximale Hight zeit bis zu einem Low Impuls vom Master. Nach laengeren Pausen wird nicht mehr gepollt sondern der Interrup vererndet.\r
-\r
+#endif\r
\r
.macro CLEAR_TOV_FLAG\r
ldi r_temp,1\r
ldi r_temp,0x80;\r
out _SFR_IO_ADDR(CLKPR),r_temp\r
//ldi r_temp,(1<<CLKPS0)\r
+#ifdef __4MHZ__\r
+ ldi r_temp,0x01;\r
+#else\r
ldi r_temp,0\r
+#endif\r
out _SFR_IO_ADDR(CLKPR),r_temp\r
;Disable Timer int\r
ldi r_temp,0\r
sbi DB_DDR,DB_PINN\r
#endif\r
.endm\r
+.macro JMP_FLASHER\r
+ ldi r_temp,0xC0\r
+ push r_temp\r
+ ldi r_temp,0x0E\r
+ push r_temp\r
+ ret ; Direkter Sprung zum Bootloader\r
+.endm\r
\r
\r
+.macro CHECK_BOOTLOADER_PIN ;r_temp is pushed other Registers should be saved\r
+; check for bootloader jumper\r
+ ;vor allen anderen Registerconfigs\r
+#ifndef _NO_BOOTLOADER_PIN_ \r
+ ldi r_temp,(1<<PUD) ;enable pullup \r
+ out _SFR_IO_ADDR(MCUCR) ,r_temp\r
+ sbi _SFR_IO_ADDR(PORTA),PINA5 ;internal pullup on PINA5\r
+ sbi _SFR_IO_ADDR(PORTA),PINA4 ;internal pullup on PINA4\r
+ rcall spause\r
+ sbis _SFR_IO_ADDR(PINA),PINA5\r
+ rjmp owinit_botest_end ;PinA5 nicht auf 1\r
+ sbis _SFR_IO_ADDR(PINA),PINA4\r
+ rjmp owinit_botest_end ;PinA4 nicht auf 1\r
+ cbi _SFR_IO_ADDR(PORTA),PINA4 \r
+ sbi _SFR_IO_ADDR(DDRA),PINA4 ;PINA4 AUSGANG und 0\r
+ rcall spause\r
+ sbic _SFR_IO_ADDR(PINA),PINA5 \r
+ rjmp owinit_botest_end ;PINA5 nicht 0.... nicht verbunden\r
+ cbi _SFR_IO_ADDR(DDRA),PINA4\r
+ JMP_FLASHER\r
+owinit_botest_end:\r
+#endif\r
+.endm\r
\r