工具/软件:Code Composer Studio
大家好、我将在 CCS 中使用'2837x_RFFT_ADC'示例代码。
对于 FFT 输出、我希望获取这些数据的绝对值。
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
#include "fpu_rfft.h"
#include "math.h"
#include "examples_setup.h"
#define RFFT_STACages 11.
#define RFFT_SIZE (1 << RFFT_STOPENAINSages)
#define F_PER_SAMPLE (ADC_SAMPLING_FREQ/(float) RFFT_SIZE)
#pragma DATA_SECTION (RFFTin1Buff、"RFFTdata1")
uint16_t RFFTin1Buff[2*RFFT_SIZE];
#pragma DATA_SECTION (RFFTmagBuff、"RFFTdata2")
float RFFTmagBuff[RFFT_SIZE/2+1];
#pragma DATA_SECTION (RFFToutBuff、"RFFTdata3")
float RFFToutBuff[RFFT_SIZE];
//float RFFToutBuff1[RFFT_SIZE]=fabsf (RFFToutBuff[RFFT_SIZE]);
#pragma DATA_SECTION (RFFTF32Coef、"RFFTdata4")
float RFFTF32Coef[RFFT_SIZE];
RFFT_ADC_F32_struct rfft_ADC;
RFFT_ADC_F32_struct_Handle HND_rfft_ADC =&rfft_ADC;
RFFT_F32_struct rfft;
RFFT_F32_struct_Handle HND_rfft =&rfft;
volatile uint16_t flagInputReady = 0;
volatile uint16_t sampleIndex = 0;
uint16_t pass = 0;
uint16_t 故障= 0;
_interrupt void adcaIsr();
int16_t main (空)
{
uint16_t i、j;
float freq = 0.0;
ifdef 闪存
EALLOW;
Flash0EccRegs.ecc_enable.bit.enable = 0;
memcpy (((uint32_t *)&RamfuncsRunStart、(uint32_t *)&RamfuncsLoadStart、
(uint32_t)&RamfuncsLoadSize);
FPU_initFlash();
#endif //闪存
FPU_initSystemClocks();
FPU_initEPIE();
FPU_initADCA();
FPU_initEPWM();
EALLOW;
PieVectTable.ADCA1_INT =&adcaIsr;
EDIS;
PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
IER |= M_INT1;
EINT;
ERTM;
FPU_startEPWM ();
hnd_rfft_adc->Tail =&(hnd_rfft->OutBuf);
hnd_rfft->FFTize = RFFT_SIZE;//FFT 大小
hnd_rfft->FFTStage = RFFT_STA期;//FFT 级
hnd_rfft_adc->InBuf =&RFFTin1Buff[0];//输入缓冲器(12位 ADC)输入
hnd_rfft->OutBuf =&RFFToutBuff[0];//输出缓冲区
hnd_rfft->CosSinBuf =&RFFTF32Coef[0];//Twiddle 因子
hnd_rfft->MagBuf =&RFFTmagBuff[0];//幅度输出缓冲区
RFFT_F32_SINCOSTable (HND_rfft);//计算旋转因子
对于(i=0;i < RFFT_SIZE;i++){
RFFToutBuff[i]= 0;//清理输出缓冲器
}
对于(i=0;i < RFFT_SIZ/2;i++){
RFFTmagBuff[i]= 0;//清理幅度缓冲器
}
while (1){
while (flagInputReady = 0){};
RFFT_ADC_F32 (HND_rfft_ADC);
FlagInputReady = 0;//重置标志
RFFT_F32_MAG (HND_RFFT);//计算幅度
J = 1;
FREQ = RFFTmagBuff[1];
for (i=2;<RFFT_SIZE/2+1;i++){)
if (RFFTmagBuff[i]> freq){
J = I;
FREQ = RFFTmagBuff[i];
}
}
FREQ = F_PER_SAMPLE *(float) j;
}
Done ();
返回1;
}
_interrupt void adcaIsr ()
{
RFFTin1Buff[sampleIndex++]= AdcaResultRegs.ADCRESULT0;
if (sampleIndex ==(RFFT_SIZE - 1))){
sampleIndex = 0;
flagInputReady = 1;
}
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 INT1标志
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
}
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
根据该代码、FFT 输出数据存储在"RFFToutBuff"中。
请帮帮我
谢谢你。