Только имейте в виду: они накосячили с порядком битов. Для того, чтобы CRC совпадала с общепринятым алгоритмом, приходится делать так:
CODE
static int rbit(int x)
{
__asm("rbit %0, %1" : "=r" (x) : "r" (x));
return x;
}
void
crc_process(void* src, unsigned int words)
{
uint32_t* ptr = src;
while (words-- != 0)
{
CRC_DR = rbit(*ptr++);
}
}
uint32_t
crc_result(void)
{
return ~rbit(CRC_DR);
}
Естественно, это исключает возможность работы в связке с DMA.