avr-libc-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[avr-libc-commit] [2398] Submitted by Fr?\195?\169d?\195?\169ric Nadeau:


From: Joerg Wunsch
Subject: [avr-libc-commit] [2398] Submitted by Fr?\195?\169d?\195?\169ric Nadeau:
Date: Wed, 08 May 2013 11:45:55 +0000

Revision: 2398
          http://svn.sv.gnu.org/viewvc/?view=rev&root=avr-libc&revision=2398
Author:   joerg_wunsch
Date:     2013-05-08 11:45:54 +0000 (Wed, 08 May 2013)
Log Message:
-----------
Submitted by Fr?\195?\169d?\195?\169ric Nadeau:
patch #7485 CRC8-CCITT
* include/util/crc16.h (_crc8_ccitt_update): New function.
* tests/simulate/util/crc16-5.c: New file.

Ticket Links:
------------
    http://savannah.gnu.org/patch/?7485

Modified Paths:
--------------
    trunk/avr-libc/ChangeLog
    trunk/avr-libc/NEWS
    trunk/avr-libc/include/util/crc16.h

Added Paths:
-----------
    trunk/avr-libc/tests/simulate/util/crc16-5.c

Modified: trunk/avr-libc/ChangeLog
===================================================================
--- trunk/avr-libc/ChangeLog    2013-05-08 11:29:22 UTC (rev 2397)
+++ trunk/avr-libc/ChangeLog    2013-05-08 11:45:54 UTC (rev 2398)
@@ -1,8 +1,15 @@
-2013-01-15  Pitchumani Sivanupandi  <address@hidden>
+2013-05-08  Joerg Wunsch <address@hidden>
 
+       Submitted by Frédéric Nadeau:
+       patch #7485 CRC8-CCITT
+       * include/util/crc16.h (_crc8_ccitt_update): New function.
+       * tests/simulate/util/crc16-5.c: New file.
+
+2013-05-08  Pitchumani Sivanupandi  <address@hidden>
+
        * include/avr/power.h: Specialize clock_prescale_set/get
        for mega hvb devices
-4
+
 2013-05-03 Mike Rice <address@hidden>
 
     * Deleted function iso_weeknum(), replaced with iso_week_date()

