Linux Git
[owSlave2.git] / common / OWDS2438_DS2438.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 \r
43 #if  defined(__AVR_ATtiny25__)\r
44 .extern pack2,16\r
45 .extern pack1,16\r
46 #else\r
47 .extern pack2,64\r
48 .extern pack1,64\r
49 #endif\r
50 .extern  DS2438_1_TEMP,2\r
51 .extern  DS2438_1_VAD,2\r
52 .extern  DS2438_2_TEMP,2\r
53 .extern  DS2438_2_VAD,2\r
54 .comm block,1 ; Block der augegeben, geschrieben wird (Parameter von READ/WRITE Scratchpad)\r
55 .comm cpsp2,1 ; Copy Scratchpad marker\r
56 \r
57 .macro CHIP_INIT        ;r_temp is pushed other Registers should be saved\r
58         ldi r_temp,0\r
59         sts cpsp2,r_temp\r
60 .endm\r
61 \r
62 .macro COMMAND_TABLE\r
63                 rjmp h_readscratchpad_adr1\r
64                 rjmp h_readscratchpad1\r
65                 rjmp h_writescratchpad_adr1\r
66                 rjmp h_writescratchpad1\r
67                 rjmp h_readscratchpad_adr2\r
68                 rjmp h_readscratchpad2\r
69                 rjmp h_writescratchpad_adr2\r
70                 rjmp h_writescratchpad2\r
71                 rjmp h_copyscratchpad_adr2\r
72 .endm\r
73 \r
74 #include "../common/OWRomFunctionsDual.s"\r
75 #include "../common/OWTimerInterrupt.s"\r
76 \r
77 \r
78 \r
79 ; Ab hier Geraeteabhaenging\r
80 #define OW_READ_SCRATCHPAD_ADR1 OW_FIRST_COMMAND+0\r
81 #define OW_READ_SCRATCHPAD1 OW_FIRST_COMMAND+1\r
82 #define OW_WRITE_SCRATCHPAD_ADR1 OW_FIRST_COMMAND+2\r
83 #define OW_WRITE_SCRATCHPAD1 OW_FIRST_COMMAND+3\r
84 #define OW_READ_SCRATCHPAD_ADR2 OW_FIRST_COMMAND+4\r
85 #define OW_READ_SCRATCHPAD2 OW_FIRST_COMMAND+5\r
86 #define OW_WRITE_SCRATCHPAD_ADR2 OW_FIRST_COMMAND+6\r
87 #define OW_WRITE_SCRATCHPAD2 OW_FIRST_COMMAND+7\r
88 #define OW_COPY_SCRATCHPAD_ADR2 OW_FIRST_COMMAND+8\r
89 \r
90 \r
91 ;---------------------------------------------------\r
92 ;       READ COMMAND and start operation\r
93 ;---------------------------------------------------\r
94 \r
95 #ifdef _HANDLE_CC_COMMAND_\r
96 h_readcommand12:\r
97         clr r_bytep\r
98         cljmp 0x44,hrc_set_convertT12\r
99         cljmp 0xB4,hrc_set_convertV12\r
100         ldi r_mode,OW_SLEEP\r
101         rjmp handle_end\r
102 #endif\r
103 \r
104 \r
105 h_readcommand1:\r
106         clr r_bytep\r
107 #ifndef _DIS_FLASH_\r
108         FLASH_COMMANDS ; muss zu erst sein....\r
109 #endif\r
110         cset 0xBE,OW_READ_SCRATCHPAD_ADR1\r
111         cset 0x4E,OW_WRITE_SCRATCHPAD_ADR1\r
112         cjmp 0x44,hrc_set_convertT1\r
113         cjmp 0xB4,hrc_set_convertV1\r
114         FW_CONFIG_INFO1\r
115 #ifdef _CHANGEABLE_ID_\r
116         CHANGE_ID_COMMANDS\r
117 #endif\r
118         rjmp handle_end_sleep\r
119 \r
120 \r
121 hrc_set_convertT1:\r
122         rcall chrc_set_convertT1\r
123         rjmp handle_end_sleep\r
124 \r
125 chrc_set_convertT1:\r
126         ldi r_temp,1\r
127         sts gcontrol,r_temp\r
128         lds r_temp,DS2438_1_TEMP\r
129         sts pack1+1,r_temp\r
130         lds r_temp,DS2438_1_TEMP+1\r
131         sts pack1+2,r_temp\r
132         ret\r
133 \r
134 hrc_set_convertV1:\r
135         rcall chrc_set_convertV1\r
136         rjmp handle_end_sleep\r
137 \r
138 chrc_set_convertV1:\r
139         lds r_temp,pack1\r
140         sbrs r_temp,3\r
141         rjmp hrc_set_convertVV1\r
142         ldi r_temp,0xF4  //5V\r
143         sts pack1+3,r_temp\r
144         ldi r_temp,0x01\r
145         sts pack1+4,r_temp\r
146         rjmp hrc_set_convertend1\r
147 hrc_set_convertVV1:\r
148         ldi r_temp,2\r
149         sts gcontrol,r_temp\r
150         lds r_temp,DS2438_1_VAD\r
151         sts pack1+3,r_temp\r
152         lds r_temp,DS2438_1_VAD+1\r
153         sts pack1+4,r_temp\r
154 hrc_set_convertend1:\r
155         ret\r
156 \r
157 \r
158 \r
159 ;---------------------------------------------------\r
160 ;   READ SCRATCHPAD\r
161 ;---------------------------------------------------\r
162 \r
163 h_readscratchpad_adr1:\r
164         lsl r_rwbyte\r
165         lsl r_rwbyte\r
166         lsl r_rwbyte\r
167 #if  defined(__AVR_ATtiny25__)\r
168         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen\r
169 #endif\r
170         sts block,r_rwbyte\r
171         ldi r_sendflag,1\r
172         ldi r_mode,OW_READ_SCRATCHPAD1\r
173         CRCInit2\r
174 h_readscratchpad1:\r
175         cpi  r_bytep,8\r
176         breq h_readscratchpad_crc1\r
177         cpi  r_bytep,9\r
178         breq h_readscratchpad_all1\r
179         lds  r_temp,block\r
180         add  r_temp,r_bytep\r
181         configZ pack1,r_temp\r
182         ld   r_rwbyte,Z\r
183         rjmp handle_end_inc\r
184 h_readscratchpad_crc1:\r
185         lds  r_rwbyte,crc\r
186         rjmp handle_end_inc\r
187 h_readscratchpad_all1:\r
188         rjmp handle_end_sleep\r
189 \r
190 \r
191 \r
192 \r
193 ;---------------------------------------------------\r
194 ;   WRITE SCRATCHPAD\r
195 ;---------------------------------------------------\r
196 h_writescratchpad_adr1:\r
197         lsl r_rwbyte\r
198         lsl r_rwbyte\r
199         lsl r_rwbyte\r
200 #if  defined(__AVR_ATtiny25__)\r
201         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen\r
202 #endif\r
203         sts block,r_rwbyte\r
204         ldi r_mode,OW_WRITE_SCRATCHPAD1\r
205         ldi  r_bcount,1 \r
206         rjmp handle_end \r
207 h_writescratchpad1:\r
208         cpi  r_bytep,8\r
209         breq h_writescratchpad_all1\r
210         lds  r_temp,block\r
211         add  r_temp,r_bytep\r
212         configZ pack1,r_temp\r
213         st   Z,r_rwbyte\r
214         rjmp handle_end_inc\r
215 h_writescratchpad_all1:\r
216         rjmp handle_end_sleep\r
217 \r
218 \r
219 \r
220 \r
221 \r
222 \r
223 \r
224 \r
225 #ifdef _HANDLE_CC_COMMAND_\r
226 hrc_set_convertT12:\r
227         rcall chrc_set_convertT1\r
228         rcall chrc_set_convertT2\r
229         rjmp handle_end_sleep\r
230 \r
231 hrc_set_convertV12:\r
232         rcall chrc_set_convertV1\r
233         rcall chrc_set_convertV2\r
234         rjmp handle_end_sleep\r
235 #endif\r
236 \r
237 \r
238 ;*****************************************************************************************************************************************************************************************\r
239 ;*****************************************************************************************************************************************************************************************\r
240 ;*****************************************************************************************************************************************************************************************\r
241 ;*****************************************************************************************************************************************************************************************\r
242 ;*****************************************************************************************************************************************************************************************\r
243 \r
244 \r
245 \r
246 \r
247 \r
248 h_readcommand2:\r
249         clr r_bytep\r
250 #ifndef _DIS_FLASH_\r
251         FLASH_COMMANDS ; muss zu erst sein....\r
252 #endif\r
253         cset 0xBE,OW_READ_SCRATCHPAD_ADR2\r
254         cset 0x4E,OW_WRITE_SCRATCHPAD_ADR2\r
255         cjmp 0x44,hrc_set_convertT2\r
256         cjmp 0xB4,hrc_set_convertV2\r
257         cset 0x48,OW_COPY_SCRATCHPAD_ADR2\r
258         FW_CONFIG_INFO2\r
259         //cljmp 0x85,hrc_fw_configinfo2\r
260 #ifdef _CHANGEABLE_ID_\r
261         CHANGE_ID_COMMANDS\r
262 #endif\r
263         rjmp handle_end_sleep\r
264 \r
265 hrc_set_convertT2:\r
266         rcall chrc_set_convertT2\r
267         rjmp handle_end_sleep\r
268 \r
269 hrc_set_convertV2:\r
270         rcall chrc_set_convertV2\r
271         rjmp handle_end_sleep\r
272 \r
273 \r
274 chrc_set_convertT2:\r
275         ldi r_temp,3\r
276         sts gcontrol,r_temp\r
277         lds r_temp,DS2438_2_TEMP\r
278         sts pack2+1,r_temp\r
279         lds r_temp,DS2438_2_TEMP+1\r
280         sts pack2+2,r_temp\r
281         ret\r
282 \r
283 chrc_set_convertV2:\r
284         lds r_temp,pack2\r
285         sbrs r_temp,3\r
286         rjmp hrc_set_convertVV2\r
287         ldi r_temp,0xF4\r
288         sts pack2+3,r_temp\r
289         ldi r_temp,0x01\r
290         sts pack2+4,r_temp\r
291         rjmp hrc_set_convertend2\r
292 hrc_set_convertVV2:\r
293         ldi r_temp,4\r
294         sts gcontrol,r_temp\r
295         lds r_temp,DS2438_2_VAD\r
296         sts pack2+3,r_temp\r
297         lds r_temp,DS2438_2_VAD+1\r
298         sts pack2+4,r_temp\r
299 hrc_set_convertend2:\r
300         ret\r
301 \r
302 \r
303 \r
304 ;---------------------------------------------------\r
305 ;   READ SCRATCHPAD\r
306 ;---------------------------------------------------\r
307 \r
308 h_readscratchpad_adr2:\r
309         lsl r_rwbyte\r
310         lsl r_rwbyte\r
311         lsl r_rwbyte\r
312 #if  defined(__AVR_ATtiny25__)\r
313         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen\r
314 #endif\r
315         sts block,r_rwbyte\r
316         ldi r_sendflag,1\r
317         ldi r_mode,OW_READ_SCRATCHPAD2\r
318         CRCInit2\r
319 h_readscratchpad2:\r
320         cpi  r_bytep,8\r
321         breq h_readscratchpad_crc2\r
322         cpi  r_bytep,9\r
323         breq h_readscratchpad_all2\r
324         lds  r_temp,block\r
325         add  r_temp,r_bytep\r
326         configZ pack2,r_temp\r
327         ld   r_rwbyte,Z\r
328         rjmp handle_end_inc\r
329 h_readscratchpad_crc2:\r
330         lds  r_rwbyte,crc\r
331         rjmp handle_end_inc\r
332 h_readscratchpad_all2:\r
333         rjmp handle_end_sleep\r
334 \r
335 \r
336 \r
337 \r
338 ;---------------------------------------------------\r
339 ;   WRITE SCRATCHPAD\r
340 ;---------------------------------------------------\r
341 h_writescratchpad_adr2:\r
342         lsl r_rwbyte\r
343         lsl r_rwbyte\r
344         lsl r_rwbyte\r
345 #if  defined(__AVR_ATtiny25__)\r
346         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen\r
347 #endif\r
348         sts block,r_rwbyte\r
349         ldi r_mode,OW_WRITE_SCRATCHPAD2\r
350         ldi  r_bcount,1 \r
351         rjmp handle_end \r
352 h_writescratchpad2:\r
353         cpi  r_bytep,8\r
354         breq h_writescratchpad_all2\r
355         lds  r_temp,block\r
356         add  r_temp,r_bytep\r
357         configZ pack2,r_temp\r
358         st   Z,r_rwbyte\r
359         rjmp handle_end_inc\r
360 h_writescratchpad_all2:\r
361         rjmp handle_end_sleep\r
362 \r
363 \r
364 \r
365 h_copyscratchpad_adr2:\r
366         ori r_rwbyte,0x80 ;hoechstes bit ist 1 zum Testen\r
367         sts cpsp2,r_rwbyte\r
368         rjmp handle_end_sleep\r
369 \r
370 \r
371 \r
372 \r
373 \r
374 #include "../common/OWPinInterrupt.s"\r
375 .end\r