我正在对3MB 内部闪存和32MB 外部闪存执行 CRC 计算软件计算方法执行计算需要很长时间(33、554、432 * 10)机器周期、TMS570LS3137是否具有硬件 CRC IP。 如果是、如何使用它、有任何应用手册。
#pragma SECTION =".intvecs"
#pragma SECTION =".rodata"
ulFlashStartAddr =(uint32)__section_begin (".intvecs");//用于闪存 CRC 计算
ulFlashEndAddr =(uint32)__section_end (".rodata");//用于闪存 CRC 计算*
SL_ESM_Init (ESM_ApplicationCallback);
crcAtInit_VIMRAM = sl_CRC_Calculate ((((uint64 *) 0xFFF82000)、256);
crcAtInit_fee = sl_CRC_Calculate ((((uint64 *) 0xF0200000)、8);
crcAtInit_FLASH = sl_CRC_Calculate ((uint64 *)((uint32) ulFlashStartAddr)、(((((UINT32) ulFlashEndAddr)-(((UINT32) ulFlashStartAddr))>> 6));
crcAtInit_StaticRAM = sl_CRC_Calculate ((uint64*) static_ram、1);//仅在配置被禁用时启用以下函数*/
_enable_interrupt_();
#define CRC_CTRL0 (*(volatile UINT32 *) 0xFE000000U)
#define CRC_CTRL2 (*(volatile UINT32 *) 0xFE000010U)
#define CRC_STATUS (*(volatile UINT32 *) 0xFE000028U)
#define CRC_SIGREGL1 (*(volatile UINT32 *) 0xFE000060U)
#define CRC_SIGREGH1 (*(volatile UINT32 *) 0xFE000064U)
#define CRC_SIGREG (*(volatile uint64 *) 0xFE000060U)
#define CRC_REGL1 (*(volatile UINT32 *) 0xFE000068U)
#define CRC_REGH1 (*(volatile UINT32 *) 0xFE00006CU)
/*SAFETYMCUSW 61 D 先生:8.10,8.11. 注释_1*/
uint64 sl_CRC_Calculate (uint64* startAddr、const uint32 count64)
{
volatile uint32 count = 0U;/* volatile、以防止被优化*/
CRC_CTRL0 |= 0x00000001U;//重置 CRC 模块*/
CRC_CTRL0 &= 0xFFFFFFFEU;
CRC_CTRL2 |= 0x00000003U;//配置为完全 CPU 模式*/
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
/*SAFETYMCUSW 134 S MR:12.2 备注_5*/
对于(count=0U;count < count64;count++){
/*SAFETYMCUSW 45 D MR:21.1 备注_2*/
/*SAFETYMCUSW 93 S MR:6.1、6.2、10.1、10.2、10.3、10.4 "LDRA 工具问题"*/
CRC_SIGREG =(uint64)(* startAddr);
/*SAFETYMCUSW 45 D MR:21.1 备注_2*/
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
startAddr++;
}
return (CRC_SIGREG);
}