+++ /dev/null
-\r
-// Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de\r
-// All rights reserved. \r
-// \r
-// Redistribution and use in source and binary forms, with or without \r
-// modification, are permitted provided that the following conditions are \r
-// met: \r
-// \r
-// * Redistributions of source code must retain the above copyright \r
-// notice, this list of conditions and the following disclaimer. \r
-// * Redistributions in binary form must reproduce the above copyright \r
-// notice, this list of conditions and the following disclaimer in the \r
-// documentation and/or other materials provided with the \r
-// distribution. \r
-// * All advertising materials mentioning features or use of this \r
-// software must display the following acknowledgement: This product \r
-// includes software developed by tm3d.de and its contributors. \r
-// * Neither the name of tm3d.de nor the names of its contributors may \r
-// be used to endorse or promote products derived from this software \r
-// without specific prior written permission. \r
-// \r
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
-\r
-#define _CHANGEABLE_ID_\r
-#include "../common/OWConfig.s"\r
-#include "../common/OWCRC16.s"\r
-\r
-.extern pack,45\r
-.extern counters,8\r
-\r
-.macro CHIP_INIT \r
-.endm\r
-\r
-.macro COMMAND_TABLE\r
- rjmp h_channelaccess\r
-.endm\r
-\r
-#include "../common/OWRomFunctions.s"\r
-#include "../common/OWTimerInterrupt.s"\r
-\r
-\r
-\r
-; Ab hier Geraeteabhaenging\r
-#define OW_CHANNEL_ACCESS OW_FIRST_COMMAND+0\r
-\r
-;---------------------------------------------------\r
-; READ COMMAND and start operation\r
-;---------------------------------------------------\r
-\r
-\r
-h_readcommand:\r
- clr r_bytep\r
-#ifndef _DIS_FLASH_\r
- FLASH_COMMANDS ; muss zu erst sein....\r
-#endif\r
- cset 0x0F,OW_WRITE_SCRATCHPAD\r
- cjmp 0xAA,hrc_set_readscratchpad\r
- cset 0x5A,OW_COPY_SCRATCHPAD\r
- cset 0xF0,OW_READ_MEMORY_ADDR\r
- cset 0xA5,OW_READ_MEMORYCOUNTER_ADDR\r
-#ifdef _CHANGEABLE_ID_\r
- CHANGE_ID_COMMANDS\r
-#endif\r
- ldi r_mode,OW_SLEEP\r
- rjmp handle_end\r
-\r
-hrc_set_readscratchpad:\r
- ldi r_mode,OW_READ_SCRATCHPAD\r
- ldi r_sendflag,1\r
- rjmp h_readscratchpad\r
-\r
-h_writescratchpad:\r
- configZ pack,r_bytep\r
- inc r_bytep\r
- st Z,r_rwbyte\r
- cpi r_bytep,2\r
- breq h_writescratchpad_block\r
- brsh h_writescratchpad_set_eoffset ;;33\r
- rjmp handle_end ;handle_end zu weit entfernt fuer br...\r
-h_writescratchpad_set_eoffset:\r
- cpi r_bytep,35\r
- breq h_writescratchpad_setcrc\r
- mov r_temp,r_bytep\r
- subi r_temp,4\r
- sts pack+2,r_temp ;AA und PF cleared\r
- rjmp handle_end\r
-;Start writeing to 32 Byte Block ; skip status byte \r
-h_writescratchpad_block:\r
- lds r_temp,pack ; Adresse low byte\r
- andi r_temp,0x1F ;32 byte\r
- add r_bytep,r_temp ;Zur angegebenen Startadresse springen\r
- ;ori r_temp,0x20 ; Set PF flag\r
- sts pack+2,r_temp ;E4:E0 vorher setzen\r
- ; Byte 3 ueberspringen\r
- rjmp handle_end_inc\r
-\r
-h_writescratchpad_setcrc:\r
- ;copy crc to pack\r
- lds r_temp,crc\r
- com r_temp\r
- sts pack+43,r_temp\r
- lds r_temp,crc+1\r
- com r_temp ; invertieren , komischer name.....\r
- sts pack+44,r_temp\r
- ldi r_mode,OW_WRITE_SCRATCHPAD_CRC\r
- ldi r_sendflag,1\r
- ldi r_bytep,43\r
-h_writescratchpad_crc:\r
- cpi r_bytep,45\r
- breq h_writescratchpad_crc_end\r
- configZ pack,r_bytep\r
- ld r_rwbyte,Z\r
- rjmp handle_end_inc\r
-h_writescratchpad_crc_end:\r
- rjmp handle_end_sleep\r
- \r
- \r
-h_readscratchpad:\r
- cpi r_bytep,35\r
- breq h_readscratchpad_end\r
- cpi r_bytep,3\r
- brne h_readscratchpad_read_byte\r
-h_readscratchpad_set_offset:\r
- lds r_temp,pack\r
- andi r_temp,0x1F\r
- ldi r_temp2,3\r
- add r_temp,r_temp2\r
- mov r_bytep,r_temp\r
-h_readscratchpad_read_byte:\r
- configZ pack,r_bytep\r
- ld r_rwbyte,Z\r
- rjmp handle_end_inc\r
-h_readscratchpad_end:\r
- rjmp handle_end_sleep\r
-\r
-\r
-\r
-h_copyscratchpad:\r
- cpi r_bytep,3\r
- brsh h_copyscratchpad_ok\r
- configZ pack,r_bytep\r
- inc r_bytep\r
- ld r_temp,Z\r
- cp r_temp,r_rwbyte\r
- brne h_copyscratchpad_nok\r
- cpi r_bytep,3\r
- breq h_copyscratchpad_ok\r
- ldi r_bcount,1 \r
- rjmp handle_end\r
-h_copyscratchpad_ok:\r
- ldi r_rwbyte,0xAA\r
- ldi r_sendflag,1\r
- rjmp handle_end\r
-h_copyscratchpad_nok:\r
- lds r_temp,pack+3\r
- andi r_temp,~0x80\r
- sts pack+3,r_temp\r
- rjmp handle_end_sleep\r
-\r
-\r
-h_readmemory_addr:\r
- cpi r_bytep,0\r
- brne h_readmrmory_addr_byte1\r
- sts pack,r_rwbyte\r
- rjmp handle_end_inc\r
-h_readmrmory_addr_byte1:\r
- sts pack+1,r_rwbyte\r
- ldi r_mode,OW_READ_MEMORY\r
- ldi r_sendflag,1\r
- clr r_bytep\r
- rjmp h_readmemory2\r
-h_readmemory:\r
- lds r_bytep,pack\r
- lds r_temp2,pack+1\r
- inc r_bytep\r
- clr r_temp\r
- adc r_temp2,r_temp\r
- sbrc r_temp2,1\r
- rjmp h_readmemory_end\r
- sts pack+1,r_temp\r
- sts pack,r_bytep\r
-h_readmemory2:\r
- lds r_bytep,pack\r
- andi r_bytep,0x1F\r
- configZ pack+3,r_bytep\r
- ld r_rwbyte,Z\r
- rjmp handle_end\r
-h_readmemory_end:\r
- rjmp handle_end_sleep\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-h_readmemorycounter_addr:\r
- cpi r_bytep,0\r
- brne h_readmrmorycounter_addr_byte1\r
- sts pack,r_rwbyte\r
- inc r_bytep\r
- ;ldi r_bcount,1\r
- rjmp handle_end\r
-h_readmrmorycounter_addr_byte1:\r
- sts pack+1,r_rwbyte\r
- ldi r_mode,OW_READ_MEMORYCOUNTER\r
- ;ldi r_bcount,1 \r
- ldi r_sendflag,1\r
- clr r_bytep\r
- rjmp h_readmemorycounter2\r
-h_readmemorycounter:\r
- lds r_bytep,pack\r
- lds r_temp2,pack+1\r
- ldi r_temp,1 ;inc leider kein c flag\r
- add r_bytep,r_temp\r
- clr r_temp\r
- adc r_temp2,r_temp\r
- mov r_temp,r_bytep\r
- andi r_temp,0x1F\r
- breq h_readmemorycounter_next\r
- sts pack+1,r_temp2\r
- sts pack,r_bytep\r
-h_readmemorycounter2: ;Lesen von dem worauf die erstenzwei bytes zeigen\r
- lds r_bytep,pack\r
- andi r_bytep,0x1F\r
- configZ pack+3,r_bytep\r
- ld r_rwbyte,Z\r
- ;ldi r_bcount,1\r
- rjmp handle_end\r
-//h_readmemorycounter_end:\r
-// ldi r_mode,OW_SLEEP\r
-// clr r_sendflag\r
-// rjmp handle_end\r
-h_readmemorycounter_next: ; rest lesen\r
- ldi r_mode,OW_READ_MEMORYCOUNTER_EX\r
- ldi r_bytep,34\r
- lds r_temp2,pack\r
- lds r_temp,pack+1\r
- //lsr r_temp\r
- //ror r_temp2\r
-\r
- lsl r_temp2\r
- rol r_temp\r
- cpi r_temp,3\r
- brne h_readmemorycounter_cFF\r
- andi r_temp2,0xC0\r
- swap r_temp2\r
-\r
- ;cpi r_temp,0xE0\r
-\r
- configZ counters,r_temp2\r
- ld r_temp,Z+\r
- sts pack+35,r_temp \r
- ld r_temp,Z+\r
- sts pack+36,r_temp \r
- ld r_temp,Z+\r
- sts pack+37,r_temp \r
- ld r_temp,Z+\r
- sts pack+38,r_temp \r
- rjmp h_readmemorycounter_ex\r
-h_readmemorycounter_cFF:\r
- ldi r_temp,0xFF\r
- sts pack+35,r_temp \r
- sts pack+36,r_temp \r
- sts pack+37,r_temp \r
- sts pack+38,r_temp \r
-\r
-h_readmemorycounter_ex:\r
- inc r_bytep\r
- cpi r_bytep,45\r
- breq h_readmemorycounter_ex_end\r
- cpi r_bytep,43\r
- brne h_readmemorycounter_ex2\r
- lds r_temp,crc\r
- com r_temp\r
- sts pack+43,r_temp\r
- lds r_temp,crc+1\r
- com r_temp\r
- sts pack+44,r_temp\r
-h_readmemorycounter_ex2:\r
- ;ldi r_bcount,1\r
- configZ pack,r_bytep\r
- ld r_rwbyte,Z\r
- rjmp handle_end\r
-h_readmemorycounter_ex_end:\r
- lds r_bytep,pack\r
- lds r_temp2,pack+1\r
- ldi r_temp,1 ;inc leider kein c flag\r
- add r_bytep,r_temp\r
- clr r_temp\r
- adc r_temp2,r_temp\r
- sbrc r_temp2,1 ;am ene von allem \r
- rjmp h_readmemorycounter_ex_sleep\r
- CRCInit1\r
- ldi r_mode,OW_READ_MEMORYCOUNTER\r
- sts pack+1,r_temp2\r
- sts pack,r_bytep\r
- rjmp h_readmemorycounter2\r
-h_readmemorycounter_ex_sleep:\r
- ldi r_mode,OW_SLEEP\r
- clr r_sendflag\r
- rjmp handle_end\r
-\r
-\r
-\r
- \r
-\r
-#include "../common/OWPinInterrupt.s"\r
-.end
\ No newline at end of file