- OWINIT save Register used in C
[owSlave2.git] / common / OWRomFunctions.s
index fdcc919..e889416 100644 (file)
 #define OW_SEARCHROMR 4  ; next resive master answer
 #define OW_READROM 5
 #define OW_READ_COMMAND 6
+#define OW_FWCONFIGINFO 7
 
 
 #ifdef _CHANGEABLE_ID_
-#define OW_WRITE_NEWID 7
-#define OW_READ_NEWID 8
-#define OW_SET_NEWID 9
-#define OW_FIRST_COMMAND 10
+#define OW_WRITE_NEWID 8
+#define OW_READ_NEWID 9
+#define OW_SET_NEWID 10
+#define OW_FIRST_COMMAND 11
 .comm newid,8
 
        
@@ -79,7 +80,7 @@
 
 
 #else
-#define OW_FIRST_COMMAND 7
+#define OW_FIRST_COMMAND 8
 #endif
 
 #ifndef _DIS_FLASH_
 .endm
 #endif
 
+.macro FW_CONFIG_INFO
+       cljmp 0x85,hrc_fw_configinfo
+.endm
 
 
 #ifdef _CHANGEABLE_ID_
 ; lesen der ID aus dem EEPROM beim Start
 read_EEPROM_ID:  
+       push r_bytep
+       push r_rwbyte//r_temp2 and Z is not in gnu C save area
        ldi r_temp2,lo8(E2END)
        ldi zh,hi8(E2END)
        subi r_temp2,7
@@ -119,6 +125,8 @@ read_EEPROM_ID_loop:
        cpi r_bytep,8
        brne read_EEPROM_ID_loop
 read_EEPROM_ID_end:
+       pop r_rwbyte
+       pop r_bytep
        ret
 #endif
 
@@ -135,6 +143,7 @@ handle_stable:
                rjmp h_searchromr
                rjmp h_readrom
                rjmp h_readcommand 
+               rjmp h_fwconfiginfo
 #ifdef _CHANGEABLE_ID_
                rjmp h_writeid
                rjmp h_readid
@@ -160,7 +169,7 @@ hrc_jmp_flasher:
        lds r_temp,flashmarker
        cpi r_temp,2
        brne hrc_jmp_flasher_inc
-       ldi r_temp,0xE0
+       ldi r_temp,0xC0
        push r_temp
        ldi r_temp,0x0E
        push r_temp
@@ -193,6 +202,14 @@ hrc_set_alarm_search:
        ; sonst tue nichts
        rjmp handle_end_sleep
 
+
+hrc_fw_configinfo:
+       ldi r_mode,OW_FWCONFIGINFO
+       ldi r_sendflag,1
+       CRCInit2
+       rjmp h_fwconfiginfo
+
+
 ;---------------------------------------------------
 ;   MATCH ROM
 ;---------------------------------------------------
@@ -290,6 +307,39 @@ h_readrom_all:
        rjmp handle_end_sleep
 
 
+;---------------------------------------------------
+;   FW_CONFIG_INFO
+;---------------------------------------------------
+
+h_fwconfiginfo:
+       cpi  r_bytep,16
+       breq h_fwconfiginfo_crc
+#ifdef _CRC8_
+       cpi  r_bytep,17
+       breq h_fwconfiginfo_all
+#elif defined _CRC16_
+       cpi  r_bytep,17
+       breq h_fwconfiginfo_crc2
+       cpi  r_bytep,18
+       breq h_fwconfiginfo_all
+#else
+       cpi  r_bytep,16
+       breq h_fwconfiginfo_all
+#warning No CRC known code implemented
+#endif
+       configZ config_info,r_bytep
+       ld   r_rwbyte,Z
+       rjmp handle_end_inc
+h_fwconfiginfo_crc:
+       lds r_rwbyte,crc
+       rjmp handle_end_inc
+h_fwconfiginfo_crc2:
+       lds r_rwbyte,crc+1
+       rjmp handle_end_inc
+h_fwconfiginfo_all:
+       rjmp handle_end_sleep
+
+
 ;---------------------------------------------------
 ;   CHANGE ROM FUNCTIONS
 ;---------------------------------------------------
@@ -391,7 +441,7 @@ OWINIT:
 #ifndef _DIS_FLASH_
 ; check for bootloader jumper
        ;vor allen anderen Registerconfigs
-       
+       push r_temp
        ldi r_temp,(1<<PUD) ;enable pullup 
        out _SFR_IO_ADDR(MCUCR) ,r_temp
        sbi _SFR_IO_ADDR(PORTA),PINA5 ;internal pullup on PINA5
@@ -407,7 +457,7 @@ OWINIT:
        sbic _SFR_IO_ADDR(PINA),PINA5 
        rjmp owinit_botest_end ;PINA5 nicht 0.... nicht verbunden
        cbi _SFR_IO_ADDR(DDRA),PINA4
-       ldi r_temp,0xE0
+       ldi r_temp,0xC0
        push r_temp
        ldi r_temp,0x0E
        push r_temp
@@ -424,4 +474,20 @@ owinit_botest_end:
        sts bcount,r_temp
        sts alarmflag,r_temp
        RESETZEROMARKER
+       pop r_temp
        ret
+
+
+.global EXTERN_SLEEP
+EXTERN_SLEEP:
+       cli
+       push r_temp
+       ldi r_temp,0
+       sts mode,r_temp ;SLEEP
+       sts gcontrol,r_temp
+       sts sendflag,r_temp
+       sts bcount,r_temp
+       RESETZEROMARKER
+       pop r_temp
+       sei
+       ret
\ No newline at end of file