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.

[参考译文] CCS/TMS320F28335:TMS320F28335

Guru**** 2609685 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/685405/ccs-tms320f28335-tms320f28335

器件型号:TMS320F28335

工具/软件:Code Composer Studio

您好!

我处理了 RFFT 代码。 您能解释一下以下代码是如何颠倒这些位的。。。

我对代码感到困惑。

_rfft_adc_f32_Stages1和2和3以及位反向:
;--------------------------------------------------------------
;保存使用的所有入口保存寄存器
;--------------------------------------------------------------
按 XAR1
按 XAR2
按 XAR3
MOV32 * SP++、R4H
MOV32 * SP++、R5H
MOV32 * SP++、R6H
MOV32 * SP++、R7H
ADDB SP、#14h

MOVL XAR2、*+XAR4[0];&Inbuf
MOVL XAR5、*+XAR4[2];Outbuf
SubB XAR5、#2
MOVL XAR4、XAR5
MOVL XAR5、*+XAR4[2];Outbuf
MOVL XAR3、*+XAR4[2]
ADDB XAR3、#8;Outbuf[4]
MOVL XAR7、*+XAR4[4];&CosSinbuf

MOV AR0、#0Ah
MOV AH、*+XAR4[AR0];FFT 大小
LSR AH、1;FFT SIZE /2 -用于16位输入数据
MOV AR0、AH
; LSR AH,3.
LSR AH,2;用于16位输入数据
SubB AH,#1;(SIZE /8)- 1.
MOVL XAR1、#0000h;如果存储器未对齐则为索引

RPTB _rfft_32_last、AH
;------------------------------------------------------------------
;必须为此代码对齐输入缓冲区
;------------------------------------------------------------------
NOP *、ARP2
MOVI32 R4H、0x39800801
UI16TOF32 R0H、* br0++;I1负载
UI16TOF32 R1H、* br0++;I2负载
MPYF32 R0H、R0H、R4H;I1刻度
UI16TOF32 R2H、* br0++;I3负载
MPYF32 R1H、R1H、R4H;I2刻度
|| MOV32 *-SP[I1]、R0H;I1保存
UI16TOF32 R0H、* br0++;I4负载
MPYF32 R2H、R2H、R4H;I3标度
|| MOV32 *-SP[I2]、R1H;I2保存
UI16TOF32 R1H、* br0++;i5负载
MPYF32 R0H、R0H、R4H;I4刻度
|| MOV32 *-SP[I3]、R2H;I3保存
UI16TOF32 R2H、* br0++;I6负载
MPYF32 R1H、R1H、R4H;I5刻度
|| MOV32 *-SP[I4]、R0H;I4保存
UI16TOF32 R0H、* br0++;i7负载
MPYF32 R2H、R2H、R4H;I6刻度
|| MOV32 *-SP[i5]、R1H;i5保存
UI16TOF32 R1H、* br0++;I8负载
MPYF32 R0H、R0H、R4H;i7刻度
|| MOV32 *-SP[I6]、R2H;I6保存
MPYF32 R1H、R1H、R4H;I8刻度
MOV32 *-SP[i7]、R0H;i7保存
MOV32 *-SP[I8]、R1H;I8保存

Nikhil

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

    您好、Nikhil、

    在您看到*br0++的位置,代码使用位反转间接寻址模式。  C28x CPU 和指令集指南第93页提供了更多信息、如下所示:

    此致、

    Richard

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

    您能不能更关注一下...缩放的工作原理...

    MOVI32 R4H、0x39800801 ;比例因子
    UI16TOF32 R0H、* br0++ ;I1负载
    MPYF32 R0H、R0H、R4H ;I1标度
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Richard、

    我了解了缩放的工作原理...因为它是浮点到十六进制计算、得出1/4095

    您能帮助我进行以下查询吗?
    我修改了代码、以在50Hz 周期内捕获高达1250Hz 的 FFT。 我将采样频率保持在4096Hz 是足够的、或者我需要增加频率来收集2^11、即2048点。


    #include "DSP28x_Project.h"//器件头文件和示例 include 文件
    #include "math.h"
    #include "float.h"
    #include "FPU.h"
    #include "string.h"
    #include "DSP2833x_examples.h"

    #pragma CODE_SECTION (ADC_ISR、"ramfuncs");


    extern void InitFlash (void);

    #define RFFT_STACages 11.
    #define RFFT_SIZE (1 << RFFT_STOPENAINSages)
    #define SCIMAX 6.
    #define ADC_BUF_LEN RFFT_SIZE // ADC 缓冲区长度
    #define ADC_SAMPLE_PERIOD 18310 // 4096Hz 采样 w/75MHz SYSCLKOUT

    #define F_PER_SAMPLE 4096.0L/(float) RFFT_SIZE //内部采样率为4096Hz


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

    你(们)好,Nikhil。

    您能澄清一下"...capture FFT 在 50Hz 周期下高达1250Hz "吗?  您是否说采样间隔超过20ms、并且想要解析高达1250Hz 的频率? 谢谢。

    此致、

    Richard

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

    我的输入信号频率为50Hz。 我的信号的谐波将高达25阶。 即50 x 25 = 1250Hz。
    我正在使用频率为4096Hz 的 ePWM 生成 ADC 中断。

    我想知道、4096 Hz 频率是否足以执行我的工作?
    使用4096 Hz 开关频率为50 Hz 信号收集多少个样本、这是否足够?

    此外、我希望更改代码以检测时变谐波。 您能指导我如何更改代码吗?

    代码位于链接...下drive.google.com/.../1Yf3vnONBwRBQyvimELnMOQfOptgM6Bp5
    还可以帮助我将代码加载到闪存中。。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Richard、

    我的输入信号频率为50Hz。 我的信号的谐波将高达25阶。 即50 x 25 = 1250Hz。
    我正在使用频率为4096Hz 的 ePWM 生成 ADC 中断。

    我想知道、4096 Hz 频率是否足以执行我的工作?
    使用4096 Hz 开关频率为50 Hz 信号收集多少个样本、这是否足够?

    此外、我希望更改代码以检测时变谐波。 您能指导我如何更改代码吗?

    代码位于链接...下

    drive.google.com/open

    还可以帮助我将代码加载到闪存中。。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nikhil、

    RFFT 将提供实数组和复数组、每个数组的长度为 N/2点(N 是 FFT 大小)。 这些数组可捕获0 Hz 至一半采样率(本例中为2048 Hz)之间的等间隔频率、因此、原则上您应该能够使用现有的采样率来捕获1250 Hz。 不过,我仍不关注你对2^11分的评论。 FFT 中的点数将影响频率数组的分辨率、而不是您可以检测到的最大频率。

    很遗憾、TI 防火墙阻止了 Google Drive、因此我无法看到代码、但请记住、论坛将在此处提供特定问题的答案。

    您能否为闪存问题打开一个单独的帖子、因为其他人可能会选择该帖子。 如果您尚未看到该应用手册、您可能会发现该应用手册很有用:
    http://www.ti.com/lit/an/spra958l/spra958l.pdf

    此致、

    Richard

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

    如果我错了、请更正我... 我想用2 ^ 11分来覆盖1250 Hz 信号。 如果不是,那么我需要为 RFFT 阶段进行多少设置...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nikhil、

    没关系。

    此致、

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

    感谢您的快速回复。。

    稳态谐波的 FFT 工作正常。
    现在我想尝试一下滑动窗口递归 DFT…

    SWR DFT 是否有任何可用的示例代码?

    如果是、请为我提供相关指导

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

    抱歉、我认为我们没有任何此类示例代码。

    此致、

    Richard