Many changes from 2018
[owSlave2.git] / common / OWDS2401_DS2413.S
1 \r
2 // Copyright (c) 2017, Tobias Mueller tm(at)tm3d.de\r
3 // All rights reserved. \r
4 // \r
5 // Redistribution and use in source and binary forms, with or without \r
6 // modification, are permitted provided that the following conditions are \r
7 // met: \r
8 // \r
9 //  * Redistributions of source code must retain the above copyright \r
10 //    notice, this list of conditions and the following disclaimer. \r
11 //  * Redistributions in binary form must reproduce the above copyright \r
12 //    notice, this list of conditions and the following disclaimer in the \r
13 //    documentation and/or other materials provided with the \r
14 //    distribution. \r
15 //  * All advertising materials mentioning features or use of this \r
16 //    software must display the following acknowledgement: This product \r
17 //    includes software developed by tm3d.de and its contributors. \r
18 //  * Neither the name of tm3d.de nor the names of its contributors may \r
19 //    be used to endorse or promote products derived from this software \r
20 //    without specific prior written permission. \r
21 // \r
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
25 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
26 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
27 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
28 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
29 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
30 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
31 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
32 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
33 \r
34 #define _CHANGEABLE_ID_\r
35 #define _ZERO_POLLING_\r
36 //#define _HANDLE_CC_COMMAND_\r
37 //#define _DB_\r
38 \r
39 #include "../common/OWConfig.s"\r
40 #include "../common/OWCRC8.s"\r
41 \r
42 .extern pin_state,1\r
43 .extern pin_set,1\r
44 .comm resv1,1\r
45 \r
46 \r
47 .macro CHIP_INIT        ;r_temp is pushed other Registers should be saved\r
48 .endm\r
49 \r
50 .macro COMMAND_TABLE\r
51                 rjmp h_accessread\r
52                 rjmp h_accesswrite\r
53                 rjmp h_accesswrite_read\r
54 .endm\r
55 \r
56 #include "../common/OWRomFunctionsDual.s"\r
57 #include "../common/OWTimerInterrupt.s"\r
58 \r
59 \r
60 \r
61 ; Ab hier Geraeteabhaenging\r
62 #define OW_ACCESSREAD OW_FIRST_COMMAND+0\r
63 #define OW_ACCESSWRITE OW_FIRST_COMMAND+1\r
64 #define OW_ACCESSWRITE_READ OW_FIRST_COMMAND+2\r
65 \r
66 ;---------------------------------------------------\r
67 ;       READ COMMAND and start operation\r
68 ;---------------------------------------------------\r
69 \r
70 #ifdef _HANDLE_CC_COMMAND_\r
71 /*h_readcommand12:\r
72         clr r_bytep\r
73         cset 0x44,hrc_set_convertT12\r
74         ldi r_mode,OW_SLEEP\r
75         rjmp handle_end*/\r
76 #endif\r
77 \r
78 \r
79 h_readcommand1:\r
80         clr r_bytep\r
81 #ifndef _DIS_FLASH_\r
82         FLASH_COMMANDS ; muss zu erst sein....\r
83 #endif\r
84 \r
85 /*      cset 0xBE,OW_READ_SCRATCHPAD_ADR1\r
86         cset 0x4E,OW_WRITE_SCRATCHPAD_ADR1\r
87         cjmp 0x44,hrc_set_convertT1\r
88         cjmp 0xB4,hrc_set_convertV1*/\r
89         FW_CONFIG_INFO1\r
90 #ifdef _CHANGEABLE_ID_\r
91         CHANGE_ID_COMMANDS\r
92 #endif\r
93         rjmp handle_end_sleep\r
94 \r
95 \r
96 \r
97 ;*****************************************************************************************************************************************************************************************\r
98 ;*****************************************************************************************************************************************************************************************\r
99 ;*****************************************************************************************************************************************************************************************\r
100 ;*****************************************************************************************************************************************************************************************\r
101 ;*****************************************************************************************************************************************************************************************\r
102 \r
103 \r
104 \r
105 \r
106 \r
107 h_readcommand2:\r
108         clr r_bytep\r
109 #ifndef _DIS_FLASH_\r
110         FLASH_COMMANDS ; muss zu erst sein....\r
111 #endif\r
112         cjmp 0xF5,hrc_accessread\r
113         cset 0x5A,OW_ACCESSWRITE\r
114 /*      cset 0xBE,OW_READ_SCRATCHPAD_ADR2\r
115         cset 0x4E,OW_WRITE_SCRATCHPAD_ADR2\r
116         cjmp 0x44,hrc_set_convertT2\r
117         cjmp 0xB4,hrc_set_convertV2*/\r
118         FW_CONFIG_INFO2\r
119         //cljmp 0x85,hrc_fw_configinfo2\r
120 #ifdef _CHANGEABLE_ID_\r
121         CHANGE_ID_COMMANDS\r
122 #endif\r
123         rjmp handle_end_sleep\r
124 \r
125 \r
126 hrc_accessread:\r
127         ldi r_sendflag,1\r
128         ldi r_mode,OW_ACCESSREAD\r
129 h_accessread:\r
130         lds r_temp,pin_state\r
131         andi r_temp,0x0F\r
132         mov r_rwbyte,r_temp\r
133         com r_rwbyte\r
134         swap r_rwbyte\r
135         andi r_rwbyte,0xF0\r
136         or r_rwbyte,r_temp\r
137         rjmp handle_end\r
138 \r
139 \r
140 \r
141 \r
142 h_accesswrite_read:\r
143         rjmp handle_end_sleep\r
144         \r
145 \r
146 \r
147 h_accesswrite:\r
148         cpi  r_bytep,1\r
149         breq h_accesswrite_compl\r
150         sts resv1,r_rwbyte\r
151         rjmp handle_end_inc\r
152 h_accesswrite_compl:\r
153         com r_rwbyte\r
154         lds r_temp,resv1\r
155         cp r_temp,r_rwbyte\r
156         brne h_accesswrite_error\r
157         sts  pin_set,r_rwbyte\r
158         ldi r_mode,OW_ACCESSWRITE_READ\r
159         ldi r_rwbyte,0xAA\r
160         ldi r_sendflag,1\r
161         rjmp handle_end_inc\r
162 h_accesswrite_error:\r
163         rjmp handle_end_sleep\r
164 /*\r
165 ;---------------------------------------------------\r
166 ;   WRITE SCRATCHPAD\r
167 ;---------------------------------------------------\r
168 h_writescratchpad_adr2:\r
169         lsl r_rwbyte\r
170         lsl r_rwbyte\r
171         lsl r_rwbyte\r
172 #if  defined(__AVR_ATtiny25__)\r
173         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen\r
174 #endif\r
175         sts block,r_rwbyte\r
176         ldi r_mode,OW_WRITE_SCRATCHPAD2\r
177         ldi  r_bcount,1 \r
178         rjmp handle_end \r
179 h_writescratchpad2:\r
180         cpi  r_bytep,8\r
181         breq h_writescratchpad_all2\r
182         lds  r_temp,block\r
183         add  r_temp,r_bytep\r
184         configZ pack2,r_temp\r
185         st   Z,r_rwbyte\r
186         rjmp handle_end_inc\r
187 h_writescratchpad_all2:\r
188         rjmp handle_end_sleep\r
189 \r
190 \r
191 \r
192 \r
193 \r
194 \r
195         */\r
196 \r
197 \r
198 #include "../common/OWPinInterrupt.s"\r
199 .end\r