【DigiKey好物畅享】NXP FRDM-MCXN236开发板DSP性能实测

前面学习了开发板的资料,下面基于官方串口打印示例,添加DSP库测试其运算性能:

首先添加DSP库,通过KEIL RTE一键添加十分方便:

初始化DWT计数器用于计时

uint32_t dwt_init(void) 
{
	uint32_t c;
	CoreDebug->DEMCR &= ~0x01000000;
	CoreDebug->DEMCR |=  0x01000000;
	DWT->CTRL &= ~0x00000001;
	DWT->CTRL |=  0x00000001;
	DWT->CYCCNT = 0;      
	c = DWT->CYCCNT;
	__ASM volatile ("NOP");
	__ASM volatile ("NOP");    
	return (DWT->CYCCNT - c);
}

测试代码

static void arm_rfft_f32_app(void)
{
	uint16_t i; 
	uint32_t t1,t2;
	arm_rfft_fast_instance_f32 S;
	 ifftFlag = 0;  
	
	delay_init();
  
 /* 初始化结构体S中的参数 */ 
  arm_rfft_fast_init_f32(&S, TEST_LENGTH_SAMPLES); 
 for(i=0; i<1024; i++) 
 { 
  /* 波形是由直流分量,50Hz正弦波组成,波形采样率1024,初始相位60° */ 
  testInput_f32[i] = 1 + cos(2*3.1415926f*50*i/1024 + 3.1415926f/3); 
 } 
  t1 = DWT->CYCCNT;
 /* 1024点实序列快速FFT */  
 arm_rfft_fast_f32(&S, testInput_f32, testOutput_f32, ifftFlag); 
  t2 = DWT->CYCCNT;
 PRINTF("arm_rfft_fast_f32 t2=%d t1=%d t=%d -> %fus\r\n",t2,t1,t2-t1,(t2-t1)*1.0/150000000); 
 /* 为了方便跟函数arm_cfft_f32计算的结果做对比,这里求解了1024组模值,实际函数arm_rfft_fast_f32 
    只求解出了512组   
 */  
 t1 = DWT->CYCCNT;
  arm_cmplx_mag_f32(testOutput_f32, testOutputMag_f32, TEST_LENGTH_SAMPLES); 
  t2 = DWT->CYCCNT; 
 PRINTF("arm_cmplx_mag_f32 t2=%d t1=%d t=%d -> %fus\r\n",t2,t1,t2-t1,(t2-t1)*1.0/150000000);
	while(1)
	{
		tm_delay_us(500*1000); 
		//PRINTF("=========================================\r\n"); 
	} 
  
 /* 求相频 */ 
 PowerPhaseRadians_f32(testOutput_f32, Phase_f32, TEST_LENGTH_SAMPLES, 0.5f); 
  
 /* 串口打印求解的幅频和相频 */ 
 for(i=0; i<TEST_LENGTH_SAMPLES; i++) 
 { 
 // PRINTF("%f, %f\r\n", testOutputMag_f32[i], Phase_f32[i]); 
 } 
}

/*!
 * @brief Main function
 */
int main(void)
{
    /* Structure of initialize PWM */
    pwm_config_t pwmConfig;
    pwm_fault_param_t faultConfig;
    uint32_t pwmVal = 4;

    /* Board pin, clock, debug console init */
    BOARD_InitHardware();

    PRINTF("mcxn236 DSP test\n");
		arm_rfft_f32_app();
		while(1);
}

测试结果

主频150MHz,计算1024点FFT函数耗时0.000337us,对比ST网友测试结果: