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.

5517执行fft后的结果总是全0

Other Parts Discussed in Thread: TMS320C5517

你好!

我用TMS320C5517做一个项目,使用它的hwafft功能。

为何我调用hwafft_1024pts函数做fft运算之后,scratch_data中的结果总是全0啊?

查了很多资料,貌似都不管用。

以下是执行fft运算的代码:

#pragma DATA_SECTION(src_data, ".src_buf")
volatile COMPLEX_T src_data[1024];
#pragma DATA_SECTION(br_data, ".br_buf")
volatile COMPLEX_T br_data[1024];
#pragma DATA_SECTION(scratch_data, ".scratch_buf")
volatile COMPLEX_T scratch_data[1024];
.....

 /* Bit-Reverse 1024-point data, Store into data_br, data_br aligned to 12-least significant binary zeros*/
hwafft_br((Int32*) src_data, (Int32*) br_data, DATA_LEN_1024); /* bit-reverse input data, Destination buffer aligned */

data_sel = hwafft_1024pts((Int32*)br_data, (Int32*)scratch_data, FFT_FLAG, SCALE_FLAG);

if (OUT_SEL_DATA == data_sel) {
         fftResult = (COMPLEX_T *) &br_data[0];
}else {
         fftResult = (COMPLEX_T *) &scratch_data[0];
}

三个缓冲区:src_data、br_data、scratch_data的定义与地址分配如下。

这是CMD文件中的片段:

 PAGE 0:  /* ---- Unified Program/Data Address Space ---- */
  MMR    (RWIX): origin = 0x000000, length = 0x0000c0  /* MMRs */
  DARAM0 (RWIX): origin = 0x0000c0, length = 0x007f40  /*  32KB - MMRs */
  DARAM1 (RWIX)  : origin = 0008000h length = 002000h /* on-chip DARAM 1 */
  DARAM2 (RWIX)  : origin = 000a000h length = 002000h /* on-chip DARAM 2 */
  DARAM3 (RWIX)  : origin = 000c000h length = 002000h /* on-chip DARAM 3 */
  DARAM4 (RWIX)  : origin = 000e000h length = 002000h /* on-chip DARAM 4 */

....

  .src_buf          >   DARAM2
  .br_buf           >   DARAM3          /* output data of bit reverse  */
  .scratch_buf   >   DARAM4          /* output data of scratch      */

结构体COMPLEX的定义如下:

typedef struct COMPLEX_T{
    Int16 imag;
    Int16 real;
}COMPLEX_T, *pCOMPLEX_T;
我求助的问题是:
1,为什么hwafft_1024pts函数没有任何作用,调用之后scratch_data中的数据总是全0?
2,文档中fft的缓冲区是Int32向量,我把每一个Int32它定义成一个复数的结构体,这样定义是否正确?结构体中,应该是实部(real)在前还是虚部在前?或者跟顺序没有关系?
以上问题,希望能得到解答。 谢谢!
  • 你应该看到是fftResult的内容,fftResult也是全为0吗?

  • 是的,fftResult里面全是0。

    hwafft_1024pts的返回值总是等于1(OUT_SEL_SCRATCH),即fft结果应该在scratch_data中,然而scratch_data里面全0。

    c5517的Silicon Errate看过了,该注意的地方都检查核对过了,结果还是全0。

    求助!SOS、SOOOS!!!

  • 而且我还试过了不用ROM里的hwafft函数,用TI发布的workaround代替(见附件)。

    就是这个hwafft.asm

    *******************************************************************************
    *
    *       File name    : hwafft.asm
    *       Description  : Contains FFT/IFFT routines for HWA FFT.
    *       Author       : Frank Livingston
    *       Date         : 2/1/2008
    *
    *******************************************************************************
    *       Changelog:
    *   2012-08-14: Replaced 16-bit AR register copies with 23-bit XAR register copies to allow allocation of data & scratch buffers anywhere in memory
    *******************************************************************************

    ......

    其结果还是一样,fft出来的数据全为0。

    我使用的开发环境如下:

    Win10 64位;CCS 7.1.0.00016;

    芯片是TMS320C5517AZCHA20,板子是我们自己设计的,其他功能都正常,就是关键的fft功能不正常。

    hwafft_workaround.zip
  • 另外,相同的代码,一个字不改,用5517 EVM板子跑,fft的结果就不是0。

    用我们自己做的板子,fft的结果就全是0。但我们设计的板子除了fft其他都没有问题,所有用到的外设都能调通一切正常,偏偏hwafft这个不正常。

    这到底是什么原因?难道5517执行hwafft时对板子硬件有特殊要求么?

    急需帮助!!!

  • 没人能够回答么:为什么5517跑fft之后结果总是全0???

    谁能给我一个标准的、简单的、纯粹的(无CSL或DSPBIOS),能在5517上只跑hwafft的例子?

    hwafft应该是5517最核心的功能吧,怎么会有这种稀奇古怪的问题????

  • 这个是 C5515,你试试看

  • 我想问一下,这个问题解决了吗?如果解决了,能知道是什么原因吗?谢谢!

    TMS320C5517 Fixed-Point Digital Signal Processor Silicon Revision 1.0, 2.0, and 2.1 Silicon Errata这个手册中有这个描述,也不知道是什么意思,不知你有没有尝试过。