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.

[参考译文] TMS320F28069M:使用.set 和.clear 命令进行端口设置时的延迟

Guru**** 2553260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/846064/tms320f28069m-delay-in-port-setting-using-set-and-clear-commands

器件型号:TMS320F28069M

您好!

这可能是一个愚蠢的问题... 这是一个基本的东西,就像设置一个端口值一样:-),但我已经被骗了几天了。

该端口已设置为输出端口。

GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;//将其设为 GPIO
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;// GPIO 0为 O/P
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//启用内部上拉

代码如下所示。  

如果(GPIO0 = 1) GpioDataRegs.GPASET.bit.GPIO0 = 1;否则 GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;

我看到的问题是、示波器观察到的引脚上的值似乎延迟了很大的时间、有几个 MS!

端口设置和复位在计时器 ISR 中完成。 我在 ISR 中读取的还有其他端口。

我是否遗漏了任何东西? 如果你们有任何想法、请告诉我。

谢谢- Bhaktha

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

    您好、Bhakta、

    在逻辑中、当引脚已经为高电平时、您将其设置为高电平。 是这样吗?

    此外、如果您在时间 ISR 中设置和复位引脚、则它将取决于您的计时器的设置方式。 您使用的是哪种计时器以及时钟源? 您能否详细说明预期的延时时间以及您在示波器上观察到的时间?

    此致、

    Vivek Singh

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

    Vivek、

    无论之前的状态如何、我都可能将引脚设置为高电平或低电平。 所以... 我可能会在引脚已经处于高电平时设置引脚、或在引脚已处于低电平时将其设置为低电平。 这是个问题。 无论引脚的先前状态如何、我都认为我可以设置或清除。 我的理解是否不正确?

    我正在使用计时器1。 设置如下。  

    //
    //初始化指向相应定时器寄存器的地址指针
    //
    CpuTimer1.RegsAddr =&CpuTimer1Regs;

    //
    //将定时器周期初始化为最大值
    //
    CpuTimer1Regs.PRD.All = 0xFFFFFFFF;

    //
    //初始化预分频计数器以进行1分频(SYSCLKOUT)
    //
    CpuTimer1Regs.TPR.all = 0;
    CpuTimer1Regs.TPRH 全部= 0;

    //
    //确保计时器已停止
    //
    CpuTimer1Regs.TCR.bit.TSS = 1;

    //
    //使用句点值重新加载所有计数器寄存器
    //
    CpuTimer1Regs.TCR.bit.TRB = 1;

    //
    //重置中断计数器
    //
    CpuTimer1.InterruptCount = 0;

    //计时器配置!

    PeriodInClocks =(uint32) TIMERTICK;

    //
    //计数器每个周期递减 PRD+1次
    //
    Timer->RegsAddr->PRD.All = PeriodInClocks - 1;

    //
    //将预分频计数器设置为1分频(SYSCLKOUT)
    //
    Timer->RegsAddr->TPR.All = 0;
    Timer->RegsAddr->TPRH。ALL = 0;

    //
    //初始化计时器控制寄存器
    //

    //
    // 1 =停止计时器,0 =启动/重新启动计时器
    //
    Timer->RegsAddr->TCR.bit.TSS = 1;

    timer->RegsAddr->TCR.bit.TRB = 1;// 1 =重新加载计时器
    Timer->RegsAddr->TCR.bit.Soft = 0;
    Timer->RegsAddr->TCR.bit.FREE = 0;//禁用计时器自由运行

    //
    // 0 =禁用/ 1 =启用计时器中断
    //
    Timer->RegsAddr->TCR.bit.tie = 1;

    //
    //重置中断计数器
    //
    Timer->InterruptCount = 0;

    我将在   计时器 ISR 中发出 asm (" CLRC INTM")、以启用在计时器 ISR 中提供服务的其他中断

    我的理解是、在发出 SET 或 CLEAR 指令后、该端口将立即变为高电平或低电平。 最坏的情况、有一些 sysclks 延迟。

    如果您能告诉我我我的想法/逻辑中的错误、那我会很感激。

    谢谢。 Bhaktha

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

    您好!

    是的、无论引脚之前处于何种状态、都可以设置/清除引脚、但如果您在引脚已经处于高电平时进行设置、则不会看到引脚状态发生任何变化。

    您能否解释一下如何在示波器上测量延时时间? 参考点是什么?

    此致、

    Vivek Singh

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

    根据增大的模拟值、我应该在模拟值达到阈值后将端口设置为高电平。 尽管模拟值在增加、并且 ADC 正在转换这些值、但根据这些我设置的端口、当我在双通道示波器上看到模拟值和端口时、端口值和模拟阈值存在巨大延迟。 不确定我是否正确解释了它。

    另一个问题、在本论坛的其他地方、我看到必须为端口外设块启用时钟。 但我在任何地方都看不到该设置。 是否应该启用一个? 如果是,那是哪个寄存器?

    谢谢。 Bhaktha

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

    您在这里指的是哪个模拟值。 您能提供更多详细信息。

    在论坛上、您将看到不同器件的帖子、这些器件 可能具有不同的架构。 我建议仔细查看 该器件和器件文档的示例代码以查找此信息。

    此致、

    Vivek Singh

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

    我们在 ADC 中转换的模拟值将推动我们决定打开或关闭端口。 我们使用生成的三角波形进行了单元测试、测试结果与我们的预期一致。 我想、我们的系统中还有其他一些东西正在运行。 如果需要、我们现在将关闭此主题并在稍后启动新主题。 感谢你的帮助。

    谢谢。 Bhaktha