Rename Files of different Devices
[owSlave2.git] / DS18B20_DS2438 / OWDS18B20_DS2438.S
1
2 // Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
3 // All rights reserved. 
4 // 
5 // Redistribution and use in source and binary forms, with or without 
6 // modification, are permitted provided that the following conditions are 
7 // met: 
8 // 
9 //  * Redistributions of source code must retain the above copyright 
10 //    notice, this list of conditions and the following disclaimer. 
11 //  * Redistributions in binary form must reproduce the above copyright 
12 //    notice, this list of conditions and the following disclaimer in the 
13 //    documentation and/or other materials provided with the 
14 //    distribution. 
15 //  * All advertising materials mentioning features or use of this 
16 //    software must display the following acknowledgement: This product 
17 //    includes software developed by tm3d.de and its contributors. 
18 //  * Neither the name of tm3d.de nor the names of its contributors may 
19 //    be used to endorse or promote products derived from this software 
20 //    without specific prior written permission. 
21 // 
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
25 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
26 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
27 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
28 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
29 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
30 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
31 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
32 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
33
34 #define _CHANGEABLE_ID_
35 #define _ZERO_POLLING_
36 #define _DB_
37
38 #include "../common/OWConfig.s"
39 #include "../common/OWCRC8.s"
40
41 .extern pack1,8
42
43 //.extern  am2302_temp,2
44
45 #if  defined(__AVR_ATtiny25__)
46 .extern pack2,16
47 #else
48 .extern pack2,64
49 #endif
50 .extern  am2302_temp,2
51 .extern  am2302_hum,2
52 .comm block,1 ; Block der augegeben, geschrieben wird (Parameter von READ/WRITE Scratchpad)
53
54
55 .macro CHIP_INIT        
56 Init_EEPROM_read:
57         sbic _SFR_IO_ADDR(EECR), EEPE
58         rjmp Init_EEPROM_read
59         ldi r_temp,0
60         out _SFR_IO_ADDR(EEARH), r_temp
61         ldi r_temp,2
62         out _SFR_IO_ADDR(EEARL), r_temp
63         sbi _SFR_IO_ADDR(EECR), EERE
64         in r_temp,_SFR_IO_ADDR(EEDR)
65         sbrs r_temp,7
66         rcall hrc_recall_eeprom_func1
67 .endm
68
69 .macro COMMAND_TABLE
70                 rjmp h_readscratchpad1
71                 rjmp h_writescratchpad1
72                 rjmp h_readscratchpad_adr2
73                 rjmp h_readscratchpad2
74                 rjmp h_writescratchpad_adr2
75                 rjmp h_writescratchpad2
76 .endm
77
78 #include "../common/OWRomFunctionsDual.s"
79 #include "../common/OWTimerInterrupt.s"
80
81
82
83 ; Ab hier Geraeteabhaenging
84 #define OW_READ_SCRATCHPAD1 OW_FIRST_COMMAND+0
85 #define OW_WRITE_SCRATCHPAD1 OW_FIRST_COMMAND+1
86 #define OW_READ_SCRATCHPAD_ADR2 OW_FIRST_COMMAND+2
87 #define OW_READ_SCRATCHPAD2 OW_FIRST_COMMAND+3
88 #define OW_WRITE_SCRATCHPAD_ADR2 OW_FIRST_COMMAND+4
89 #define OW_WRITE_SCRATCHPAD2 OW_FIRST_COMMAND+5
90
91
92 ;---------------------------------------------------
93 ;       READ COMMAND and start operation
94 ;---------------------------------------------------
95
96
97 h_readcommand1:
98         clr r_bytep
99 #ifndef _DIS_FLASH_
100         FLASH_COMMANDS ; muss zu erst sein....
101 #endif
102         cjmp 0xBE,hrc_set_readscratchpad1
103         cjmp 0x4E,hrc_set_writescratchpad1
104         cjmp 0x44,hrc_set_convertT1
105         cjmp 0x48,hrc_copy_scratchpad1
106         cjmp 0xB8,hrc_recall_eeprom1
107         FW_CONFIG_INFO1
108 #ifdef _CHANGEABLE_ID_
109         CHANGE_ID_COMMANDS
110 #endif
111         ldi r_mode,OW_SLEEP
112         rjmp handle_end
113
114 hrc_set_readscratchpad1:
115         ldi r_mode,OW_READ_SCRATCHPAD1
116         ldi r_sendflag,1
117         CRCInit2
118         rjmp h_readscratchpad1
119
120 hrc_set_writescratchpad1:
121         ldi r_mode,OW_WRITE_SCRATCHPAD1
122         ldi r_bytep,2 ;start to write in 2
123         rjmp handle_end
124
125 hrc_recall_eeprom1:
126         rcall hrc_recall_eeprom_func1
127         rjmp handle_end
128
129
130
131 hrc_set_convertT1:
132         ldi r_temp,1
133         sts gcontrol,r_temp
134
135         rjmp handle_end_sleep
136
137
138 hrc_copy_scratchpad1:
139         ldi r_bytep,2
140         configZ pack1,r_bytep
141         clr r_bytep
142 hrc_copy_scratchpad_EEPROM_write1:
143         sbic _SFR_IO_ADDR(EECR), EEPE   
144         rjmp hrc_copy_scratchpad_EEPROM_write1
145         ldi r_temp, (0<<EEPM1)|(0<<EEPM0)
146         out _SFR_IO_ADDR(EECR), r_temp
147         ldi r_temp,0
148         out _SFR_IO_ADDR(EEARH),r_temp
149         out _SFR_IO_ADDR(EEARL), r_bytep
150         ld  r_rwbyte,Z+
151         out _SFR_IO_ADDR(EEDR), r_rwbyte
152         sbi _SFR_IO_ADDR(EECR), EEMPE
153         sbi _SFR_IO_ADDR(EECR), EEPE
154         inc r_bytep
155         cpi r_bytep,3
156         brne hrc_copy_scratchpad_EEPROM_write1
157         rjmp handle_end
158
159
160 hrc_recall_eeprom_func1:
161         ldi r_bytep,2
162         configZ pack1,r_bytep
163         clr r_bytep
164         clr r_temp
165 hrc_recall_eeprom_EEPROM_read1:
166         sbic _SFR_IO_ADDR(EECR), EEPE
167         rjmp hrc_recall_eeprom_EEPROM_read1
168         out _SFR_IO_ADDR(EEARH), r_temp
169         out _SFR_IO_ADDR(EEARL), r_bytep
170         sbi _SFR_IO_ADDR(EECR), EERE
171         in r_rwbyte,_SFR_IO_ADDR(EEDR)
172         st Z+,r_rwbyte
173         inc r_bytep
174         cpi r_bytep,3
175         brne hrc_recall_eeprom_EEPROM_read1
176         ret
177
178
179
180
181
182
183 ;---------------------------------------------------
184 ;   READ SCRATCHPAD
185 ;---------------------------------------------------
186
187 h_readscratchpad1:
188         cpi  r_bytep,8
189         breq h_readscratchpad_crc1
190         cpi  r_bytep,9
191         breq h_readscratchpad_all1
192         configZ pack1,r_bytep
193         ld   r_rwbyte,Z
194         rjmp h_readscratchpad_endc1
195 h_readscratchpad_crc1:
196         lds  r_rwbyte,crc
197 h_readscratchpad_endc1:
198         inc  r_bytep
199         ldi  r_bcount,1 
200         rjmp handle_end
201 h_readscratchpad_all1:
202         rjmp handle_end_sleep
203
204
205
206
207
208 ;---------------------------------------------------
209 ;   WRITE SCRATCHPAD
210 ;---------------------------------------------------
211
212 h_writescratchpad1:
213         configZ pack1,r_bytep
214         inc  r_bytep
215         cpi  r_bytep,5
216         breq h_writescratchpad_all1
217         st   Z,r_rwbyte
218         rjmp handle_end
219 h_writescratchpad_all1:
220         ori r_rwbyte,0x1F ; Alle unteren Bits sind immer 1
221         st   Z,r_rwbyte
222         rjmp handle_end_sleep
223
224 ;*****************************************************************************************************************************************************************************************
225 ;*****************************************************************************************************************************************************************************************
226 ;*****************************************************************************************************************************************************************************************
227 ;*****************************************************************************************************************************************************************************************
228 ;*****************************************************************************************************************************************************************************************
229
230
231
232
233
234 h_readcommand2:
235         clr r_bytep
236 #ifndef _DIS_FLASH_
237         FLASH_COMMANDS ; muss zu erst sein....
238 #endif
239         cset 0xBE,OW_READ_SCRATCHPAD_ADR2
240         cset 0x4E,OW_WRITE_SCRATCHPAD_ADR2
241         cjmp 0x44,hrc_set_convertT2
242         cjmp 0xB4,hrc_set_convertV2
243         FW_CONFIG_INFO2
244 #ifdef _CHANGEABLE_ID_
245         CHANGE_ID_COMMANDS
246 #endif
247         rjmp handle_end_sleep
248
249
250 hrc_set_convertT2:
251         ldi r_temp,2
252         sts gcontrol,r_temp
253         lds r_temp,am2302_temp
254         sts pack2+1,r_temp
255         lds r_temp,am2302_temp+1
256         sts pack2+2,r_temp
257         rjmp handle_end_sleep
258 hrc_set_convertV2:
259         lds r_temp,pack2
260         sbrs r_temp,3
261         rjmp hrc_set_convertVV2
262         ldi r_temp,0xF4
263         sts pack2+3,r_temp
264         ldi r_temp,0x01
265         sts pack2+4,r_temp
266         rjmp hrc_set_convertend2
267 hrc_set_convertVV2:
268         ldi r_temp,3
269         sts gcontrol,r_temp
270         lds r_temp,am2302_hum
271         sts pack2+3,r_temp
272         lds r_temp,am2302_hum+1
273         sts pack2+4,r_temp
274 hrc_set_convertend2:
275         rjmp handle_end_sleep
276
277
278
279 ;---------------------------------------------------
280 ;   READ SCRATCHPAD
281 ;---------------------------------------------------
282
283 h_readscratchpad_adr2:
284         lsl r_rwbyte
285         lsl r_rwbyte
286         lsl r_rwbyte
287 #if  defined(__AVR_ATtiny25__)
288         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen
289 #endif
290         sts block,r_rwbyte
291         ldi r_sendflag,1
292         ldi r_mode,OW_READ_SCRATCHPAD2
293         CRCInit2
294 h_readscratchpad2:
295         cpi  r_bytep,8
296         breq h_readscratchpad_crc2
297         cpi  r_bytep,9
298         breq h_readscratchpad_all2
299         lds  r_temp,block
300         add  r_temp,r_bytep
301         configZ pack2,r_temp
302         ld   r_rwbyte,Z
303         rjmp handle_end_inc
304 h_readscratchpad_crc2:
305         lds  r_rwbyte,crc
306         rjmp handle_end_inc
307 h_readscratchpad_all2:
308         rjmp handle_end_sleep
309
310
311
312
313 ;---------------------------------------------------
314 ;   WRITE SCRATCHPAD
315 ;---------------------------------------------------
316 h_writescratchpad_adr2:
317         lsl r_rwbyte
318         lsl r_rwbyte
319         lsl r_rwbyte
320 #if  defined(__AVR_ATtiny25__)
321         andi r_rwbyte,0x01 ;nur Page 0 und 1 und das immer wiederholen
322 #endif
323         sts block,r_rwbyte
324         ldi r_mode,OW_WRITE_SCRATCHPAD2
325         ldi  r_bcount,1 
326         rjmp handle_end 
327 h_writescratchpad2:
328         cpi  r_bytep,8
329         breq h_writescratchpad_all2
330         lds  r_temp,block
331         add  r_temp,r_bytep
332         configZ pack2,r_temp
333         st   Z,r_rwbyte
334         rjmp handle_end_inc
335 h_writescratchpad_all2:
336         rjmp handle_end_sleep
337
338
339
340
341
342
343
344
345
346 #include "../common/OWPinInterrupt.s"
347 .end