Modified: trunk/avr-libc/NEWS
===================================================================
--- trunk/avr-libc/NEWS 2013-05-08 11:29:22 UTC (rev 2397)
+++ trunk/avr-libc/NEWS 2013-05-08 11:45:54 UTC (rev 2398)
@@ -25,6 +25,7 @@
   [#7212] Add pgm_read_ptr() macros to pgmspace.h
   [#7220] Add UBRR overload functionality to <util/setbaud.h>
   [#7260] Addition to power.h
+  [#7485] CRC8-CCITT
   [#7654] include/delay.h: delay_us >255us without decreasing resolution
   [#7826] Add ATMega32u4 support to the led-blinking demo
   [#7909] Adding __volatile__ to __asm__ within pgmspace header

Modified: trunk/avr-libc/include/util/crc16.h
===================================================================
--- trunk/avr-libc/include/util/crc16.h 2013-05-08 11:29:22 UTC (rev 2397)
+++ trunk/avr-libc/include/util/crc16.h 2013-05-08 11:45:54 UTC (rev 2398)
@@ -1,5 +1,7 @@
 /* Copyright (c) 2002, 2003, 2004  Marek Michalkiewicz
    Copyright (c) 2005, 2007 Joerg Wunsch
+   Copyright (c) 2013 Dave Hylands
+   Copyright (c) 2013 Frederic Nadeau
    All rights reserved.
 
    Redistribution and use in source and binary forms, with or without
@@ -332,4 +334,70 @@
        return __crc;
 }
 
+/** \ingroup util_crc
+    Optimized CRC-8-CCITT calculation.
+
+    Polynomial: x^8 + x^2 + x + 1 (0xE0)<br>
+    
+    For use with simple CRC-8<br>
+    Initial value: 0x0
+    
+    For use with CRC-8-ROHC<br>
+    Initial value: 0xff<br>
+    Reference: http://tools.ietf.org/html/rfc3095#section-5.9.1
+    
+    For use with CRC-8-ATM/ITU<br>
+    Initial value: 0xff<br>
+    Final XOR value: 0x55<br>
+    Reference: http://www.itu.int/rec/T-REC-I.432.1-199902-I/en
+    
+    The C equivalent has been originally written by Dave Hylands.
+    Assembly code is based on _crc_ibutton_update optimization.
+
+    The following is the equivalent functionality written in C.
+
+    \code
+    uint8_t
+    _crc8_ccitt_update (uint8_t inCrc, uint8_t inData)
+    {
+        uint8_t   i;
+        uint8_t   data;
+
+        data = inCrc ^ inData;
+
+        for ( i = 0; i < 8; i++ )
+        {
+            if (( data & 0x80 ) != 0 )
+            {
+                data <<= 1;
+                data ^= 0x07;
+            }
+            else
+            {
+                data <<= 1;
+            }
+        }
+        return data;
+    }
+    \endcode
+*/
+
+static __inline__ uint8_t
+_crc8_ccitt_update(uint8_t __crc, uint8_t __data)
+{
+    uint8_t __i, __pattern;
+    __asm__ __volatile__ (
+        "    eor    %0, %4" "\n\t"
+        "    ldi    %1, 8" "\n\t"
+        "    ldi    %2, 0x07" "\n\t"
+        "1:  lsl    %0" "\n\t"
+        "    brcc   2f" "\n\t"
+        "    eor    %0, %2" "\n\t"
+        "2:  dec    %1" "\n\t"
+        "    brne   1b" "\n\t"
+        : "=r" (__crc), "=d" (__i), "=d" (__pattern)
+        : "0" (__crc), "r" (__data));
+    return __crc;
+}
+
 #endif /* _UTIL_CRC16_H_ */

Added: trunk/avr-libc/tests/simulate/util/crc16-5.c
===================================================================
--- trunk/avr-libc/tests/simulate/util/crc16-5.c                                
(rev 0)
+++ trunk/avr-libc/tests/simulate/util/crc16-5.c        2013-05-08 11:45:54 UTC 
(rev 2398)
@@ -0,0 +1,85 @@
+/* Copyright (c) 2010  Joerg Wunsch
+   Copyright (c) 2013  Frederic Nadeau
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   * Redistributions of source code must retain the above copyright
+     notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in
+     the documentation and/or other materials provided with the
+     distribution.
+   * Neither the name of the copyright holders nor the names of
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Test the various CRC algorithms.
+   Part 5:  8-bit CCITT-CRC, x^8 + x^2 + x + 1 (0xE0) */
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifdef __AVR__
+# include <util/crc16.h>
+#else  /* host computer */
+
+static uint8_t
+_crc8_ccitt_update (uint8_t inCrc, uint8_t inData)
+{
+    uint8_t   i;
+       uint8_t   data;
+
+       data = inCrc ^ inData;
+
+    for ( i = 0; i < 8; i++ )
+       {
+       if (( data & 0x80 ) != 0 )
+       {
+               data <<= 1;
+               data ^= 0x07;
+       }
+       else
+       {
+               data <<= 1;
+       }
+    }
+    return data;
+}
+
+#endif  /* AVR */
+
+/* LTC6802-1 test vector (including CRC) */
+const char message[] = "\xE1\x04\x02\x20\x6C\x6C\x62";
+const size_t mlen = 7;
+
+#include <stdio.h>
+
+int main(void)
+{
+    uint8_t crc = 0;
+    uint8_t i;
+
+    for (i = 0; i < mlen; i++)
+        crc = _crc8_ccitt_update(crc, message[i]);
+    if (crc != 0) return __LINE__;
+
+    return 0;
+}
+


Property changes on: trunk/avr-libc/tests/simulate/util/crc16-5.c
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Author Id Date
Added: svn:eol-style
   + native




reply via email to

[Prev in Thread] Current Thread [Next in Thread]