/*---------------------------------------------------------------------------------------------------------*/ int main(void) { const uint8_t acCRCSrcPattern[] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}; uint32_t i, u32TargetChecksum = 0xA12B, u32CalChecksum = 0; uint16_t *p16SrcAddr; /* Unlock protected registers */ SYS_UnlockReg(); /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Lock protected registers */ SYS_LockReg(); /* 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); /* Convert 16-bit source data */ p16SrcAddr = (uint16_t *)acCRCSrcPattern; /* Start to execute CRC-CCITT operation */ for(i = 0; i < sizeof(acCRCSrcPattern) / 2; i++) { CRC_WRITE_DATA((p16SrcAddr[i] & 0xFFFF)); } /* 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); }
/*---------------------------------------------------------------------------------------------------------*/ int main(void) { const uint8_t acCRCSrcPattern[] = "123456789"; uint32_t i, u32TargetChecksum = 0x58, u32CalChecksum = 0; uint8_t *p8SrcAddr; /* Unlock protected registers */ SYS_UnlockReg(); /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Lock protected registers */ SYS_LockReg(); /* Init UART0 for printf */ UART0_Init(); printf("\n\nCPU @ %dHz\n", SystemCoreClock); printf("+---------------------------------+\n"); printf("| CRC CRC-8 Mode Sample Code |\n"); printf("+---------------------------------+\n\n"); printf("# Calculate string \"123456789\" CRC-8 checksum value by CRC CPU mode.\n"); printf(" - Seed value is 0x5A \n"); printf(" - CPU Write Length is 8-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); /* Set CRC source buffer address for CRC-8 CPU mode */ p8SrcAddr = (uint8_t *)acCRCSrcPattern; /* Configure CRC operation settings for CRC-8 CPU mode */ CRC_Open(CRC_8, 0, 0x5A, CRC_CPU_WDATA_8); /* Start to execute CRC-8 CPU operation */ for(i = 0; i < strlen((char *)acCRCSrcPattern); i++) { CRC_WRITE_DATA((p8SrcAddr[i] & 0xFF)); } /* Get CRC-8 checksum value */ u32CalChecksum = CRC_GetChecksum(); printf("CRC checksum is 0x%X ... %s.\n", u32CalChecksum, (u32CalChecksum == u32TargetChecksum) ? "PASS" : "FAIL"); /* Disable CRC function */ CRC->CTL &= ~CRC_CTL_CRCCEN_Msk; while(1); }