SPRUI33H November 2015 – June 2024 TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041-Q1 , TMS320F280041C , TMS320F280041C-Q1 , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1
The CLAPROMCRC module can be configured and initiated by either the C28x or the CLA. Once the CLAPROMCRC is initiated, the processing core can switch back to the application and service the CLAPROMCRC by way of an interrupt. An interrupt can trigger the C28x and CLA and signal that the CRC-32 calculation and comparison has completed (CRCDONE). The CLAPROMCRC module waits for CLA program bus idle cycles to access the CLA program ROM. This makes sure that the CRC-32 hardware calculation does not affect code execution and performance on the CLA.
Figure 7-1 is a functional diagram of the CLAPROMCRC module.
Once the CLAPROMCRC is initiated by the C28x or CLA, the module snoops for idle cycles to fetch program memory and calculate the CRC-32. The module begins fetching from the START_ADDRESS and stops after the CRC-32 has been calculated for the required number of bytes specified by BLOCK_SIZE. The CRC-32 can be calculated on as little as 1KB of data up to the size of the CLA program ROM in increments of 1KB.
The CLAPROMCRC module fetches 32 bits of program data on every fetch and takes 4 cycles to calculate the CRC-32 value for each fetch. For example, to calculate a CRC-32 on 1KB of program data, the module requires 256 idle cycles if each fetch access is spaced 4 cycles apart. Therefore, to calculate the CRC-32 on a 1KB block of program data requires a minimum of 1024 cycles. The CRC polynomial used in the hardware calculation is 0x04C11DB7.