This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F2.8377万D:关于FPU库

Guru**** 2578945 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/639620/tms320f28377d-regarding-fpu-library

部件号:TMS320F2.8377万D

我们一直在 使用TI的FPU库"C28x_FPU_DSP_library" 1.5 on TMS320F2.8377万 DSP。

下面是与“CFFT_F32”函数相关的库用户指南图片。

突出显示的注释是什么意思?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    注释意味着该函数必须在被再次调用之前完成。 例如,不能在函数完成之前中断该函数,再次调用该函数,然后返回到第一个调用。 在这种情况下,第一个调用使用的变量将被第二个调用更改。

    此致,

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。
    执行此“CFFT_F32”函数时,如果调用其它中断(计时器,sci,SPI等),在完成之前,它是否会影响“CFFT_F32”函数的输出?

    此致,
    Shashank.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    仅当它们调用CFFT_F32函数或修改它使用的任何全局变量时。  否则就不会有问题。

    此致,

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    全局变量是什么意思?

    据我所知,这些变量如下所示。

    typedef struct
    {
    	float32 *InPtr;								//!<指向输入缓冲
    	区float32 *OutPtr;							//!<指向输出缓冲
    	区float32 *CoefPtr;							//!<指向twiddle因子
    	float32 *CurrentInPtr;						//!<指向每个FFT阶段
    	float32 *OutPtr; 						//!<指向每个FFT阶段
    	的输出缓冲区uint16_t阶段;							//!< FFT阶段数
    	uint16_t FFTSize;							//!< FFT大小(复杂数据点数)
    } CFFT_F32_fut;
    
    
    float32 CFFT_futft1Bufft[CFFT_futft_ft_fut32_fft_futft_futft_ft_futft_ft_f3ft_ft_ft_ft_futf3ft_f32_ft_futft_ft_futft_ft_futft_ft_f3f3ft_ft_ft_ftft_ftft_ftf
    
    
    
    
    

    CFFT_F32函数是否使用了任何其他全局变量?

    我们正面临一个问题。 您可以参考此线程以供参考

    e2e.ti.com/.../63.866万

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在这种情况下,全局变量是“CFFT”。 CFFT_F23()的参数是指向该结构的指针,我可以从汇编代码中看到正在修改结构元素(如输入和输出缓冲区指针)。 这个代码的作者我不再是这个团体,但在我看来,这是你在这个线程中第一次提出限制的原因。 只要您的其他ISR不修改此结构,它们就应该能够中断CFFT_F23而不会导致任何问题。 这同样适用于您在其他帖子中提到的ICFFT_F32。

    我可以看到有人被分配到您的另一个岗位,应该很快就会回复。

    此致,

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。
    作为CFFT_F32()函数的输入提供的结构在任何中断中都不会修改,但函数的输出仍然会受到影响。 如果我们禁用"Timer0"中断(中断组1),则不会发现任何问题。
    如果启用"Timer0"中断(中断组1),其ISR只有中断组确认(没有执行其他代码),那么我们在CFFT_F32()函数输出中会遇到同样的问题。

    此致,
    Shashank.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这更像是CPU带宽问题。 您是否测量了FFT中断的时间(周期计数和频率)? 值得检查。 最佳方法是在进入时将I/O引脚设置为高,在退出时将其设置为低,然后在示波器上实际测量正时。

    此外,该中断是否可以嵌套,它是否与任何其他活动中断位于同一个饼图组中?

    此致,

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    实际上,CFFT_F32() 函数不是基于中断调用的,而是每隔20mSec在后台进行调用。

    CFFT_F32() 函数执行时间:

    禁用所有中断时为180 usec。

    324 usec,仅禁用timer0 (启用中断组1)。

    我们执行了三种不同的测试逻辑,如下所示:

    测试1:

    我们一直启用timer0中断,没有在ISR中写入代码,如下所示:

    GpioDataRegs.GPESET.BIT.GPIO133 = 1;
    
    CpuTimer0Regs.TCR.Bit.TIF = 1;		
    PieCtrlRegs.PIEACK/bit.ACK1 = 1;
    
    //Timer0_ISR_ROUT();
    
    GpioDataRegs.GPECLEAR.Bit.GPIO133 = 1; 

    但问题仍然存在。

    测试2:

    我们在调用 CFFT_F32()函数之前,通过保持中断group1启用,但禁用timer0中断进行了测试,如下所示。

    CpuTimer0Regs.tcr.bit.tie =0;					//定时器中断禁用。
    GpioDataRegs.GPBSET.Bit.GPIO45 = 1;
    
    HND_CFFT->InPtr = CFFTin1Buff;
    HND_CFFT->OutPtr = CFFToutBuff;
    CFFT_F32 (HND_CFFT);
    
    GpioDataRegs.GPBCLEAR.Bit.GPIO45 = 1;
    CpuTimer0Regs.tcr.bit.tie = 1; 

    此后,我们未发现问题发生。

    测试3:

    然后,我们禁用了timer0中断和它的时钟,并将EPWM10_INT_ISR(group 3)用于我们的200 usec中断,如下所示:

    UINT16 Prev_IER = IER;
    
    GpioDataRegs.GPETOGLE.bit.GPIO133 = 1;
    
    //Timer0_ISR_rout ();
    
    EPwm10Regs.ETCLR.bit.INT = 1;
    PieCtrlRegs.PIEACK/bit.ACK3 = 1;
    
    Prev_IER |= IER_Group3;
    IER = Prev_IER; 

    但问题仍然存在。

    这个问题已经耗费了很多时间,而且非常紧迫,因此请尽快提供指导。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    如果可能,您可以向我发送您的项目的精简版本,仅包括FFT和计时器ISR,但如果可能,还可以分配相同的内存,以便我可以在此处复制并查看该程序集?

    您还可以尝试将FFT缓冲区放置在较低的64Kw RAM空间中,然后再次运行代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复。

    您可以参考附加代码CPU-1和CPU-2。 我们在CFFT_F32函数的输出中遇到了问题。

    在定期调用CFFT_F32函数时,大多数时间它给出给定的第5次和第7次谐波顺序的正确数量。

    但在某些随机情况下,它给出了错误的第五和第七级。

    您可以在"C1_N_FFT.c"文件的DO _CFFT()函数中观察到它,如下所示。

    //注:
    //根据虚拟数据x24.IH_5_LOAD应为2358.74 ,
    // x24.IH_7_load应为1710.125。
    
    IF (FFT.ph_fftcalc ==&FFT.r)
    {
    	x24.IH_5_LOAD = MAG_BUF[5];
    	x24.IH_7_LOAD = AGG_GOV5.1= 2300.0
    
    	<1.BIF;}{gpi_gf+2.24_gf_gf.gf.gf_gf.24
    	
    		
    		
    	
    

    e2e.ti.com/.../AHF_5F00_3800_5F00_DUAL_5F00_CPU.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Shashank,

    我运行了您的代码,但在错误块中执行不会停止(用于第5和第7 bin)

    AMTECH 说:
    IF (x24.IH_5_LOAD < 2300.0){ x24.error++;GpioDataRegs.GPBTOGLE.bit.GPIO55 = 1;}

    我在IFFT中也看不到问题,我没有发现死角,这里是我的CCS的快照

    我只运行1个内核。 您能否关闭第二个内核并再次尝试运行它以查看问题是否仍然存在。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还尝试了双CPU模式,我在IFFT输出中没有发现任何死机时间。 我在IFFT之后设置了一个断点,这样它在每次运行时都会停止,这样我就可以看到图表了。

    此外,在错误块中执行不会停止(第5和第7 bin问题)。

    我使用的是CGT 16.9 .6.LTS,您是否可以尝试使用最新的代码生成,看看问题是否仍然存在。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。
    很抱歉,我因休假而迟到了回复。
    我们使用的是C2000 CGT 6.4。10。 我们在与您共享的代码中遇到了问题。
    您是否连续检查了3-4小时? 因为我们不会不断地遇到问题。
    我们将使用C2000 CGT 16.9 .6.LTS进行检查。 您可以使用C2000 CGT 6.4 .10检查它吗?
    此致,
    Shashank
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们已经检查了通过“C2000 CGT 16.9 .6.LTS”与您共享的代码,我们没有遇到任何问题。

    “C2000 CGT 16.9 .6.LTS”和“C2000 CGT 6.4 .10”版本有何区别?

    是不是因为我们在库的文档中没有找到任何这样的注释,所以这个库"C28x_FPU_DSP_library" 1.5 没有得到诸如"C2000 CGT 6.4 .10"这样的旧版本的正确支持。

    您是否可以使用版本“C2000 _CGT 6.4 .10”检查代码?


    此致,

    Shashank.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有关于此问题的任何更新?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shashank,

    在库的1.5 版用户指南中有一条说明,它需要Cv.GT 6.4 .4或更高版本,因此它应该可以在6.4 .10上运行而不会出现问题。 该库尚未使用更高版本的工具进行重新测试,但是一个错误修复程序可能生成了一个未见的问题,该问题随后在更高版本的CGT中得到了修复。

    在编译器版本6.4 .................................................................10和16.9 .0.LTS之间,已经修复了14个主要错误和一个关键错误。 没有专门关于DSP库的报告,因此我很遗憾,我无法说明您看到的错误是哪个报告导致的。 我认为在现阶段最好的办法就是更新到最新的工具。

    此致,

    Richard