[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [avr-libc-commit] [2398] Submitted by Fr?\195?\169d?\195?\169ric Nadeau:,
Joerg Wunsch <=