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.

[参考译文] TMS320F28377S:DSP28377S GPIO 的最大输出频率是多少?

Guru**** 2472420 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1049186/tms320f28377s-what-is-the-maximum-output-frequency-of-gpio-of-dsp28377s

器件型号:TMS320F28377S
主题中讨论的其他器件:C2000WARE

您好,

我 对28377S 的 GPIO 输出有疑问 :  

在数据表中,我看到 GPIO CLK 等于 SYSCLK,因此我测试 GPIO 最大频率如下所示:

C 代码

(笑声)

GpioDataRegs.GPDSET.bit.GPIO96=1;
GpioDataRegs.GPDCLEAR.bit.GPIO96=1;

(笑声)

(笑声)

GpioDataRegs.GPDSET.bit.GPIO96=1;
_asm (" nop");
_asm (" nop");
GpioDataRegs.GPDCLEAR.bit.GPIO96=1;

(笑声)

脉冲宽度相同、为36ns!

如果它等于 SYSCLK、那么 GPIO 的最大频率理论上应该为200MHz、那么波形中的脉冲时间应该为5ns、但是测试完成后应该为36ns。 为什么?

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

    这可能是由于您所编写的代码正被转换为汇编语言的方式造成的。

    我已经使用对寄存器的连续写操作对其进行了测试、该操作采用几条汇编指令、产生~25nS 的宽脉冲。 然后添加两条 NOP 指令、我看到脉宽增加到~35nS。 这在 F28388D 上进行了测试、但不应存在功能差异。

            gpioDataReg[GPIO_GPxSET_INDEX] = 0x0001;
    
            gpioDataReg[GPIO_GPxCLEAR_INDEX] = 0x0001;
    
            gpioDataReg[GPIO_GPxSET_INDEX] = 0x0001;
            asm (" nop");
            asm (" nop");
            gpioDataReg[GPIO_GPxCLEAR_INDEX] = 0x0001;
            asm (" nop");
            asm (" nop");
            gpioDataReg[GPIO_GPxSET_INDEX] = 0x0001;
            asm (" nop");
            asm (" nop");
            asm (" nop");
            asm (" nop");
            asm (" nop");
            gpioDataReg[GPIO_GPxCLEAR_INDEX] = 0x0001;

    问题是处理器必须切换寄存器值、PWM 可能会获得较小的脉冲输出、但不会太小。

    此致、
    Cody  

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

    您好,

    谢谢!

    如何编写我的代码? 如果我希望 GPIO 发送最快的50%脉冲?

    它似乎添加了 asm ("nop"); 在代码中、有时高级别和低级之间的时间不固定、它似乎在变化

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

    使用 CPU 持续切换 GPIO、这是不切实际的、每个指令周期将专用于切换 GPIO。

    如果是单脉冲、则写入几行汇编代码以切换位。 如果您需要多个脉冲、请查看使用 PWM 模块。

    C2000ware 示例 C:\ti\c2000Ware_3_04_00_00\driverlib\f2837xs\examples\cpu1\ePWM  

    如果您需要生成更窄的脉冲、我建议尝试使用通过外部逻辑组合的两个 HRPWM 脉冲。 HRPWM 具有最小脉冲宽度、但脉冲边沿的分辨率非常小。 使用一些简单的分立式逻辑、您应该能够使用一个 HRPWM 打开输出、使用另一个 HRPWM 关闭输出。

    此致、
    Cody  

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

    谢谢、  Cody

    非常有用!