主题中讨论的其他器件:C2000WARE、
大家好、我有不使用 CLA 进行 FFT 计算的工作代码。 我想将 FFT 计算移动到 CLA、因为我使用以下链接器文件:
//##########################################################################出################################出
//
//文件:f2806x_cla_c_lnk.cmd
//
//标题:运行 CLA 数学库示例的链接器命令文件
//在 f2806x 平台上
//
//该文件包括当前位置的所有 RAM 和闪存块。
// f2806x 并取决于活动的编译配置
//(RAM 或闪存)相应的部分将被加载
//加载到 RAM 或闪存块中
//
//########################################################################出################################出
//
//
//$Copyright:版权所有(C) 2023 Texas Instruments Incorporated -
// http://www.ti.com/ 保留所有权利$
//########################################################################出################################出
//
//在项目属性中将 CLA_C 定义为1
// Project Properties -> C2000 Linker -> Advanced Options -> Command File
//预处理->-定义
//
//--define=CLA_C=1
//
// CLA_MATH_TABLE_IN_ROM 根据在项目属性中定义
//已选择构建配置
// Project Properties -> C2000 Linker -> Advanced Options -> Command File
//预处理->-定义
//将该变量设置为1以使用 CLA 数据 ROM 中的 CLA 数学表
//如果设置为0,请确保有正确的 CLA 数学库(没有_datarom 的库)
//后缀)
//
//--define=CLA_MATH_TABES_IN_ROM=1
//
内存
{
第0页:
begin:origin = 0x3F7FF6,length = 0x000002 /* Part of FLASHA。 用于"引导至闪存"引导加载程序模式。 */
CLAPROGRAM:origin = 0x009000、length = 0x001000 /*片上 RAM 块 L3 */
RAMM0:origin = 0x000050,length = 0x0003B0 /*片上 RAM 块 M0 */
RAML5L8:origin = 0x00C000、length = 0x008000
OTP : origin = 0x3D7800 , length = 0x000400 /*片上 OTP */
FLASHH:origin = 0x3D8000、length = 0x004000 /*片上闪存*/
FLASHG:origin = 0x3DC000,length = 0x004000 /*片上闪存*/
FLASHF:origin = 0x3E0000,length = 0x004000 /*片上闪存*/
FLASHE:origin = 0x3E4000,length = 0x004000 /*片上闪存*/
FLASHD : origin = 0x3E8000, length = 0x004000 /*片上闪存*/
FLASHC : origin = 0x3EC000 , length = 0x004000 /*片上 Flash */
FLASHA:origin = 0x3F4000,length = 0x003F80 /*片上闪存*/
ROM:origin = 0x3FF3B0,length = 0x000C10 /* Boot ROM */
复位:origin = 0x3FFFC0、length = 0x000002 /* part of boot ROM */
vectors : origin = 0x3FFFc2, length = 0x00003E /* part of boot ROM */
CSM_RSVD:origin = 0x3F7F80,length = 0x000076 /*部分 FLASHA。 当 CSM 正在使用时、全为0x0000编程。 */
// begin:origin = 0x3F7FF6,length = 0x000002 /*部分 FLASHA。 用于"引导至闪存"引导加载程序模式。 */
CSM_PWL_P0:origin = 0x3F7FF8,length = 0x000008 /*部分 FLASHA。 FLASHA 中的 CSM 密码位置*/
第1页:
BOOT_RSVD:origin = 0x000000,length = 0x000050 /* M0的一部分,引导 ROM 将此用于堆栈*/
RAMM1:origin = 0x000400,length = 0x000400 /*片上 RAM 块 M1 */
CLA1_MSGRAMLOW:origin = 0x001480、length = 0x000080
CLA1_MSGRAMHIGH:origin = 0x001500、length = 0x000080
CLARAM0:origin = 0x008800、length = 0x000400 /*片上 RAM 块 L1 */
CLARAM1 : origin = 0x008C00 , length = 0x000400 /*片上 RAM 块 L2 */
CLARAM2 : origin = 0x008000 , length = 0x000800 /*片上 RAM 块 L0 */
RAML4:origin = 0x00A000,length = 0x002000 /*片上 RAM 块 L4 */
USB_RAM:origin = 0x040000、length = 0x000800 /* USB RAM */
FLASHB:origin = 0x3F0000,length = 0x004000 /*片上闪存*/
}
部分
{
codestart :> begin, page = 0
csmpasswds:>csm_PWL_p0、page = 0
csm_rsvd :> csm_rsvd , page = 0
#if 已定义(RAM)
.cinit:> RAMM0、page = 0
.pinit:> RAMM0、page = 0
.text:> RAML5L8、page = 0
ramfuncs:> RAML5L8,page = 0
econst:> RAML5L8、页= 0
.switch:> RAMM0、PAGE = 0
Cla1Prog:{_Cla1ProgRunStart =.;}> CLAPROGRAM、
PAGE = 0
#if! (CLA_FFT_TABLE_IN_ROM)
CLA1fftTables :> CLARAM2, page = 1
#endif // CLA_FFT_TABLE_IN_ROM
#Elif 已定义(_FLASH)
.cinit:> FLASHA、page = 0
.pinit :> FLASHA,页面= 0
.text:> FLASHA、page = 0
CLA1mathTables :> CLARAM1, page = 1
ramfuncs : load=FLASHD,
RUN = RAML5L8、
Load_start (_RamfuncsLoadStart)、
RUN_START (_RamfuncsRunStart)、
Load_Size (_RamfuncsLoadSize)、
PAGE = 0
econst:> FLASHA、PAGE = 0
.switch:> FLASHA、PAGE = 0
CLA1fftTables : Load = FLASHB,
RUN = CLARAM2、
RUN_START (_CLA1fftTablesRunStart)、
Load_start (_CLA1fftTablesLoadStart)、
Load_Size (_CLA1fftTablesLoadSize)、
页= 1
Cla1Prog:load = FLASHD,
运行= CLAPROGRAM、
Load_Start (_Cla1ProgLoadStart)、
Load_Size (_Cla1ProgLoadSize)、
RUN_START (_Cla1ProgRunStart)、
PAGE = 0
//
//将表加载到闪存并复制到 RAM
//
CLA1mathTables : load=FLASHB,
运行= CLARAM1、
Load_start (_CLA1mathTablesLoadStart)、
Load_Size (_CLA1mathTablesLoadSize)、
RUN_START (_CLA1mathTablesRunStart)、
页= 1
#else
#error 向 C2000链接器中添加"RAM"或"_FLASH"->高级选项->命令文件预处理->--定义
#endif
.stack:> RAML4、page = 1
.ebss:> RAML4、page = 1
.esysmem:> RAML4、page = 1
Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW、page = 1
CpuToCla1MsgRAM:> CLA1_MSGRAMHIGH、page = 1
Cla1DataRam0:> CLARAM0、page = 1
Cla1DataRam1:> CLARAM1、page = 1
Cla1DataRam2:> CLARAM2、page = 1
IOBuffer :> RAML4, page = 1
RFFTmag :> RAML4,页面= 1
RFFTtwidthlads :> RAML4,页面= 1
#ifdef CLA_C
.cio:> RAML4、页= 1
//
// CLA C 编译器段
//
//必须分配给存储器 CLA 具有对
//
scratchpad:> CLARAM1、page = 1
.bss_cla:> CLARAM0、PAGE = 1
.const_cla:> CLARAM2、页= 1
#endif
.reset:> RESET、PAGE = 0、TYPE = DSECT
矢量:>矢量,页面= 0,类型= DSECT
}
/*
//========================================
//文件结尾。
//========================================
*/
我的主代码如下:
#include "Main.h"
#include "stdbool.h"
#include "application.h"
#include "F2806x_cla_definites.h"
#包含
//外部函数// CLA1fftTables
Uint16 RPM_2wheel = 0;
Uint16 RPM_4wheel = 0;
//#pragma DATA_SECTION (RPM_4wheel、"Cla1ToCpuMsgRAM");
//UINT16 RpmData[2];
#pragma DATA_SECTION (Num、"CpuToCla1MsgRAM");
浮点 Num=0;
#pragma DATA_SECTION (Den、"CpuToCla1MsgRAM");
浮点 Den;
#pragma DATA_SECTION (RES、"Cla1ToCpuMsgRAM");
浮点 RES;
浮点结果;
//
//定义
//
#define CLA_PROG_ENABLE 0x0001
#define CLARAM0_ENABLE 0x0010
#define CLARAM1_ENABLE 0x0020
#define CLARAM2_ENABLE 0x0040
#define CLA_RAM0CPUE 0x0100
#define CLA_RAM1CPUE 0x0200
#define CLA_RAM2CPUE 0x0400
#define RFFT_SIZE (1 << RFFT_STAGEs)
//
// CLA ISR
//
__interrupt void cla1_task1_ISR (void);
__interrupt void cla1_task2_ISR (void);
__interrupt void cla1_task3_ISR (void);
__interrupt void cla1_task4_ISR (void);
__interrupt void cla1_Task5_ISR (void);
__interrupt void cla1_task6_ISR (void);
__interrupt void cla1_task7_ISR (void);
__interrupt void cla1_task8_ISR (void);
//
//这些内容由链接器文件定义并用于复制
// CLA 代码从其加载地址到其运行地址
//在 CLA 程序存储器中
//
extern UINT16 Cla1ProgLoadSize;
extern UINT16 Cla1ProgLoadStart;
extern UINT16 Cla1ProgRunStart;
//
//这些内容由链接器文件定义并用于复制
// CLA 数学表从其加载地址到其运行地址
//集成到其中一个 CLA 数据 RAM 中
//
extern UINT16 Cla1mathTablesLoadStart;
extern UINT16 Cla1mathTablesLoadEnd;
extern UINT16 Cla1mathTablesLoadSize;
extern UINT16 Cla1mathTablesRunStart;
extern __interrupt void Cla1Task1 ();
extern __interrupt void Cla1Task2 ();
extern __interrupt void Cla1Task3 ();
extern __interrupt void Cla1Task4 ();
extern __interrupt void Cla1Task5 ();
extern __interrupt void Cla1Task6 ();
extern __interrupt void Cla1Task7 ();
extern __interrupt void Cla1Task8 ();
//全局变量
UINT16 Sensor_count= 0;
volatile bool FFT_task =false;
volatile bool RPM_CALC_TASK =false;
外部 UINT16 RPM [10];
//RAM 驱动的时间相关函数
#pragma code_section (DSP28x_usDelay、"ramfuncs");
#pragma code_section (cpu_timer0_isr、"ramfuncs");
#pragma code_section (CPU_Timer1_ISR、"ramfuncs");
#pragma code_section (ecap2_isr、"ramfuncs");
#pragma code_section (ADXL_Init、"ramfuncs");
#pragma code_section (adxL_buffer_tick、"ramfuncs");
#pragma code_section (Rpm_Display_Init、"ramfuncs");
#pragma code_section (FPU_FFT_Tick、"ramfuncs");
#pragma code_section (Rpm_Display_Tick、"ramfuncs");
#pragma code_section (scia_msg、"ramfuncs");
#pragma code_section (spi_init、"ramfuncs");
#pragma code_section (spi_fifo_init、"ramfuncs");
#pragma code_section (ADXL359_readRegister、"ramfuncs");
#pragma code_section (ADXL359_writeRegister、"ramfuncs");
#pragma code_section (four_weler、"ramfuncs");
//主菜单
//
空
TEST_RUN (void);
空 main (void)
{
//
//步骤1. 初始化系统控制:
InitSysCtrl();
InitSciGpio();
InitECap2Gpio();
InitSpiaGpio();
InitECapture();
InitI2Cgpio();
Init Gpio_Button ();
//
//禁用 CPU 中断并清除所有 CPU 中断标志
Dint;
//
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// :使用 void * memcpy ( void * destination、const void * source、size_t num )
//将"Cla1Prog"和".const_cla"段从闪存复制到 RAM
memcpy (((uint32_t *)&Cla1ProgRunStart、(uint32_t *)&Cla1ProgLoadStart、
(uint32_t)&Cla1ProgLoadSize);
// memcpy ((uint32_t *)&Cla1ConstRunStart、(uint32_t *)&Cla1ConstLoadStart、
//( uint32_t )&Cla1ConstLoadSize );
//
//将用户定义的 ISR 分配至 PIE 矢量表
//
EALLOW;
PieVectTable。 CLA1_INT1 =&cla1_task1_isr;
PieVectTable。 CLA1_INT2 =&cla1_task2_isr;
PieVectTable。 CLA1_INT3 =&cla1_task3_ISR;
PieVectTable。 CLA1_INT4 =&cla1_task4_ISR;
PieVectTable。 CLA1_INT5 =&cla1_task5_ISR;
PieVectTable。 CLA1_INT6 =&cla1_task6_isr;
PieVectTable。 CLA1_INT7 =&cla1_task7_isr;
PieVectTable。 CLA1_INT8 =&cla1_task8_isr;
EDIS;
//
//计算所有 CLA 任务向量
//
EALLOW;
Cla1Regs.MVECT1 =(UINT16)((UINT32)&Cla1Task1 -(UINT32)&Cla1ProgRunStart);
Cla1Regs.MVECT2 =(UINT16)((UINT32)&Cla1Task2 -(UINT32)&Cla1ProgRunStart);
Cla1Regs.MVECT3 =(UINT16)((UINT32)&Cla1Task3 -(UINT32)&Cla1ProgRunStart);
Cla1Regs.MVECT4 =(UINT16)((UINT32)&Cla1Task4 -(UINT32)&Cla1ProgRunStart);
Cla1Regs.MVECT5 =(UINT16)((UINT32)&Cla1Task5 -(UINT32)&Cla1ProgRunStart);
Cla1Regs.MVECT6 =(UINT16)((UINT32)&Cla1Task6 -(UINT32)&Cla1ProgRunStart);
Cla1Regs.MVECT7 =(UINT16)((UINT32)&Cla1Task7 -(UINT32)&Cla1ProgRunStart);
Cla1Regs.MVECT8 =(UINT16)((UINT32)&Cla1Task8 -(UINT32)&Cla1ProgRunStart);
EDIS;
//
//第3步:映射 CLA 任务
//所有任务均已启用并且将由 ePWM 触发器启动
//将 CLA 程序存储器映射到 CLA 并启用软件断点
//
EALLOW;
Cla1Regs.MPISRCSEL1.bit.PERINT1SEL = CLA_INT1_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT2SEL = CLA_INT2_none;
Cla1Regs.MPISRCSEL1.bit.PERINT3SEL = CLA_INT3_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT4SEL = CLA_INT4_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT5SEL = CLA_INT5_none;
Cla1Regs.MPISRCSEL1.bit.PERINT6SEL = CLA_INT6_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT7SEL = CLA_INT7_NONE;
Cla1Regs.MPISRCSEL1.bit.PERINT8SEL = CLA_INT8_NONE;
Cla1Regs.Mier.all = 0x00FF;
EDIS;
//调用闪存初始化以设置闪存等待状态
//该函数必须驻留在 RAM 中
memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(UINT32)&RamfuncsLoadSize);
//外设初始化
//I2C A 初始化
I2CA_Init ();
//初始化 SPI 和 SCI FIFO
SPI_INIT();
spi_fifo_init ();
//初始化 SCI 和 SCI FIFO
scia_echoback_init ();
scia_fifo_init ();
InitFlash();
//初始化 ADXL 振动传感器
ADXL_Init ();
//初始化 LCD 显示
Rpm_Display_Init ();
// display_task = true;
//初始化环形缓冲区以存储传感器数据
ADXL_BUFFER_Init (&ADXL_RingBuffer_X、(uint8*) test_input、sizeof (test_input));
ADXL_Buffer_Init (&ADXL_RingBuffer_Y、(uint8*) test_inputY、sizeof (test_inputY));
ADXL_Buffer_Init (&ADXL_RingBuffer_Z、(uint8*) test_inputZ、sizeof (test_inputZ));
//初始化计时器
// Timer_Init ();//初始化循环中断的计时器
//初始化 GPIO 引脚以通过按钮在两轮和四轮车之间切换
init_button (pButton);
memset (RPM、0、sizeof (RPM));
//
//在组和子组级别启用 CLA 中断
//
PieCtrlRegs.PIEIER11.all = 0xFFFF;
IER =(M_INT11 );
Timer_Init ();
EINT;//启用全局中断 INTM
ERTM;//启用全局实时中断 DBGM
//将 CLA 程序空间切换到 CLA 并启用软件强制
//也切换 CLA 数据 RAM 0、1和2
//注意:RAMxCPUE 位只能通过对
//寄存器,而不是单个位字段。 此外,该国的状况
//这些位域不会反映在监视视图或寄存器视图中-
//它们始终读取为零。 这是一个已知错误、建议用户
//在继续之前先测试 CPU 附件
EALLOW;
// Cla1Regs.MMEMCFG.all = CLA_PROG_ENABLE|CLARAM0_ENABLE|CLARAM1_ENABLE|CLA_RAM1CPUE;// CLA_RAM2_ENABLE|
Cla1Regs.MMEMCFG.all = CLA_PROG_ENABLE|CLARAM0_ENABLE|CLARAM1_ENABLE|
CLARAM2_ENABLE|CLA_RAM1CPUE;
Cla1Regs.MCTL.bit.IACKE = 1;
EDIS;
//无限循环
while (1)
{
task_scheduler();
}
}
//
// CLA ISR
//
__中断无效
cla1_task1_ISR (void)
{
PieCtrlRegs.PIEACK.ACK11 = 1;
}
__中断无效
cla1_task2_ISR (void)
{
PieCtrlRegs.PIEACK.ACK11 = 1;
}
__中断无效
cla1_task3_ISR (void)
{
PieCtrlRegs.PIEACK.ACK11 = 1;
}
__中断无效
cla1_task4_ISR (void)
{
PieCtrlRegs.PIEACK.ACK11 = 1;
}
__中断无效
cla1_Task5_ISR (空)
{
PieCtrlRegs.PIEACK.ACK11 = 1;
}
__中断无效
cla1_task6_ISR (void)
{
PieCtrlRegs.PIEACK.ACK11 = 1;
}
__中断无效
cla1_task7_ISR (void)
{
PieCtrlRegs.PIEACK.ACK11 = 1;
}
__中断无效
cla1_task8_ISR (void)
{
PieCtrlRegs.PIEACK.ACK11 = 1;
}
//文件结束
//
空
TEST_RUN (空)
{
Cla1ForceTask1andWait();
结果= RES;
PUTs("*");
}
在我的 while 环路中、我将调用该函数来计算 FFT、如下所示
int FPU_FFT_Tick ()
{
//局部变量
UINT16 tempRPM=0;
浮点 FFT_SIZE = RFFT_SIZE;
Uint16 RPM_4WHELE_X = 0;
Uint16 RPM_4WHELE_Y = 0;
Uint16 RPM_4WHELE_Z = 0;
静态 uint16 j=0;
{
UINT16 I=0;
for (I=0;I < RFFT_SIZE;I++){
IOBuffer[i]= TEST_INPUT[i];
}
}
hnd_rfft->FFTSize = RFFT_size;
HND_rfft->FFTStages = RFFT_stages;
hd_rfft->InBuf =&IOBuffer[0];//输入缓冲器
hnd_rfft->OutBuf =&IOBuffer2[0];//输出缓冲器
hnd_rfft->MagBuf =&RFFTmagBuff[0];//幅度缓冲器
hd_rfft->CosSinBuf =&RFFTF32Coef[0];//Twiddle 因子缓冲器
RFFT_F32_sincostable (HND_rfft);//计算 Twiddle Factor
{
UINT16 I=0;
对于(I=0;I < RFFT_SIZE;I++){
IOBuffer2[i]= 0;//清理输出缓冲器
}
}
{
UINT16 I=0;
for (I=0;I <= RFFT_SIZE/2;I++){
RFFTmagBuff[i]= 0;//清理幅度缓冲器
}
}
#ifdef run_cla
test_run();
#else
RFFT_F32 (HND_rfft);//计算实数 FFT
RFFT_F32_MAG (HND_rfft);//计算幅度
#endif
// HND_rfft->PhaseBuf =&RFFTmagBuff[0];//使用幅度缓冲器
{
UINT16 I=1;
对于(I =1;I <= RFFT_SIZE/2;++I)
{
IF ((RFFTmagBuff[I]> maxMagnitude))
{//&&(IOBuffer2[i]< 20)//&& maxMagnitude < 40
maxMagnitude = RFFTmagBuff[i];
peakIndex = i;
}
}
}
频率=(FS * peakIndex)/(FFT_SIZE);
if (maxMagnitude <3)
{
RPM_4WHEEL_X = 0;
}
否则
{
RPM_4WHEEL_X= RPM_VALUE (频率、4);
}
// RPM (Y 轴)
{
UINT16 I=0;
for (I=0;I < RFFT_SIZE;I++){
IOBuffer[i]= test_inputY[i];
}
}
hnd_rfft->FFTSize = RFFT_size;
HND_rfft->FFTStages = RFFT_stages;
hd_rfft->InBuf =&IOBuffer[0];//输入缓冲器
hnd_rfft->OutBuf =&IOBuffer2[0];//输出缓冲器
hnd_rfft->MagBuf =&RFFTmagBuff[0];//幅度缓冲器
hd_rfft->CosSinBuf =&RFFTF32Coef[0];//Twiddle 因子缓冲器
RFFT_F32_sincostable (HND_rfft);//计算 Twiddle Factor
{
UINT16 I=0;
对于(I=0;I < RFFT_SIZE;I++){
IOBuffer2[i]= 0;//清理输出缓冲器
}
}
{
UINT16 I=0;
for (I=0;I <= RFFT_SIZE/2;I++){
RFFTmagBuff[i]= 0;//清理幅度缓冲器
}
}
#ifdef run_cla
test_run();
#else
RFFT_F32 (HND_rfft);//计算实数 FFT
RFFT_F32_MAG (HND_rfft);//计算幅度
#endif
// HND_rfft->PhaseBuf =&RFFTmagBuff[0];//使用幅度缓冲器
{
UINT16 I=1;
对于(I =1;I <= RFFT_SIZE/2;++I)
{
IF ((RFFTmagBuff[I]> maxMagnitude))
{
maxMagnitude = RFFTmagBuff[i];
peakIndex = i;
}
}
}
频率=(FS * peakIndex)/(FFT_SIZE);
if (maxMagnitude <3)
{
RPM_4WHEEL_Y = 0;
}
否则
{
RPM_4WHEEL_Y= RPM_VALUE (频率、4);
}
// Z 轴 RPM
{
UINT16 I=0;
for (I=0;I < RFFT_SIZE;I++){
IOBuffer[i]= test_inputZ[i];
}
}
hnd_rfft->FFTSize = RFFT_size;
HND_rfft->FFTStages = RFFT_stages;
hd_rfft->InBuf =&IOBuffer[0];//输入缓冲器
hnd_rfft->OutBuf =&IOBuffer2[0];//输出缓冲器
hnd_rfft->MagBuf =&RFFTmagBuff[0];//幅度缓冲器
hd_rfft->CosSinBuf =&RFFTF32Coef[0];//Twiddle 因子缓冲器
RFFT_F32_sincostable (HND_rfft);//计算 Twiddle Factor
{
UINT16 I=0;
对于(I=0;I < RFFT_SIZE;I++){
IOBuffer2[i]= 0;//清理输出缓冲器
}
}
{
UINT16 I=0;
for (I=0;I <= RFFT_SIZE/2;I++){
RFFTmagBuff[i]= 0;//清理幅度缓冲器
}
}
#ifdef run_cla
test_run();
#else
RFFT_F32 (HND_rfft);//计算实数 FFT
RFFT_F32_MAG (HND_rfft);//计算幅度
#endif
// HND_rfft->PhaseBuf =&RFFTmagBuff[0];//使用幅度缓冲器
{
UINT16 I=1;
对于(I =1;I <= RFFT_SIZE/2;++I)
{
IF ((RFFTmagBuff[I]> maxMagnitude))
{//&&(IOBuffer2[i]< 20)//&& maxMagnitude < 40
maxMagnitude = RFFTmagBuff[i];
peakIndex = i;
}
}
}
频率=(FS * peakIndex)/(FFT_SIZE);
if (maxMagnitude <3)
{
RPM_4WHEEL_Z = 0;
}
否则
{
RPM_4WHEEL_Z = RPM_VALUE (频率、4);
}
if (((RPM_4WHEEL_X!= RPM_4WHEEL_Y)&(RPM_4WHEEL_Y!= RPM_4WHEEL_Z))
{
返回1;
}
else if ((RPM_4WHELE_X!= RPM_4WHEEL_Y)||(RPM_4WHEEL_Y!= RPM_4WHEEL_Z)||(RPM_4WHEEL_X!= RPM_4WHEEL_Y)
{
if ((RPM_4WHELE_X = RPM_4WHEEL_Y))
{
RPM_4WHEEL_Z = RPM_4WHEEL_Y;
}
否则、为((RPM_4WHELE_Z = RPM_4WHEEL_Y))
{
RPM_4WHEEL_X = RPM_4WHEEL_Y;
}
否则、为((RPM_4WHELE_Z = RPM_4WHELE_X))
{
RPM_4WHEEL_Y = RPM_4WHEEL_X;
}
RPM[j]=RPM_4WHELE_Z;//(RPM_4WHELE_X + RPM_4WHEEL_Y + RPM_4WHEEL_Z)/3;
}
否则
{
rpm[j]= RPM_4wel_Z;//(RPM_4wel_X + RPM_4wel_Y + RPM_4wel_Z)/3;
}
if ((j >= 2)&&(RPM [j]- RPM [j-1])> 30)&&(RPM [j]-RPM [j-2])< 20))
{
RPM[j-1]= RPM[j];
}
if ((j<2 &&(RPM[1]- RPM[0])>30)&((RPM[1]- RPM[4])< 20))
{
rpm[0]= rpm[1];
}
J++;
//
如果(j>4){j=0;}
{
UINT16 I=0;
for (I=0;I<5;I++)
{
tempRPM += RPM[i];
}
tempRPM = tempRPM/5;
}
RPM_4wheel =温度 RPM;
maxMagnitude = 0;
//测试结束
//完成();
//执行永远不会达到此点
返回1;
}
问题是、当我启用 RUN_CLA 宏时、它不是计算 FFT、而是在 IOBuffer2和 RFFTmagBuff 上获得空白数据。
我的 CLA 文件如下所示:
__中断无效
Cla1Task1 (空)
{
_mdebugstop();
CLA_CFFT_run256Pt ();
RES =数字/数字;
CLA_CFFT_unpack256Pt ();
}
请告诉我在 CLA 配置或缓冲区内存段分配中有什么操作错误,为什么它不起作用,在这个控制器中是否有任何可用于 CLA FFT 计算的参考。