主题中讨论的其他器件:C2000WARE
您好!
我正在尝试在 MCU F28069M 上实现 CLA_FFT、但无法执行。
首先、该 MCU 可以运行1024点 FFT。
尝试执行以下函数:
__interrupt void Cla1Task1 (void) { __mdebugstop(); CLA_CFFT_run1024Pt(); __mdebugstop(); CLA_CFFT_unpack512Pt(); }
这里还有链接器命令文件、我已经设计用于通过 CLA 执行 FFT 和 FIR
_Cla1Prog_Start = _Cla1funcsRunStart; -heap 0x400 -stack 0x400 // Define a size for the CLA scratchpad area that will be used // by the CLA compiler for local symbols and temps // Also force references to the special symbols that mark the // scratchpad are. // CLA_SCRATCHPAD_SIZE = 0x100; --undef_sym=__cla_scratchpad_end --undef_sym=__cla_scratchpad_start MEMORY { PAGE 0 : /* BEGIN is used for the "boot to SARAM" bootloader mode */ BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */ BEGIN : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */ RAMM0M1 : origin = 0x000050, length = 0x000750 RAML5 : origin = 0x00E000, length = 0x002000 FLASHH : origin = 0x3D8000, length = 0x004000 /* on-chip FLASH */ FLASHG : origin = 0x3DC000, length = 0x004000 /* on-chip FLASH */ FLASHF : origin = 0x3E0000, length = 0x004000 /* on-chip FLASH */ FLASHE : origin = 0x3E4000, length = 0x004000 /* on-chip FLASH */ FLASHD : origin = 0x3E8000, length = 0x004000 /* on-chip FLASH */ FLASHC : origin = 0x3EC000, length = 0x004000 /* on-chip FLASH */ FLASHA : origin = 0x3F4000, length = 0x003F80 /* on-chip FLASH */ ROM : origin = 0x3FF3B0, length = 0x000C10 /* Boot ROM */ RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */ VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */ /* RAML0_L2 : origin = 0x008000, length = 0x001000 */ RAML3 : origin = 0x009000, length = 0x001000 /* FPU Tables in Boot ROM */ FPUTABLES : origin = 0x3FD590, length = 0x0006A0 /* IQ Math Tables in Boot ROM */ IQTABLES : origin = 0x3FDF00, length = 0x000B50 IQTABLES2 : origin = 0x3FEA50, length = 0x00008C IQTABLES3 : origin = 0x3FEADC, length = 0x0000AA PAGE 1 : CLARAM0 : origin = 0x008800, length = 0x000400 CLARAM1 : origin = 0x008C00, length = 0x000400 CLARAM2 : origin = 0x008000, length = 0x000800 /* on-chip RAM block L4-L8 */ RAML4 : origin = 0x00A000, length = 0x04000 RAML5_2 : origin = 0x010000, length = 0x001000 RAML6 : origin = 0x011000, length = 0x001000 RAML7 : origin = 0x012000, length = 0x001000 RAML8 : origin = 0x013000, length = 0x001000 USB_RAM : origin = 0x040000, length = 0x000800 /* USB RAM */ FLASHB : origin = 0x3F0000, length = 0x004000 /* on-chip FLASH */ CLA1_MSGRAMLOW : origin = 0x001480, length = 0x000080 CLA1_MSGRAMHIGH : origin = 0x001500, length = 0x000080 } SECTIONS { /* Setup for "boot to SARAM" mode: The codestart section (found in DSP28_CodeStartBranch.asm) re-directs execution to the start of user code. */ ramfuncs : LOAD = FLASHD, RUN = RAML5, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), LOAD_SIZE(_RamfuncsLoadSize), PAGE = 0 .cinit : > FLASHA, PAGE = 0 .pinit : > FLASHA, PAGE = 0 .text : > FLASHA, PAGE = 0 codestart : > BEGIN, PAGE = 0 /* Allocate uninitialized data sections: */ .stack : > RAMM0M1, PAGE = 0 .ebss : > RAML4, PAGE = 1 .esysmem : > RAML4, PAGE = 1 .cio : > RAML4, PAGE = 1 /* Initialized sections to go in Flash */ /* For SDFlash to program these, they must be allocated to page 0 */ .econst : > FLASHA, PAGE = 0 .switch : > FLASHA, PAGE = 0 .scratchpad : > CLARAM0, PAGE = 1 .bss_cla : > CLARAM0, PAGE = 1 .const_cla : > CLARAM0, PAGE = 1 IQmath : > FLASHB, PAGE = 1 IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD // CLA1fftTables : > RAML3, PAGE = 1 /* Allocate FPU math areas: */ FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD RFFTdata1 : > RAML6, PAGE = 1 RFFTdata2 : > RAML7, PAGE = 1 RFFTdata3 : > RAML8, PAGE = 1 RFFTdata4 : > RAML5_2, PAGE = 1 Cla1Prog : > RAML3, LOAD_START(_Cla1funcsLoadStart), LOAD_END(_Cla1funcsLoadEnd), LOAD_SIZE(_Cla1funcsLoadSize), RUN_START(_Cla1funcsRunStart), PAGE = 0 Cla1ToCpuMsgRAM : > CLA1_MSGRAMLOW, PAGE = 1 CpuToCla1MsgRAM : > CLA1_MSGRAMHIGH, PAGE = 1 Cla1DataRam0 : > CLARAM0, PAGE = 1 Cla1DataRam1 : > CLARAM1, PAGE = 1 Cla1DataRam2 : > CLARAM2, PAGE = 1 CLA1mathTables : > CLARAM1, LOAD_START(_Cla1mathTablesLoadStart), LOAD_END(_Cla1mathTablesLoadEnd), LOAD_SIZE(_Cla1mathTablesLoadSize), RUN_START(_Cla1mathTablesRunStart), PAGE = 1 CLAscratch : { *.obj(CLAscratch) . += CLA_SCRATCHPAD_SIZE; *.obj(CLAscratch_end) } > CLARAM0, PAGE = 1 .reset : > RESET, PAGE = 0, TYPE = DSECT vectors : > VECTORS, PAGE = 0, TYPE = DSECT
我找不到任何在该 MCU 上实施 FFT 的示例代码。
请引导我是否可以实现。
另外、请帮助确定上述故障以及如何处理。
我使用 ADXL359加速度传感器测量发动机的振动。
由于我每1毫秒对数据进行一次采样、因此我使用 FFT 1024点来实现更高的精度。
但它需要花费更多的计算时间