4d6920eb3933a9d313a87306d3472996dfbdbc0f
[owSlave2.git] / common / OWCRC16.s
1 // Copyright (c) 2015, Tobias Mueller tm(at)tm3d.de
2 // All rights reserved. 
3 // 
4 // Redistribution and use in source and binary forms, with or without 
5 // modification, are permitted provided that the following conditions are 
6 // met: 
7 // 
8 //  * Redistributions of source code must retain the above copyright 
9 //    notice, this list of conditions and the following disclaimer. 
10 //  * Redistributions in binary form must reproduce the above copyright 
11 //    notice, this list of conditions and the following disclaimer in the 
12 //    documentation and/or other materials provided with the 
13 //    distribution. 
14 //  * All advertising materials mentioning features or use of this 
15 //    software must display the following acknowledgement: This product 
16 //    includes software developed by tm3d.de and its contributors. 
17 //  * Neither the name of tm3d.de nor the names of its contributors may 
18 //    be used to endorse or promote products derived from this software 
19 //    without specific prior written permission. 
20 // 
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
32
33
34 .comm crc,2
35
36
37 CRC16_alg:
38         ;crc
39         push r_crc
40         lds r_crc,crc;lade low byte fuer vergleich mit bit
41         mov r_temp,r_crc
42         andi r_temp,0x01 ;nur bit 0
43         cp r_temp2,r_temp  ;r_temp2 wird in interruptroutine gesetzt
44         brne crc2 ;nur schieben
45         ;schieben und XOR
46         lds r_temp2,crc+1
47         lsr     r_temp2
48         ror     r_crc
49         ldi     r_temp, 0x01    
50         eor     r_crc, r_temp
51         ldi     r_temp, 0xA0    ;
52         eor     r_temp2, r_temp
53         rjmp crce
54 crc2:
55         lds r_temp2,crc+1
56         lsr     r_temp2
57         ror     r_crc
58 crce:
59         sts crc,r_crc
60         sts crc+1,r_temp2
61         pop r_crc
62         ret
63
64 .macro CRCS ; CRC beim Senden
65         rcall CRC16_alg
66 .endm
67
68 .macro CRCR; CRC beim Empfangen
69         ;clr r_temp2
70         ;sbrc r_rwbyte,7
71         ;ldi r_temp2,1
72         rcall CRC16_alg
73 .endm
74
75 .macro CRCInit1; CRC initialisierung bei READ_COMMAND
76         ldi r_temp,0
77         sts crc,r_temp
78         sts crc+1,r_temp
79 .endm
80
81 .macro CRCInit2; CRC initialisierung bei READ_DATA
82 .endm