From 32b909067b2a34f475a52585b965c195de87c172 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Wed, 23 Jan 2013 16:11:17 +0100 Subject: STM32: Use hardware CRC unit --- src/crc32.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/crc32.c') diff --git a/src/crc32.c b/src/crc32.c index 25cd53b..d5c8732 100644 --- a/src/crc32.c +++ b/src/crc32.c @@ -21,6 +21,7 @@ #include "platform.h" #include "target.h" +#if !defined(STM32F1) && !defined(STM32F4) static const uint32_t crc32_table[] = { 0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005, @@ -107,4 +108,31 @@ uint32_t generic_crc32(struct target_s *target, uint32_t base, int len) } return crc; } +#else +#include +uint32_t generic_crc32(struct target_s *target, uint32_t base, int len) +{ + uint32_t data; + uint8_t byte; + + CRC_CR |= CRC_CR_RESET; + + while (len >3) { + if (target_mem_read_words(target, &data, base, 1) != 0) + return -1; + + CRC_DR = data; + base+=4; + len -= 4; + } + while (len--) { + if (target_mem_read_bytes(target, &byte, base, 1) != 0) + return -1; + + CRC_DR = byte; + base++; + } + return CRC_DR; +} +#endif -- cgit v1.2.3