Tool/software: Code Composer Studio
I want to test crc auto-mode,but I didn't get the crc value, Here is my code:
/** @fn void main(void)
* @brief Application main function
* @note This function is empty by default.
*
* This function is called after startup.
* The user can use this function to implement the application.
*/
/* USER CODE BEGIN (2) */
#define FRAME_COUNT 0x1
#define ELEMENT_COUNT 0x1
#define D_SIZE 8
g_dmaCTRL g_dmaCTRLPKT0, g_dmaCTRLPKT1; // dma control packet configuration stack
int main(void)
{
/* USER CODE BEGIN (3) */
uint64 u64Signature = 0U;
uint64 result_crc = 0U;
_enable_IRQ();
// uint32_t CRC1_Ref[2] = {0x5F7EAE33, 0x6233774E};
uint64 crc_test_value = 0x8DF8A32C74B91F3E;
// uint16 tx_data[D_SIZE] = {0x1111,0x2222,0x3333,0x4444,0x5555,0x6666,0x7777,0x8888};
crcInit();
result_crc = crc_update_word(0U, crc_test_value);
crcREG->PCOUNT_REG1= FRAME_COUNT * ELEMENT_COUNT;
crcREG->SCOUNT_REG1 = 1;
crcEnableNotification(crcREG,1);
dmaEnable();
g_dmaCTRLPKT0.SADD = (uint32_t)(&(result_crc));
//g_dmaCTRLPKT0.SADD = (uint32_t)0x08000FE8; //address of variable result_crc which holds the pre-determined CRC value.
// g_dmaCTRLPKT0.SADD = (uint32_t)(&CRC1_Ref[0]);
g_dmaCTRLPKT0.DADD = (uint32_t)(&(crcREG->REGL1));
g_dmaCTRLPKT0.CHCTRL = 0;
g_dmaCTRLPKT0.FRCNT = FRAME_COUNT;
g_dmaCTRLPKT0.ELCNT = ELEMENT_COUNT;
g_dmaCTRLPKT0.ELDOFFSET = 0;
g_dmaCTRLPKT0.ELSOFFSET = 0;
g_dmaCTRLPKT0.FRDOFFSET = 0;
g_dmaCTRLPKT0.FRSOFFSET = 0;
g_dmaCTRLPKT0.PORTASGN = PORTA_READ_PORTB_WRITE;
g_dmaCTRLPKT0.RDSIZE = ACCESS_64_BIT;
g_dmaCTRLPKT0.WRSIZE = ACCESS_64_BIT;
g_dmaCTRLPKT0.TTYPE = FRAME_TRANSFER;
g_dmaCTRLPKT0.ADDMODERD = ADDR_INC1;
g_dmaCTRLPKT0.ADDMODEWR = ADDR_FIXED;
g_dmaCTRLPKT0.AUTOINIT = AUTOINIT_OFF;
// setting dma control packets for receive
dmaSetCtrlPacket(DMA_CH0, g_dmaCTRLPKT0);
dmaReqAssign(DMA_CH0, DMA_REQ26);
dmaSetChEnable(DMA_CH0 ,DMA_SW);
g_dmaCTRLPKT1.SADD = (uint32_t)(&(crc_test_value));
//g_dmaCTRLPKT1.SADD = (uint32_t)0x08000FF0;//address of crc_test_value from where the memory area to be verified.
// g_dmaCTRLPKT1.SADD = (uint32_t)tx_data; /* source address */
g_dmaCTRLPKT1.DADD = (uint32_t)(&(crcREG->PSA_SIGREGL1));
g_dmaCTRLPKT1.CHCTRL = 0;
g_dmaCTRLPKT1.FRCNT = FRAME_COUNT;
g_dmaCTRLPKT1.ELCNT = ELEMENT_COUNT;
g_dmaCTRLPKT1.ELDOFFSET = 0;
g_dmaCTRLPKT1.ELSOFFSET = 0;
g_dmaCTRLPKT1.FRDOFFSET = 0;
g_dmaCTRLPKT1.FRSOFFSET = 0;
g_dmaCTRLPKT1.PORTASGN = PORTA_READ_PORTB_WRITE;
g_dmaCTRLPKT1.RDSIZE = ACCESS_64_BIT;
g_dmaCTRLPKT1.WRSIZE = ACCESS_64_BIT;
g_dmaCTRLPKT1.TTYPE = FRAME_TRANSFER;
g_dmaCTRLPKT1.ADDMODERD = ADDR_FIXED;
g_dmaCTRLPKT1.ADDMODEWR = ADDR_FIXED;
g_dmaCTRLPKT1.AUTOINIT = AUTOINIT_OFF;
// setting dma control packets for receive
dmaSetCtrlPacket(DMA_CH1, g_dmaCTRLPKT1);
dmaSetChEnable(DMA_CH1, DMA_SW);
while( crcREG->BUSY & 1ul )
{
/* Wait until DMA finsihed and CRC indicates block compressed */
}
u64Signature = crcGetSectorSig(crcREG, CRC_CH1);
/* Clear CH1_CCIT bit */
crcREG->STATUS = CRC_CH1_CC;
if(u64Signature != result_crc){
printf("wrong!,result_crc is %llx,u64Signature is %llx",result_crc,u64Signature);
}else{
printf("right!");
}
// printf("%llx \n",u64Signature);
// while(1);
/* USER CODE END */
return 0;
}