#include<p24fxxxx.h><br />unsigned int Result;<br />unsigned char datab[]={<br />0x01,0x02,0x03,0x04,<br />0x05,0x06,0x07,0x08,<br />0x09,0x0A,0x0B,0x0C,<br />0x0D,0x0E,0x0F,0x10,<br />0x11,0x12,0x13,0x14,<br />0x15<br />};<br />unsigned int CRC_HW_calculateB(unsigned char *,unsigned int);<br />main()<br />{<br />Nop();<br />Result2=CRC_HW_calculateB(datab,sizeof(datab));<br />Nop();<br />Nop();<br />while(1);<br />}<br />unsigned int CRC_HW_calculateB(unsigned char *temp,unsigned int Len)<br />{<br />unsigned int Carry,j;<br />unsigned char *ptr,Flag;<br />ptr=(unsigned char *)&CRCDAT;<br />CRCCON = 0x0000F; // ="Length of polynomial-1"<br />CRCXOR = 0x1021; // generator Polynomial<br />CRCWDAT= 0x0000; // Initialize CRCWDAT with 0<br />Flag=0x00;<br />for(j=0;j<Len;j++)<br />{<br />*ptr =*temp++; //write data into FIFO<br />Flag=Flag^0x01;//Flag for odd or even bytes<br />if(CRCCONbits.CRCFUL==1)//check if FIFO is full<br />{<br />CRCCONbits.CRCGO=1; //start CRC engine<br />while(CRCCONbits.CRCMPT!=1);//check if FIFO is empty<br />CRCCONbits.CRCGO=0; //stop CRC engine<br />}<br />}<br />if(CRCCONbits.CRCGO!=1)<br />CRCCONbits.CRCGO=1;<br />if(Flag==0)<br />CRCDAT = 0x0000; //appending PLEN+1 zeros (multiply by 2^16)<br />else<br />*ptr=0x00;//appending (PLEN+1)/2 zeros (multiply by 2^8)<br />while(CRCCONbits.CRCMPT!=1);//check if FIFO is empty<br />Nop();<br />Nop();<br />Nop();<br />Nop();<br />Nop();<br />CRCCONbits.CRCGO=0; //stop CRC engine<br />Nop();<br />if(Flag==1) // if odd number of bytes,<br />{ //append (PLEN+1)/2 zeros (multiply by 2^8)<br />for(j = 0; j < 8; j ++)<br />{<br />Carry =( CRCWDAT & 0x8000);<br />CRCWDAT <<= 1;<br />if(Carry)<br />CRCWDAT ^= 0x1021;<br />}<br />}<br />return CRCWDAT;<br />}<br /><br />我用的就是官方提供的程序! 我找了珠海 深圳 上海的FAE 答复均是硬件肯定没问题,让他们再调试调试,这都两个星期了,给香港北京的技术支持!到现在也没解决,各位不相信的话自己可以去尝试!
|