Many changes from 2018
[owSlave2.git] / common / OWDS2423_DS2423.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 #if  defined(__AVR_ATtiny84__)  ||defined(__AVR_ATtiny84A__)  \r
37 #else\r
38 #define _NO_CONFIGBYTES_\r
39 #define _DIS_FLASH_\r
40 #endif\r
41 //#define _HANDLE_CC_COMMAND_\r
42 //#define _DB_\r
43 \r
44 #include "../common/OWConfig.s"\r
45 #include "../common/OWCRC16.s"\r
46 \r
47 .extern pack1,45\r
48 .extern counters1,16\r
49 \r
50 //.extern pack2,45\r
51 .extern counters2,16\r
52 \r
53 #define pack2 pack1 \r
54 ;same EEPROM for Attiny44 \r
55 \r
56 .macro CHIP_INIT        ;r_temp is pushed other Registers should be saved\r
57 .endm\r
58 \r
59 .macro COMMAND_TABLE\r
60                 rjmp h_writescratchpad1\r
61                 rjmp h_writescratchpad_crc1\r
62                 rjmp h_readscratchpad1\r
63                 rjmp h_copyscratchpad1\r
64                 rjmp h_readmemory_addr1\r
65                 rjmp h_readmemory1\r
66                 rjmp h_readmemorycounter_addr1\r
67                 rjmp h_readmemorycounter1\r
68                 rjmp h_readmemorycounter_ex1\r
69 \r
70                 rjmp h_writescratchpad2\r
71                 rjmp h_writescratchpad_crc2\r
72                 rjmp h_readscratchpad2\r
73                 rjmp h_copyscratchpad2\r
74                 rjmp h_readmemory_addr2\r
75                 rjmp h_readmemory2\r
76                 rjmp h_readmemorycounter_addr2\r
77                 rjmp h_readmemorycounter2\r
78                 rjmp h_readmemorycounter_ex2\r
79 .endm\r
80 \r
81 #include "../common/OWRomFunctionsDual.s"\r
82 #include "../common/OWTimerInterrupt.s"\r
83 \r
84 \r
85 \r
86 ; Ab hier Geraeteabhaenging\r
87 #define OW_WRITE_SCRATCHPAD1 OW_FIRST_COMMAND+0\r
88 #define OW_WRITE_SCRATCHPAD_CRC1 OW_FIRST_COMMAND+1\r
89 #define OW_READ_SCRATCHPAD1 OW_FIRST_COMMAND+2\r
90 #define OW_COPY_SCRATCHPAD1 OW_FIRST_COMMAND+3\r
91 #define OW_READ_MEMORY_ADDR1 OW_FIRST_COMMAND+4\r
92 #define OW_READ_MEMORY1 OW_FIRST_COMMAND+5\r
93 #define OW_READ_MEMORYCOUNTER_ADDR1 OW_FIRST_COMMAND+6\r
94 #define OW_READ_MEMORYCOUNTER1 OW_FIRST_COMMAND+7\r
95 #define OW_READ_MEMORYCOUNTER_EX1 OW_FIRST_COMMAND+8\r
96 \r
97 #define OW_WRITE_SCRATCHPAD2 OW_FIRST_COMMAND+9\r
98 #define OW_WRITE_SCRATCHPAD_CRC2 OW_FIRST_COMMAND+10\r
99 #define OW_READ_SCRATCHPAD2 OW_FIRST_COMMAND+11\r
100 #define OW_COPY_SCRATCHPAD2 OW_FIRST_COMMAND+12\r
101 #define OW_READ_MEMORY_ADDR2 OW_FIRST_COMMAND+13\r
102 #define OW_READ_MEMORY2 OW_FIRST_COMMAND+14\r
103 #define OW_READ_MEMORYCOUNTER_ADDR2 OW_FIRST_COMMAND+15\r
104 #define OW_READ_MEMORYCOUNTER2 OW_FIRST_COMMAND+16\r
105 #define OW_READ_MEMORYCOUNTER_EX2 OW_FIRST_COMMAND+17\r
106 \r
107 \r
108 ;---------------------------------------------------\r
109 ;       READ COMMAND and start operation\r
110 ;---------------------------------------------------\r
111 \r
112 h_readcommand1:\r
113         clr r_bytep\r
114 #ifndef _DIS_FLASH_\r
115         FLASH_COMMANDS ; muss zu erst sein....\r
116 #endif\r
117         cset 0x0F,OW_WRITE_SCRATCHPAD1\r
118         cjmp 0xAA,hrc_set_readscratchpad1\r
119         cset 0x5A,OW_COPY_SCRATCHPAD1\r
120         cset 0xF0,OW_READ_MEMORY_ADDR1\r
121         cset 0xA5,OW_READ_MEMORYCOUNTER_ADDR1\r
122         FW_CONFIG_INFO1\r
123 #ifdef _CHANGEABLE_ID_\r
124         CHANGE_ID_COMMANDS\r
125 #endif\r
126         ldi r_mode,OW_SLEEP\r
127         rjmp handle_end\r
128 \r
129 hrc_set_readscratchpad1:\r
130         ldi r_mode,OW_READ_SCRATCHPAD1\r
131         ldi r_sendflag,1\r
132         rjmp h_readscratchpad1\r
133 \r
134 h_writescratchpad1:\r
135         configZ pack1,r_bytep\r
136         inc  r_bytep\r
137         st   Z,r_rwbyte\r
138         cpi  r_bytep,2\r
139         breq h_writescratchpad_block1\r
140         brsh h_writescratchpad_set_eoffset1 ;;33\r
141         rjmp handle_end  ;handle_end zu weit entfernt fuer br...\r
142 h_writescratchpad_set_eoffset1:\r
143         cpi  r_bytep,35\r
144         breq h_writescratchpad_setcrc1\r
145         mov r_temp,r_bytep\r
146         subi r_temp,4\r
147         sts pack1+2,r_temp ;AA und PF cleared\r
148         rjmp handle_end\r
149 ;Start writeing to 32 Byte Block ; skip status byte     \r
150 h_writescratchpad_block1:\r
151         lds r_temp,pack1 ; Adresse low byte\r
152         andi r_temp,0x1F ;32 byte\r
153         add r_bytep,r_temp ;Zur angegebenen Startadresse springen\r
154         ;ori r_temp,0x20 ; Set PF flag\r
155         sts pack1+2,r_temp  ;E4:E0 vorher setzen\r
156         ; Byte 3 ueberspringen\r
157         rjmp handle_end_inc\r
158 \r
159 h_writescratchpad_setcrc1:\r
160         ;copy crc to pack\r
161         lds r_temp,crc\r
162         com r_temp\r
163         sts pack1+43,r_temp\r
164         lds r_temp,crc+1\r
165         com r_temp ; invertieren , komischer name.....\r
166         sts pack1+44,r_temp\r
167         ldi  r_mode,OW_WRITE_SCRATCHPAD_CRC1\r
168         ldi r_sendflag,1\r
169         ldi r_bytep,43\r
170 h_writescratchpad_crc1:\r
171         cpi r_bytep,45\r
172         breq h_writescratchpad_crc_end1\r
173         configZ pack1,r_bytep\r
174         ld r_rwbyte,Z\r
175         rjmp handle_end_inc\r
176 h_writescratchpad_crc_end1:\r
177         rjmp handle_end_sleep\r
178         \r
179         \r
180 h_readscratchpad1:\r
181         cpi r_bytep,35\r
182         breq h_readscratchpad_end1\r
183         cpi r_bytep,3\r
184         brne h_readscratchpad_read_byte1\r
185 h_readscratchpad_set_offset1:\r
186         lds r_temp,pack1\r
187         andi r_temp,0x1F\r
188         ldi r_temp2,3\r
189         add r_temp,r_temp2\r
190         mov r_bytep,r_temp\r
191 h_readscratchpad_read_byte1:\r
192         configZ pack1,r_bytep\r
193         ld r_rwbyte,Z\r
194         rjmp handle_end_inc\r
195 h_readscratchpad_end1:\r
196         rjmp handle_end_sleep\r
197 \r
198 \r
199 \r
200 h_copyscratchpad1:\r
201         cpi  r_bytep,3\r
202         brsh h_copyscratchpad_ok1\r
203         configZ pack1,r_bytep\r
204         inc  r_bytep\r
205         ld   r_temp,Z\r
206         cp r_temp,r_rwbyte\r
207         brne h_copyscratchpad_nok1\r
208         cpi  r_bytep,3\r
209         breq h_copyscratchpad_ok1\r
210         ldi  r_bcount,1 \r
211         rjmp handle_end\r
212 h_copyscratchpad_ok1:\r
213         ldi r_rwbyte,0xAA\r
214         ldi r_sendflag,1\r
215         rjmp handle_end\r
216 h_copyscratchpad_nok1:\r
217         lds r_temp,pack1+3\r
218         andi r_temp,~0x80\r
219         sts pack1+3,r_temp\r
220         rjmp handle_end_sleep\r
221 \r
222 \r
223 h_readmemory_addr1:\r
224         cpi r_bytep,0\r
225         brne h_readmrmory_addr_byte11\r
226         sts pack1,r_rwbyte\r
227         rjmp handle_end_inc\r
228 h_readmrmory_addr_byte11:\r
229         sts pack1+1,r_rwbyte\r
230         ldi r_mode,OW_READ_MEMORY1\r
231         ldi r_sendflag,1\r
232         clr r_bytep\r
233         rjmp h_readmemory21\r
234 h_readmemory1:\r
235         lds r_bytep,pack1\r
236         lds r_temp2,pack1+1\r
237         inc r_bytep\r
238         clr r_temp\r
239         adc r_temp2,r_temp\r
240         sbrc r_temp2,1\r
241         rjmp h_readmemory_end1\r
242         sts pack1+1,r_temp\r
243         sts pack1,r_bytep\r
244 h_readmemory21:\r
245         lds r_bytep,pack1\r
246         andi r_bytep,0x1F\r
247         configZ pack1+3,r_bytep\r
248         ld   r_rwbyte,Z\r
249         rjmp handle_end\r
250 h_readmemory_end1:\r
251         rjmp handle_end_sleep\r
252 \r
253 \r
254 \r
255 \r
256 \r
257 \r
258 \r
259 \r
260 h_readmemorycounter_addr1:\r
261         cpi r_bytep,0\r
262         brne h_readmrmorycounter_addr_byte11\r
263         sts pack1,r_rwbyte\r
264         inc r_bytep\r
265         ;ldi r_bcount,1\r
266         rjmp handle_end\r
267 h_readmrmorycounter_addr_byte11:\r
268         sts pack1+1,r_rwbyte\r
269         ldi r_mode,OW_READ_MEMORYCOUNTER1\r
270         ;ldi r_bcount,1 \r
271         ldi r_sendflag,1\r
272         clr r_bytep\r
273         rjmp h_readmemorycounter21\r
274 h_readmemorycounter1:\r
275         lds r_bytep,pack1\r
276         lds r_temp2,pack1+1\r
277         ldi r_temp,1  ;inc leider kein c flag\r
278         add r_bytep,r_temp\r
279         clr r_temp\r
280         adc r_temp2,r_temp\r
281         mov r_temp,r_bytep\r
282         andi r_temp,0x1F\r
283         breq h_readmemorycounter_next1\r
284         sts pack1+1,r_temp2\r
285         sts pack1,r_bytep\r
286 h_readmemorycounter21:  ;Lesen von dem worauf die erstenzwei bytes zeigen\r
287         lds r_bytep,pack1\r
288         andi r_bytep,0x1F\r
289         configZ pack1+3,r_bytep\r
290         ld   r_rwbyte,Z\r
291         ;ldi r_bcount,1\r
292         rjmp handle_end\r
293 //h_readmemorycounter_end:\r
294 //      ldi  r_mode,OW_SLEEP\r
295 //      clr r_sendflag\r
296 //      rjmp handle_end\r
297 h_readmemorycounter_next1:  ; rest lesen\r
298         ldi  r_mode,OW_READ_MEMORYCOUNTER_EX1\r
299         ldi r_bytep,34\r
300         lds r_temp2,pack1\r
301         lds r_temp,pack1+1\r
302         lsl r_temp2\r
303         rol r_temp\r
304         cpi r_temp,3\r
305         brne h_readmemorycounter_cFF1\r
306         andi r_temp2,0xC0\r
307         swap r_temp2\r
308 \r
309         ;cpi r_temp,0xE0\r
310 \r
311         configZ counters1,r_temp2\r
312         ld r_temp,Z+\r
313         sts pack1+35,r_temp     \r
314         ld r_temp,Z+\r
315         sts pack1+36,r_temp     \r
316         ld r_temp,Z+\r
317         sts pack1+37,r_temp     \r
318         ld r_temp,Z+\r
319         sts pack1+38,r_temp     \r
320         rjmp h_readmemorycounter_ex1\r
321 h_readmemorycounter_cFF1:\r
322         ldi r_temp,0xFF\r
323         sts pack1+35,r_temp     \r
324         sts pack1+36,r_temp     \r
325         sts pack1+37,r_temp     \r
326         sts pack1+38,r_temp     \r
327 \r
328 h_readmemorycounter_ex1:\r
329         inc r_bytep\r
330         cpi r_bytep,45\r
331         breq h_readmemorycounter_ex_end1\r
332         cpi r_bytep,43\r
333         brne h_readmemorycounter_ex21\r
334         lds r_temp,crc\r
335         com r_temp\r
336         sts pack1+43,r_temp\r
337         lds r_temp,crc+1\r
338         com r_temp\r
339         sts pack1+44,r_temp\r
340 h_readmemorycounter_ex21:\r
341         ;ldi r_bcount,1\r
342         configZ pack1,r_bytep\r
343         ld   r_rwbyte,Z\r
344         rjmp handle_end\r
345 h_readmemorycounter_ex_end1:\r
346         lds r_bytep,pack1\r
347         lds r_temp2,pack1+1\r
348         ldi r_temp,1  ;inc leider kein c flag\r
349         add r_bytep,r_temp\r
350         clr r_temp\r
351         adc r_temp2,r_temp\r
352         sbrc r_temp2,1 ;am ene von allem \r
353         rjmp h_readmemorycounter_ex_sleep1\r
354         CRCInit1\r
355         ldi  r_mode,OW_READ_MEMORYCOUNTER1\r
356         sts pack1+1,r_temp2\r
357         sts pack1,r_bytep\r
358         rjmp h_readmemorycounter21\r
359 h_readmemorycounter_ex_sleep1:\r
360         ldi r_mode,OW_SLEEP\r
361         clr r_sendflag\r
362         rjmp handle_end\r
363 \r
364 \r
365 \r
366 \r
367 ;*****************************************************************************************************************************************************************************************\r
368 ;*****************************************************************************************************************************************************************************************\r
369 ;*****************************************************************************************************************************************************************************************\r
370 ;*****************************************************************************************************************************************************************************************\r
371 ;*****************************************************************************************************************************************************************************************\r
372 \r
373 \r
374 \r
375 \r
376 h_readcommand2:\r
377         clr r_bytep\r
378 #ifndef _DIS_FLASH_\r
379         FLASH_COMMANDS ; muss zu erst sein....\r
380 #endif\r
381         cset 0x0F,OW_WRITE_SCRATCHPAD2\r
382         cjmp 0xAA,hrc_set_readscratchpad2\r
383         cset 0x5A,OW_COPY_SCRATCHPAD2\r
384         cset 0xF0,OW_READ_MEMORY_ADDR2\r
385         cset 0xA5,OW_READ_MEMORYCOUNTER_ADDR2\r
386         FW_CONFIG_INFO2\r
387 #ifdef _CHANGEABLE_ID_\r
388         CHANGE_ID_COMMANDS\r
389 #endif\r
390         ldi r_mode,OW_SLEEP\r
391         rjmp handle_end\r
392 \r
393 hrc_set_readscratchpad2:\r
394         ldi r_mode,OW_READ_SCRATCHPAD2\r
395         ldi r_sendflag,1\r
396         rjmp h_readscratchpad2\r
397 \r
398 h_writescratchpad2:\r
399         configZ pack2,r_bytep\r
400         inc  r_bytep\r
401         st   Z,r_rwbyte\r
402         cpi  r_bytep,2\r
403         breq h_writescratchpad_block2\r
404         brsh h_writescratchpad_set_eoffset2 ;;33\r
405         rjmp handle_end  ;handle_end zu weit entfernt fuer br...\r
406 h_writescratchpad_set_eoffset2:\r
407         cpi  r_bytep,35\r
408         breq h_writescratchpad_setcrc2\r
409         mov r_temp,r_bytep\r
410         subi r_temp,4\r
411         sts pack2+2,r_temp ;AA und PF cleared\r
412         rjmp handle_end\r
413 ;Start writeing to 32 Byte Block ; skip status byte     \r
414 h_writescratchpad_block2:\r
415         lds r_temp,pack2 ; Adresse low byte\r
416         andi r_temp,0x1F ;32 byte\r
417         add r_bytep,r_temp ;Zur angegebenen Startadresse springen\r
418         ;ori r_temp,0x20 ; Set PF flag\r
419         sts pack2+2,r_temp  ;E4:E0 vorher setzen\r
420         ; Byte 3 ueberspringen\r
421         rjmp handle_end_inc\r
422 \r
423 h_writescratchpad_setcrc2:\r
424         ;copy crc to pack2\r
425         lds r_temp,crc\r
426         com r_temp\r
427         sts pack2+43,r_temp\r
428         lds r_temp,crc+1\r
429         com r_temp ; invertieren , komischer name.....\r
430         sts pack2+44,r_temp\r
431         ldi  r_mode,OW_WRITE_SCRATCHPAD_CRC2\r
432         ldi r_sendflag,1\r
433         ldi r_bytep,43\r
434 h_writescratchpad_crc2:\r
435         cpi r_bytep,45\r
436         breq h_writescratchpad_crc_end2\r
437         configZ pack2,r_bytep\r
438         ld r_rwbyte,Z\r
439         rjmp handle_end_inc\r
440 h_writescratchpad_crc_end2:\r
441         rjmp handle_end_sleep\r
442         \r
443         \r
444 h_readscratchpad2:\r
445         cpi r_bytep,35\r
446         breq h_readscratchpad_end2\r
447         cpi r_bytep,3\r
448         brne h_readscratchpad_read_byte2\r
449 h_readscratchpad_set_offset2:\r
450         lds r_temp,pack2\r
451         andi r_temp,0x1F\r
452         ldi r_temp2,3\r
453         add r_temp,r_temp2\r
454         mov r_bytep,r_temp\r
455 h_readscratchpad_read_byte2:\r
456         configZ pack2,r_bytep\r
457         ld r_rwbyte,Z\r
458         rjmp handle_end_inc\r
459 h_readscratchpad_end2:\r
460         rjmp handle_end_sleep\r
461 \r
462 \r
463 \r
464 h_copyscratchpad2:\r
465         cpi  r_bytep,3\r
466         brsh h_copyscratchpad_ok2\r
467         configZ pack2,r_bytep\r
468         inc  r_bytep\r
469         ld   r_temp,Z\r
470         cp r_temp,r_rwbyte\r
471         brne h_copyscratchpad_nok2\r
472         cpi  r_bytep,3\r
473         breq h_copyscratchpad_ok2\r
474         ldi  r_bcount,1 \r
475         rjmp handle_end\r
476 h_copyscratchpad_ok2:\r
477         ldi r_rwbyte,0xAA\r
478         ldi r_sendflag,1\r
479         rjmp handle_end\r
480 h_copyscratchpad_nok2:\r
481         lds r_temp,pack2+3\r
482         andi r_temp,~0x80\r
483         sts pack2+3,r_temp\r
484         rjmp handle_end_sleep\r
485 \r
486 \r
487 h_readmemory_addr2:\r
488         cpi r_bytep,0\r
489         brne h_readmrmory_addr_byte12\r
490         sts pack2,r_rwbyte\r
491         rjmp handle_end_inc\r
492 h_readmrmory_addr_byte12:\r
493         sts pack2+1,r_rwbyte\r
494         ldi r_mode,OW_READ_MEMORY2\r
495         ldi r_sendflag,1\r
496         clr r_bytep\r
497         rjmp h_readmemory22\r
498 h_readmemory2:\r
499         lds r_bytep,pack2\r
500         lds r_temp2,pack2+1\r
501         inc r_bytep\r
502         clr r_temp\r
503         adc r_temp2,r_temp\r
504         sbrc r_temp2,1\r
505         rjmp h_readmemory_end2\r
506         sts pack2+1,r_temp\r
507         sts pack2,r_bytep\r
508 h_readmemory22:\r
509         lds r_bytep,pack2\r
510         andi r_bytep,0x1F\r
511         configZ pack2+3,r_bytep\r
512         ld   r_rwbyte,Z\r
513         rjmp handle_end\r
514 h_readmemory_end2:\r
515         rjmp handle_end_sleep\r
516 \r
517 \r
518 \r
519 \r
520 \r
521 \r
522 \r
523 \r
524 h_readmemorycounter_addr2:\r
525         cpi r_bytep,0\r
526         brne h_readmrmorycounter_addr_byte12\r
527         sts pack2,r_rwbyte\r
528         inc r_bytep\r
529         ;ldi r_bcount,1\r
530         rjmp handle_end\r
531 h_readmrmorycounter_addr_byte12:\r
532         sts pack2+1,r_rwbyte\r
533         ldi r_mode,OW_READ_MEMORYCOUNTER2\r
534         ;ldi r_bcount,1 \r
535         ldi r_sendflag,1\r
536         clr r_bytep\r
537         rjmp h_readmemorycounter22\r
538 h_readmemorycounter2:\r
539         lds r_bytep,pack2\r
540         lds r_temp2,pack2+1\r
541         ldi r_temp,1  ;inc leider kein c flag\r
542         add r_bytep,r_temp\r
543         clr r_temp\r
544         adc r_temp2,r_temp\r
545         mov r_temp,r_bytep\r
546         andi r_temp,0x1F\r
547         breq h_readmemorycounter_next2\r
548         sts pack2+1,r_temp2\r
549         sts pack2,r_bytep\r
550 h_readmemorycounter22:  ;Lesen von dem worauf die erstenzwei bytes zeigen\r
551         lds r_bytep,pack2\r
552         andi r_bytep,0x1F\r
553         configZ pack2+3,r_bytep\r
554         ld   r_rwbyte,Z\r
555         ;ldi r_bcount,1\r
556         rjmp handle_end\r
557 //h_readmemorycounter_end:\r
558 //      ldi  r_mode,OW_SLEEP\r
559 //      clr r_sendflag\r
560 //      rjmp handle_end\r
561 h_readmemorycounter_next2:  ; rest lesen\r
562         ldi  r_mode,OW_READ_MEMORYCOUNTER_EX2\r
563         ldi r_bytep,34\r
564         lds r_temp2,pack2\r
565         lds r_temp,pack2+1\r
566         //lsr r_temp\r
567         //ror r_temp2\r
568 \r
569         lsl r_temp2\r
570         rol r_temp\r
571         cpi r_temp,3\r
572         brne h_readmemorycounter_cFF2\r
573         andi r_temp2,0xC0\r
574         swap r_temp2\r
575 \r
576         ;cpi r_temp,0xE0\r
577 \r
578         configZ counters2,r_temp2\r
579         ld r_temp,Z+\r
580         sts pack2+35,r_temp     \r
581         ld r_temp,Z+\r
582         sts pack2+36,r_temp     \r
583         ld r_temp,Z+\r
584         sts pack2+37,r_temp     \r
585         ld r_temp,Z+\r
586         sts pack2+38,r_temp     \r
587         rjmp h_readmemorycounter_ex2\r
588 h_readmemorycounter_cFF2:\r
589         ldi r_temp,0xFF\r
590         sts pack2+35,r_temp     \r
591         sts pack2+36,r_temp     \r
592         sts pack2+37,r_temp     \r
593         sts pack2+38,r_temp     \r
594 \r
595 h_readmemorycounter_ex2:\r
596         inc r_bytep\r
597         cpi r_bytep,45\r
598         breq h_readmemorycounter_ex_end2\r
599         cpi r_bytep,43\r
600         brne h_readmemorycounter_ex22\r
601         lds r_temp,crc\r
602         com r_temp\r
603         sts pack2+43,r_temp\r
604         lds r_temp,crc+1\r
605         com r_temp\r
606         sts pack2+44,r_temp\r
607 h_readmemorycounter_ex22:\r
608         ;ldi r_bcount,1\r
609         configZ pack2,r_bytep\r
610         ld   r_rwbyte,Z\r
611         rjmp handle_end\r
612 h_readmemorycounter_ex_end2:\r
613         lds r_bytep,pack2\r
614         lds r_temp2,pack2+1\r
615         ldi r_temp,1  ;inc leider kein c flag\r
616         add r_bytep,r_temp\r
617         clr r_temp\r
618         adc r_temp2,r_temp\r
619         sbrc r_temp2,1 ;am ene von allem \r
620         rjmp h_readmemorycounter_ex_sleep2\r
621         CRCInit1\r
622         ldi  r_mode,OW_READ_MEMORYCOUNTER2\r
623         sts pack2+1,r_temp2\r
624         sts pack2,r_bytep\r
625         rjmp h_readmemorycounter22\r
626 h_readmemorycounter_ex_sleep2:\r
627         ldi r_mode,OW_SLEEP\r
628         clr r_sendflag\r
629         rjmp handle_end\r
630 \r
631 \r
632 \r
633 \r
634 #include "../common/OWPinInterrupt.s"\r
635 .end\r