主题中讨论的其他器件: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点来实现更高的精度。
但它需要花费更多的计算时间
