![](http://datasheet.mmic.net.cn/Renesas-Electronics-America/UPD70F3452GC-UBT-A_datasheet_99848/UPD70F3452GC-UBT-A_200.png)
PIC24FV32KA304 FAMILY
DS39995C-page 200
2011-2012 Microchip Technology Inc.
20.1
User Interface
20.1.1
POLYNOMIAL INTERFACE
The CRC module can be programmed for CRC
polynomials of up to the 32nd order, using up to 32 bits.
Polynomial length, which reflects the highest exponent
in the equation, is selected by the PLEN<4:0> bits
(CRCCON2<4:0>).
The CRCXORL and CRCXORH registers control which
exponent terms are included in the equation. Setting a
particular bit includes that exponent term in the
equation. Functionally, this includes an XOR operation
on the corresponding bit in the CRC engine. Clearing
this bit disables the XOR.
For example, consider two CRC polynomials, one is a
16-bit equation and the other is a 32-bit equation:
To program these polynomials into the CRC generator,
Note that the appropriate positions are set to ‘1’ to
indicate that they are used in the equation (for example,
X26 and X23). The 0 bit required by the equation is
always XORed; thus, X0 is a don’t care. For a
polynomial of length, N, it is assumed that the Nth bit will
always be used, regardless of the bit setting. Therefore,
for a polynomial length of 32, there is no 32nd bit in the
CRCXOR register.
20.1.2
DATA INTERFACE
The module incorporates a FIFO that works with a
variable data width. Input data width can be configured
to any value, between 1 and 32 bits, using the
DWIDTH<4:0> bits (CRCCON2<12:8>). When the
data width is greater than 15, the FIFO is 4 words deep.
When the DWIDTH value is between 15 and 8, the
FIFO is 8 words deep. When the DWIDTH value is less
than 8, the FIFO is 16 words deep.
The data for which the CRC is to be calculated must
first be written into the FIFO. Even if the data width is
less than 8, the smallest data element that can be
written into the FIFO is one byte. For example, if the
DWIDTH value is 5, then the size of the data is
DWIDTH + 1 or 6. The data is written as a whole byte;
the two unused upper bits are ignored by the module.
Once data is written into the MSb of the CRCDAT
registers (that is, MSb as defined by the data width),
the value of the VWORD<4:0> bits (CRCCON1<12:8>)
increments by one. For example, if the DWIDTH value
is 24, the VWORDx bits will increment when bit 7 of
CRCDATH is written. Therefore, CRCDATL must
always be written before CRCDATH.
The CRC engine starts shifting data when the CRCGO
bit is set and the value of the VWORDx bits is greater
than zero. Each word is copied out of the FIFO into a
buffer register, which decrements VWORDx. The data
is then shifted out of the buffer. The CRC engine
continues shifting at a rate of two bits per instruction
cycle until the VWORDx value reaches zero. This
means that for a given data width, it takes half that
number of instructions for each word to complete the
calculation. For example, it takes 16 cycles to calculate
the CRC for a single word of 32-bit data.
When the VWORDx value reaches the maximum value
for the configured value of DWIDTH (4, 8 or 16), the
CRCFUL bit becomes set. When the VWORDx value
reaches zero, the CRCMPT bit becomes set. The FIFO
is emptied and the VWORD<4:0> bits are set to
‘00000’ whenever CRCEN is ‘0’.
At least one instruction cycle must pass, after a write to
CRCDAT, before a read of the VWORDx bits is done.
TABLE 20-1:
CRC SETUP EXAMPLES FOR 16 AND 32-BIT POLYNOMIAL
x16 + x12 + x5 + 1
and
x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 +
x8 + x7 + x5 + x4 + x2 + x + 1
CRC Control
Bits
Bit Values
16-Bit Polynomial
32-Bit Polynomial
PLEN<4:0>
01111
11111
X<31:16>
0000 0000 0000 000x
0000 0100 1100 0001
X<15:0>
0001 0000 0010 000x
0001 1101 1011 011x