How to use the CRC module of MC56F84462?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to use the CRC module of MC56F84462?

951 Views
xiaofei
Contributor I

I want to use the CRC module of MC56F84462 to calculate CRC-modbus 。

I have tried so many times ,but still have not get the right answer。

for example,the input data are:0xF4,0x02,0x06,0x12,and the right CRC(modbus) is 0x7910。

how can i get it?

my code is here:

CRC init:

void CRC_Init(void) {   /* CRC_CTRL: TOT=1,TOTR=1,??=0,FXOR=0,WAS=0,TCRC=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0,??=0 */   setReg32(CRC_CTRL, 0x50000000UL);        /* CRC_GPOLY: HIGH=0,LOW=0x8005 */   setReg32(CRC_GPOLY, 0x8005UL);           /* CRC_CTRL: WAS=1 */   setReg32Bits(CRC_CTRL, 0x02000000UL);    /* CRC_CRC: HU=0xFF,HL=0xFF,LU=0xEA,LL=0xA8 */   setReg32(CRC_CRC, 0xFFFFFFFFUL);         /* CRC_CTRL: WAS=0 */   clrReg32Bits(CRC_CTRL, 0x02000000UL);  }

 

CRC calculate code is here:

{   unsigned char temp_size=0;   unsigned char temp_i=0;   unsigned char temp_o = 0;   unsigned char *temp_p;   unsigned short temp_in;    setReg32Bits(CRC_CTRL, 0x02000000UL);   setReg32(CRC_CRC, 0xFFFFFFFFUL);   clrReg32Bits(CRC_CTRL, 0x02000000UL);   //setReg32(CRC_GPOLY,0x8005);   temp_size = data_size/2;   temp_o=0;   for(temp_i=0;temp_i<temp_size;temp_i++)   {         temp_in = (((unsigned short)(*data_buf)<<8)|*(data_buf+1));        setReg32(CRC_CRC,temp_in);        temp_o +=2;        data_buf +=2;   }   if(temp_o<data_size)   {        temp_p = (unsigned char *)&CRC_CRC;        *temp_p++ = *data_buf;   }   temp_sum = (unsigned short)(0xFFFF&getReg32(CRC_CRC));   temp_sum1 = (unsigned short)(getReg32(CRC_CRC)>>16); }

 

if there is some mistake ,please help me,thanks so much。

Labels (1)
0 Kudos
2 Replies

647 Views
johnlwinters
NXP Employee
NXP Employee

The IDE, CodeWarrior 10.6, comes with example programs.

One of these is for the CRC, and it shows how to calculate the CRC for the case of the 8 bit stream.

Please refer to this code as your template.

0 Kudos

647 Views
johnlwinters
NXP Employee
NXP Employee

The 16/32-bit code is calculated for 32 bits of data at a time.  You are listing your input 8 bits at a time.

Please clarify.

0 Kudos