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/MSP432P401R:如何使用 MSP432P401R Launchpad 获取给定输入的确切 FFT?

Guru**** 2618835 points

Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/668679/ccs-msp432p401r-how-to-get-exact-fft-of-a-given-input-using-msp432p401r-launchpad

器件型号:MSP432P401R

工具/软件:Code Composer Studio

您好!

我正在使用 MSP432P401R Launchpad 并使用示例代码"boostxl_eduki_microphonefft_msp432p401r"。 我正在尝试查看函数发生器中60Hz 正弦输入的 FFT。 我将函数发生器的正极端子与 launchpad 的引脚"P4.3"相连、将负极端子与 launchpad 的"GND"引脚相连。 在 CCS 中调试代码后、我可以在 CCS 图形选项中看到60 Hz 的一些谐波。 但它应该仅是60Hz 信号。 我将输入信号输入到 Launchpad 的连接是否有任何问题?

Mohammad Arifur Rahman   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    穆罕默德
    请确保信号处于器件的工作条件和所使用的基准范围内。 函数发生器需要50欧姆负载还是高阻抗? 函数发生器应具有相对较低的阻抗(源阻抗)、但如果它不是、或者如果您在它和 MSP432之间有一个电阻分压器、则可能需要考虑增加 ADC 上的采样保持时间。 您看到的频率是多少?

    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "我可以看到60 Hz 的一些谐波"

    除非您拥有完美的正弦信号、完美且连续的 ADC、用于保存从-无穷 大到+无穷 大的数据的完美数据格式、用于无限数据的完美算法以及完美的显示、否则这就是我们的预期。。。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chris:

    感谢您的回复。  

    函数发生器需要50欧姆负载。 我从函数发生器到 MSP432的连接是否正常?  

    Mohammad Arifur Rahman

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADC 输入不提供50欧姆的终端、可能会解释您在频域中看到的一些失真。 您能否将示波器(high-z)连接到 ADC 的输入并确认输入电压。 具体而言、您看到的信号摆幅是~2倍吗?

    谢谢、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    您是说 ADC 输入作为我从函数发生器获取的信号吗? 我在示波器(Tektronix DPO 2024)中检查了它。 它显示了纯正弦60Hz 信号、峰间电压为1V

    Mohammad Arifur Rahman
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它是电容耦合还是在 siggen 上存在偏移? 您可能会在 ADC 处削波低端。 如果是电容耦合、则需要某种方法将输入偏置到范围的中间)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Keith、
    函数发生器上没有偏移。 在连接 MSP432P401R 引脚4.3和 GND 之间的信号之前、是否必须使用任何电路?

    Mohammad Arifur Rahman
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、因为 ADC 无法处理负电压。 引脚需要在0和基准电压之间看到峰峰值摆幅。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Keith、
    感谢您的建议。 这次、我对1V PP 信号使用了0.5V 偏移、在 CCS 的图形选项中只能看到一个峰值。 但我还有另一个问题。 由于我在示例代码"boostxl_edumki_microphonefft_msp432p401r"中使用1024Hz 采样频率、因此峰值位于"data_output[30]"、这是幅度缓冲器。 我需要在哪里更改代码、以便能够看到"data_output[60]"处的峰值、因为我的输入信号是60Hz 正弦波?

    Mohammad Arifur Rahman
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要调整一些内容、以便频率窗口的间隔为1Hz。

    您必须将采样频率减半或 FFT 点加倍。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Keith、

    再次感谢您的建议。

    为了使频率单元间隔为1Hz、我对下面给出的示例代码进行了一些更改。

    test_length_samples 1024

    SAMPLE_LENGTH 1024

    SAMPLE_FREQUENCY 1024

    但我有一个问题。 当我尝试使用60Hz 正弦输入时、我得到"data_output[60]"处的峰值。 但 "data_output[59]"的值接近于 "data_output[60]"。 为了消除我的困惑、我使用了一个60 Hz 方波。 尽管 "data_output[60]"值高于 "data_output[59]"、但我在"data_output[179]"获取其他峰值、该峰值应在"data_output[180]"和"data_output[300]"找到。

    然后、我再次使用频率为120Hz 的正弦输入。 但我得到的峰值为 "data_output[119]"。

    如何在确切位置获得峰值?

    Mohammad Arifur Rahman

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

    您可能会发现、对 FFT 背后的数学和直觉有一些基本的了解会有所帮助。 本质上、在本例中、您将求解1024个变量。 因此、您需要超过1024次观察/样本才能获得良好的结果、尤其是在有噪声的样本中。

    简单地说、只有在您具有完美的信号(无噪声、完全正弦和连续采样)、完美的数学(非离散/连续、无损耗算法)、...时、您才可以尝试执行的操作 这些条件在现实世界中永远不存在,显然不在这项努力的范围内。

    因此、您最好将注意力集中在项目可以实际实现的目标上、而不是永远无法实现的"现实中的目标"。

    祝你好运。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    穆罕默德
    只需了解如何生成1024采样频率以及是否可以将 ADC 触发器输出到端口、以便您可以确认频率。

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

    尊敬的 Chris:

    感谢您的回复。 下面给出了我使用的代码。 在代码中、FFT 大小和采样频率均设置为1024。 在使用 MSP432P401R 之前、我在 TMS320F28379D 中执行了 RFFT、其中 FFT 大小和采样频率均设置为2048。 在这种情况下,分辨率为1Hz /二进制,我可以看到峰值恰好在60、180、300……位置上,幅值缓冲器有来自同一信号发生器的60Hz 方波信号。 但当我尝试在 MSP432P401R 中执行相同的操作时、我发现在 FFT 大小和采样频率均设置为2048的情况下、峰值 为30、60。  具有 相同60Hz 方波信号的 DATA_OUTPUT 缓冲器的位置。 然后、我在代码中将 FFT 大小和采样频率都更改为1024、我发现第59和60个峰值非常接近、60和60的峰值更高。 其他峰值位于 DATA_OUTPUT  缓冲器的第179个和第298个位置。 我使用的是 MSP432P401R 而不是 TMS320F28379D、因为 MSP432P401R 是 chepaer。

    Mohammad Arifur Rahman

    #include
    #include
    #include
    #include "LcdDriver/Crystalfontz128x128_ST7735.h"
    #include
    #include
    #include

    #define TEST_LENGTH_SAples 1024
    #define SAMPLE_LENGTH 1024

    /*--------------------------------------
    * FFT Bin 示例的全局变量
    ************************************************************************************************** *
    uint32_t fftSize = sample_length;
    uint32_t ifftFlag = 0;
    uint32_t doBitReverse = 1;
    易失性 ARM_STATUS 状态;

    /*图形库上下文*/
    graphics_context g_sContext;

    #define SMCLK_FREQUENCY 48000000
    #define SAMPLE_FREQUENCY 1024

    /* DMA 控制表*/
    #if defined (__TI_Compiler_version__)
    #pragma DATA_ALIGN (MSP_EXP432P401RLP_DMAControlTable、2048)
    #Elif defined (_IAR_systems_icc_)
    #pragma DATA_alignment=2048
    #Elif defined (_GNU_)
    __attribute__((对齐(2048)))
    #Elif defined (_CC_ARM)
    _align (2048)
    #endif
    静态 DMA_ControlTable MSP_EXP432P401RLP_DMAControlTable[32];

    /* FFT 数据/处理缓冲区*/
    float Hann[sample_length];
    int16_t DATA_array1[sample_length];
    int16_t DATA_array2[sample_length];
    int16_t DATA_INPUT[SAMPLE_LENGTH * 2];
    int16_t data_output[sample_length];

    volatile int switch_data = 0;

    uint32_t color = 0;

    /* Timer_A PWM 配置参数*/
    Timer_A_PWMConfig pwmConfig =

    Timer_A_CLOCKSOURCE_SMCLK、
    Timer_A_CLOCKSOURCE_divider _1、
    (SMCLK_FREQUENCY / SAMPLE_FREQUENCY)、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    Timer_A_OUTPUTMODE_SET_RESET、
    (SMCLK_FREQUENCY / SAMPLE_FREQUENCY)/ 2.
    };

    int main (空)

    /*停止 WDT 并禁用主中断*/
    MAP_WDT_A_HOLDTimer();
    MAP_Interrupt_disableMaster();

    /*将内核电压电平设置为 VCORE1 */
    MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);

    //为闪存组0和1*/设置2个闪存等待状态
    MAP_FlashCtl_setWaitState (FLASH_BANK0、2);
    MAP_FlashCtl_setWaitState (FLASH_BANK1、2);

    /*初始化时钟系统*/
    MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48);
    MAP_CS_initClockSignal (CS_MCLK、CS_DCOCLK_SELECT、CS_CLOCK_DIVIDER_1);
    MAP_CS_initClockSignal (CS_HSMCLK、CS_DCOCLK_SELECT、CS_CLOCK_DIVIDER_1);
    MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_CLOCK_DIVIDER_1);
    MAP_CS_initClockSignal (CS_ACLK、CS_REFOCLK_SELECT、CS_CLOCK_DELUGER_1);

    /*初始化显示*///可选
    Crystalfontz128x128_Init();

    /*设置默认屏幕方向*///可选
    Crystalfontz128x128_SetOrientation (LCD_orientation_up);

    /*初始化图形上下文*////可选
    graphics_initContext (&g_sContext、&g_sCrystalfontz128x128、
    &g_sCrystalfontz128x128_funcs);

    /*绘制标题、x 轴、渐变和标签*///可选
    graphics_setForegroundColor (&g_sContext、graphics_color_black);
    graphics_setBackgroundColor (&g_sContext、graphics_color_white);
    GrContextFontSet (&g_sContext、&g_sFontFixed6x8);
    graphics_clearDisplay (&g_sContext);
    graphics_drawLineH (&g_sContext、0、127、115);
    graphics_drawLineV (&g_sContext、0、115、117);
    graphics_drawLineV (&g_sContext、16、115、116);
    graphics_drawLineV (&g_sContext、31、115、117);
    graphics_drawLineV (&g_sContext、32、115、117);
    graphics_drawLineV (&g_sContext、48、115、116);
    graphics_drawLineV (&g_sContext、63、115、117);
    graphics_drawLineV (&g_sContext、64、115、117);
    graphics_drawLineV (&g_sContext、80、115、116);
    graphics_drawLineV (&g_sContext、95、115、117);
    graphics_drawLineV (&g_sContext、96、115、117);
    graphics_drawLineV (&g_sContext、112、115、116);
    graphics_drawLineV (&g_sContext、127、115、117);

    GRAPHICS_drawStringCenter(&g_sContext,
    (INT8_t *)"512点 FFT"、
    AUTO_STRING_LENGTH、
    64、
    6、
    不透明文本);
    GRAPHICS_drawStringCenter(&g_sContext,
    (INT8_t *)"0"、
    AUTO_STRING_LENGTH、
    4、
    122、
    不透明文本);
    GRAPHICS_drawStringCenter(&g_sContext,
    (INT8_t *)"1"、
    AUTO_STRING_LENGTH、
    32、
    122、
    不透明文本);
    GRAPHICS_drawStringCenter(&g_sContext,
    (INT8_t *)"2"、
    AUTO_STRING_LENGTH、
    64、
    122、
    不透明文本);
    GRAPHICS_drawStringCenter(&g_sContext,
    (INT8_t *)"3"、
    AUTO_STRING_LENGTH、
    96、
    122、
    不透明文本);
    GRAPHICS_drawStringCenter(&g_sContext,
    (INT8_t *)"4"、
    AUTO_STRING_LENGTH、
    125、
    122、
    不透明文本);
    graphics_setForegroundColor (&g_sContext、graphics_color_red);
    GRAPHICS_drawStringCenter(&g_sContext,
    (INT8_t *)"kHz"、
    AUTO_STRING_LENGTH、
    112、
    122、
    不透明文本);

    //初始化 Hann 窗口
    int n;
    对于(n = 0;n < sample_length;n++)

    Hann[n]= 0.5 - 0.5 * cosf ((2 * pi * n)/(sample_length - 1));

    /*将 Timer_A 配置为具有大约500ms 的周期和
    *初始占空比为其10%(3200个节拍)*/
    Timer_A_generatePWM (timer_A0_BASE、&pwmConfig);

    /*初始化 ADC (MCLK/1/1)*/
    ADC14_enableModule();
    ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_1、ADC_DIVIDER_1、0);//0

    ADC14_setSampleHoldTrigger (ADC_TRIGGER_SOURCE1、false);

    /*配置 GPIO (4.3 A10)*/
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、GPIO_PIN3、
    GPIO_TICE_MODULE_FUNCTION);

    /*配置 ADC 内存*/
    ADC14_configureSingleSampleMode (ADC_MEM0、TRUE);
    ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_AVCC_VREFNEG_VSS、
    ADC_INPUT_A10、false);

    /*将 ADC 结果格式设置为带符号的二进制数*/
    ADC14_setResultFormat (ADC_signed_binary);

    /*配置 DMA 模块*/
    DMA_enableModule();
    DMA_setControlBase (MSP_EXP432P401RLP_DMAControlTable);

    DMA_disableChannelAttribute (DMA_CH7_ADC14、
    UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
    UDMA_ATTR_HIGH_PRIOR|
    UDMA_ATTR_REQMASK);

    /*设置控制索引。 在本例中、我们将设置的源
    * DMA 传输到 ADC14存储器0
    *和目标到
    *目的数据数组。 *
    MAP_DMA_setChannelControl (
    UDMA_PRI_SELECT | DMA_CH7_ADC14、
    UDMA_SIZE_16 | UDMA_SRC_INC_NONE |
    UDMA_DST_INC_16 | UDMA_ARB_1);
    MAP_DMA_setChannelTransfer (UDMA_PRI_SELECT | DMA_CH7_ADC14、
    UDMA_MODE_pingpong、(void*)&ADC14->MEM[0]、
    data_array1、sample_length);

    MAP_DMA_setChannelControl (
    UDMA_ALT_SELECT | DMA_CH7_ADC14、
    UDMA_SIZE_16 | UDMA_SRC_INC_NONE |
    UDMA_DST_INC_16 | UDMA_ARB_1);
    MAP_DMA_setChannelTransfer (UDMA_ALT_SELECT | DMA_CH7_ADC14、
    UDMA_MODE_pingpong、(void*)&ADC14->MEM[0]、
    data_array2、sample_length);

    /*分配/启用中断*/
    MAP_DMA_赋 值中断(DMA_INT1、7);
    MAP_Interrupt_enableInterrupt (INT_DMA_INT1);
    MAP_DMA_赋 值通道(DMA_CH7_ADC14);
    MAP_DMA_clearInterruptFlag (7);
    MAP_Interrupt_enableMaster();

    /*现在 DMA 已启动并已设置,从而启用通道。 ADC14
    *硬件应接管并传输/接收所有字节*/
    MAP_DMA_enableChannel (7);
    MAP_ADC14_enableConversion();

    while (1)

    MAP_PCM_gotoLPM0 ();

    int i = 0;

    /*使用完整数据缓冲区的计算机实数 FFT */
    if (switch_data 和1)

    对于(i = 0;i < sample_length;i++)//512

    DATA_array1[i]=(int16_t)(Hann[i]* data_array1[i]);

    arm_rfft_instance_q15实例;
    状态= arm_rfft_init_Q15 (&instance、fftSize、ifftFlag、
    doBitReverse);

    arm_rfft_q15 (&instance、data_array1、data_input);

    其他

    对于(i = 0;i < sample_length;i++)//512

    DATA_array2[i]=(int16_t)(Hann[i]* data_array2[i]);

    arm_rfft_instance_q15实例;
    状态= arm_rfft_init_Q15 (&instance、fftSize、ifftFlag、
    doBitReverse);

    arm_rfft_q15 (&instance、data_array2、data_input);

    /*计算 FFT 复数输出的幅度*/
    对于(i = 0;i <(2*SAMPLE_LENGTH);i += 2)//1024

    DATA_OUTPUT [I /
    2]=
    (int32_t)(sqrtf (data_input[i]*
    DATA_INPUT[i])+
    (DATA_INPUT[I + 1]* DATA_INPUT[I + 1])));//Int32_t

    Q15_t maxValue;
    uint32_t maxIndex = 0;

    arm_max_q15 (data_output、fftSize、&maxValue、&maxIndex);

    if (maxIndex <= 64)

    颜色=(((uint32_t)(0xFF *(maxIndex / 64.0f))<< 8)+ 0xFF;

    否则 if (maxIndex <= 128)

    颜色=
    (0xFF -(uint32_t)(0xFF *((maxIndex - 64)/ 64.0f)))+ 0xFF00;

    否则 if (maxIndex <= 192)

    颜色=
    (((uint32_t)(0xFF *((maxIndex - 128)/ 64.0f))<< 16)+ 0xFF00;

    其他

    颜色=
    ((0xFF -
    (uint32_t)(0xFF *
    ((maxIndex - 192)/ 64.0f))<< 8)+ 0x0000;

    /*绘制频率 bin 图*/
    对于(I = 0;I < 256;I += 2)

    int x = min (100、(int)(data_output[i]+ data_output[i + 1])/ 8);

    graphics_setForegroundColor (&g_sContext、graphics_color_white);
    graphics_drawLineV (&g_sContext、I / 2、114 - x、14);
    graphics_setForegroundColor (&g_sContext、color);
    graphics_drawLineV (&g_sContext、I / 2、114、114 - x);


    ADC14 MEM0的/*完成中断*
    空 DMA_INT1_IRQHandler (空)

    /*使用 DMA 的交替模式在主缓冲器和备用缓冲器之间切换*/
    if (dma_getChannelAttribute (7)& Udma_attr_ALTSELECT)

    DMA_setChannelControl (
    UDMA_PRI_SELECT | DMA_CH7_ADC14、
    UDMA_SIZE_16 | UDMA_SRC_INC_NONE |
    UDMA_DST_INC_16 | UDMA_ARB_1);
    DMA_setChannelTransfer (UDMA_PRI_SELECT | DMA_CH7_ADC14、
    UDMA_MODE_pingpong、(void*)&ADC14->MEM[0]、
    data_array1、sample_length);
    switch_data = 1;

    其他

    DMA_setChannelControl (
    UDMA_ALT_SELECT | DMA_CH7_ADC14、
    UDMA_SIZE_16 | UDMA_SRC_INC_NONE |
    UDMA_DST_INC_16 | UDMA_ARB_1);
    DMA_setChannelTransfer (UDMA_ALT_SELECT | DMA_CH7_ADC14、
    UDMA_MODE_pingpong、(void*)&ADC14->MEM[0]、
    data_array2、sample_length);
    switch_data = 0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的澄清。 几种可能的误差来源。
    (1) DCO 有一些差异。 如果您使用的是 launchpad、则可使用 HFXT、48Mhz 晶振、且其精度更高。
    (2)从技术上讲、外设不支持任何高于24MHz 的频率(除了支持25MHz 的 ADC)。
    (3)定时器周期为 CCR0+1、因为需要额外的周期从 CCR0 "翻转"到"0"。 在您的定义中、您将使用(SMCLK_FREQUENCY / SAMPLE_FREQUENCY)- 1。

    希望这有所帮助、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    感谢您的建议。 我正在使用 LaunchPad。 我使用了"((SMCLK_FREQUENCY / SAMPLE_FREQUENCY)- 1)"、但结果仍然与之前相同。

    Mohammad Arifur Rahman
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的尝试。 此外、我没有提到大小大于1024时的情况、由于 DMA 仅支持1024个传输、因此需要重新编写代码。 示例的当前写入方式只能查看主副本、其中的任何一个只能是1024个传输。

    此致、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用仿真(也称为计算)样本来调试 FFT 重新路由更容易、正如您确切知道的预期值一样。 样本可能会被已知噪声污染、以测试代码的稳健性。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    感谢您的回复。 这意味着我不能使用相同的 DMA 代码来执行大小为1024的 FFT?
    但我尝试 FFT 大小为512且采样频率为512,"data_array1"和"data_array2"中的所有 ADC 结果值都为零。

    Mohammad Arifur Rahman
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    穆罕默德
    不可以、DMA 限制为1024、因此您可以在本示例中使用大小为1024或更小的样本。 对于采样频率、您可以在计时器触发器中看到以下计算结果;(SMCLK_FREQUENCY / SAMPLE_FREQUENCY)、该计算值加载到16位寄存器 CCR0中。 您可以拥有的最小频率为733。

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

    尊敬的 Chris:

    感谢您的回复。 对于 Timer_A PWM 配置、"TIMER_A_CLOCKSOURCE_SMCLK"已设置为512。 我是否需要更改它、因为我使用的是1024采样频率和1024 FFT 大小?

    此致

    Mohammad Arifur Rahman

    /* Timer_A PWM 配置参数*/
    Timer_A_PWMConfig pwmConfig =

    Timer_A_CLOCKSOURCE_SMCLK
    Timer_A_CLOCKSOURCE_divider _1、
    (SMCLK_FREQUENCY / SAMPLE_FREQUENCY)、
    Timer_A_CAPTURECOMPARE 寄存器_1、
    Timer_A_OUTPUTMODE_SET_RESET、
    (SMCLK_FREQUENCY / SAMPLE_FREQUENCY)/ 2.
    };

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

    //
    //
    //以下是可以传递给 clockSource 参数的值
    //
    //
    #define TIMER_A_CLOCKSOURCE_EXTERNAL_TXCLK Timer_A_CTL_ssel_TACLK
    #define TIMER_A_CLOCKSOURCE_ACLK Timer_A_CTL_ssel_ACLK
    #define TIMER_A_CLOCKSOURCE_SMCLK Timer_A_CTL_ssel_SMCLK
    #define TIMER_A_CLOCKSOURCE_INTURE_EXTERNAL_TXCLK Timer_A_CTL_ssel_INCLK
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Chris:

    感谢您的回复。 更改代码中的"SMCLK_FREQUENCY "是否合乎逻辑? 我将其更改为48.3MHz、使用该频率时结果似乎很好。 在本例中,我得到的峰值恰好是60、180、300、420… 使用60Hz 方波信号的"data_output"缓冲器的位置。  我还尝试了不同频率的方波信号、它们看起来是一致的。 频率设置如下所示。

    此致

    Mohammad Arifur Rahman

    #define TEST_LENGTH_SAples 1024
    #define SAMPLE_LENGTH 1024

    #define SMCLK_FREQUENCY 48300000
    #define SAMPLE_FREQUENCY 1024

     

    /* DMA 控制表*/
    #if defined (__TI_Compiler_version__)
    #pragma DATA_ALIGN (MSP_EXP432P401RLP_DMAControlTable、1024)
    #Elif defined (_IAR_systems_icc_)
    #pragma DATA_alignment=1024
    #Elif defined (_GNU_)
    __attribute__((对齐(1024)))
    #Elif defined (_CC_ARM)
    _align (1024)
    #endif
    静态 DMA_ControlTable MSP_EXP432P401RLP_DMAControlTable[32];

     

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

    Mohammad Arifur Rahman