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