Цитата(ffs2001 @ Dec 8 2014, 13:12)

Проект для CVAVR 3.1 .
Скомпилированные ROM и HEX в Debug.
Код такой же как у меня за исключением того что в STATUS.BUSY 1 пишется после вычисления, но это может и не важно.
Попробуйте написать проще (вдруг это CV глючит):
Код
uint32_t Crc32(uint8_t * data, uint16_t data_size)
{
CRC.CTRL=0
| CRC_RESET_RESET1_gc
| 1<<CRC_CRC32_bp
| CRC_SOURCE_IO_gc
;
CRC.CTRL=0
| CRC_RESET_NO_gc
| 1<<CRC_CRC32_bp
| CRC_SOURCE_IO_gc
;
CRC.STATUS=1<<CRC_BUSY_bp;
for (uint16_t i=0; i<data_size; i++)
CRC.DATAIN=*data++;
uint32_t crc=*(volatile uint32_t *)&CRC.CHECKSUM0;
crc^=0xFFFFFFFFUL;
return crc;
}
P.S. Загрузил ваш проект в xm256 - получилось что у вас блок CRC инициализирует CRC не единицами, а нулями.
То есть CV почему-то не понимает такое выражение:
Код
CRC.CTRL=0
| init_zero ? (CRC_RESET_RESET0_gc) : (CRC_RESET_RESET1_gc)
| 1<<CRC_CRC32_bp
| CRC_SOURCE_IO_gc
;
Вместо 0xE1 в CRC.CTRL пишется 0x80.