板子:M471
例程:CRC_CCITT
main函数部分
/*---------------------------------------------------------------------------------------------------------*/
/* MAIN func
tion */
/*---------------------------------------------------------------------------------------------------------*/
int main(void)
{
const uint16_t u16CRCSrcPattern[] = {0x3231, 0x3433, 0x3635, 0x3837};
uint32_t i, u32TargetChecksum = 0xA12B, u32CalChecksum = 0;
/* Init System, peripheral clock and multi-function I/O */
SYS_Init();
/* Init UART0 for printf */
UART0_Init();
printf("\n\nCPU
@ %d Hz\n", SystemCoreClock);
printf("+---------------------------------------------+\n");
printf("| CRC-CCITT Polynomial Mode Sample Code |\n");
printf("+---------------------------------------------+\n\n");
printf("# Calculate [0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38] CRC-CCITT checksum value.\n");
printf(" - Seed value is 0xFFFF \n");
printf(" - CPU write data length is 16-bit \n");
printf(" - Checksum complement disable \n");
printf(" - Checksum reverse disable \n");
printf(" - Write data complement disable \n");
printf(" - Write data reverse disable \n");
printf(" - Checksum should be 0x%X \n\n", u32TargetChecksum);
/* Configure CRC controller for CRC-CCITT CPU mode */
CRC_Open(CRC_CCITT, 0, 0xFFFF, CRC_CPU_WDATA_16);
/* Start to execute CRC-CCITT operation */
for(i = 0; i < sizeof(u16CRCSrcPattern) / sizeof(u16CRCSrcPattern[0]); i++)
{
CRC_WRITE_DATA((u16CRCSrcPattern
));
}
/* Get CRC-CCITT checksum value */
u32CalChecksum = CRC_GetChecksum();
printf("CRC checksum is 0x%X ... %s.\n", u32CalChecksum, (u32CalChecksum == u32TargetChecksum) ? "PASS" : "FAIL");
/* Disable CRC function */
CLK_DisableModuleClock(CRC_MODULE);
while(1);
}