Dear All, I am using CRC to checksum my SCI downstream data. I am testing a sample code to run Poly 0x1021, initial 0xFFFF 16bit checksum code.
I tested the code though C simulator. Here is the link:http://cpp.sh/3f3x
The after I run the code, the output is 0x89C3, my testing data is test[4]={0x01,0x02,0x03,0x04};
However, when I load this code into my F28069 DSP processor. The output is totally different.
Here is my C code.
//=============================================================================
//=============================================================================
#include "DSP28x_Project.h"
//#include "crc.h"
#include "stdint.h"
#include "stdio.h"
typedef unsigned short crc;
#define WIDTH (8 * sizeof(crc))
#define TOPBIT (1 << (WIDTH - 1))
#define POLYNOMIAL 0x1021
int nbyte = 4;
crc remainder = 0xFFFF;
int byte;
unsigned char bit;
//-----------------------------------------------------------------------------
// start of main()
//-----------------------------------------------------------------------------
int main()
{
unsigned char test[4]={0x01,0x02,0x03,0x04};
InitSysCtrl();
/*
* Perform modulo-2 division, a byte at a time.
*/
for (byte = 0; byte < 4; ++byte)
{
/*
* Bring the next byte into the remainder.
*/
remainder ^= test[byte] << (WIDTH - 8);
/*
* Perform modulo-2 division, a bit at a time.
*/
for (bit = 8; bit > 0; --bit)
{
/*
* Try to divide the current data bit.
*/
if (remainder & TOPBIT)
{
remainder = (remainder << 1) ^ POLYNOMIAL;
}
else
{
remainder = (remainder << 1);
}
}
}
printf("CRC is: %X\n",remainder);
} // End of main()
Did someone has the same issue ever before? I checked this thing for almost two days without no sucesses...
