хочу считать CRC-32 на указанном МК. Аппаратный модуль имеется.
Код использовал родной атмелевский отсюда и упрощённый вариант:
Код
CRC_CTRL |= CRC_CRC32_bm;
CRC.CTRL |= CRC_SOURCE_IO_gc;
for (n = 0; n < 32; n++){
CRC.DATAIN = test[n]; // send data
}
CRC.STATUS |= CRC_BUSY_bm; // finish
while (CRC_STATUS & CRC_BUSY_bm == CRC_BUSY_bm);
itoa(CRC.CHECKSUM3,str);
puts_usf0(str);
//и так далее
CRC.CTRL |= CRC_SOURCE_IO_gc;
for (n = 0; n < 32; n++){
CRC.DATAIN = test[n]; // send data
}
CRC.STATUS |= CRC_BUSY_bm; // finish
while (CRC_STATUS & CRC_BUSY_bm == CRC_BUSY_bm);
itoa(CRC.CHECKSUM3,str);
puts_usf0(str);
//и так далее
Сам модуль работает, но выдаёт неверные данные.
Проверял вот этим калькулятором.
Полиномы совпадают, в даташите есть описание. В эррате ничего.
Тестовый массив: uint8_t[32] = {0xFF}
ЧЯДНТ?