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.

[参考译文] MSPM0C1104:使用 DELAY_CYCLES 功能时预期延迟的偏移

Guru**** 2680595 points

Other Parts Discussed in Thread: LP-MSPM0C1104

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1584476/mspm0c1104-offset-from-expected-delay-when-using-delay_cycles-function

器件型号: MSPM0C1104

大家好、E2E 专家:

我有一个 Code Composer 程序、它可以在处理器上电时开始运行简单的算法。 在由 delay_cycles (cycles) 设置的指定延迟之后、处理器会将引脚设置为高电平、其中周期是根据目标延迟(以毫秒*时钟频率 (32.77kHz) 为单位)计算得出的。  

但是、当我测量从启动到引脚高电平的实际延迟时、测得的时间比目标延迟大约长 33ms。 我还观察到、随着目标延迟每 1000ms 的目标延迟增加约 10ms、该 33ms 偏移会减小。  

您能帮助我了解此失调电压的原因吗、以便我可以消除此失调电压或围绕其进行设计吗?

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

    我认为延迟不是  delay_cycles (cycles) 产生的、因为上电后 MCU 将首先进入引导代码。

    您是否可以在 DELAY_CYCLES (cycles) 之前将引脚设置为高电平、并在 DELAY_CYCLES (cycles) 之后将引脚设置为低电平。 然后再次观察波形。

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

    我重新配置了代码以在上电时将引脚设置为高电平、在 DELAY_CYCLES (cycles) 后将引脚设置为低电平、这是延迟设置为 300ms 时的结果:   

    时间 (ms) 事件
    0 接通电源
    ~2.5 引脚保持高电平
    ~328 为低电平
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另外、我观察到对于不同的周期值、2.5ms 偏移是恒定的,但引脚高电平 — 引脚低电平的偏移随着周期的增加而降低,即使在长延迟时变为负值也是如此

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

    引脚高电平在 DELAY_CYCLES 之前、引脚低电平在 DELAY_CYCLES 之后。

    如果周期增加、引脚高电平到引脚低电平之间的时间也应增加。

    我们已经测试了 delay_cycles () 的函数,它运行良好。

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

    是的、周期会增加引脚高电平和引脚低电平之间的时间、但测量的时间与预期时间之间存在偏移。 在以上示例中、我预计引脚高电平和引脚低电平之间的时间为 300ms。 但是、在测量延迟时、我看到的延迟为~325ms。 当我重新编程 1000ms 延迟时、我测得引脚高电平和引脚低电平之间的时间接近 1018ms。 正是这个 失调电压(测得的延迟-预期延迟)我想要提供指导。 我也感兴趣的是、如果引脚高电平被置于 DELAY_CYCLES (CYCLES) 之前、则是什么导致上电和引脚高电平之间出现 2.5ms 延迟。

    谢谢你

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

    您好、Cameron、

    很抱歉跳进去了。 我已经使用 LP-MSPM0C1104 协助进行了测试。 您可以看到、我的测试代码如下、设置为高电平约为 300ms、设置为低电平约为 1000ms。 测试结果并使用 GPIO 切换进行计算、为:300ms -> 298ms、1000ms -> 995ms

    优化级别为 2、这是 CCS 设置的默认级别。

    此致、

    Janz Bai

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

    您好 Janz、

    感谢您的意见。 我编写了一个测试代码、将您的测试与我的测试合并、我相信我发现了这个问题。 要计算周期、我将时钟频率乘以一个表示目标延迟的整数(以毫秒为单位)。 我最初为该变量使用 unsigned int、但在将其更改为 const int 时、测量的延迟与预期值相匹配。 在下面的示例中、结果如下:delay1_ms -> 321ms、delay2_ms -> 995ms。

    unsigned int delay1_ms = 300//所需延迟(以毫秒为单位)
    const int delay2_ms = 1000 //所需延迟(以毫秒为单位)

    内部 main (void)
      /*为 GPIO 上电、将引脚初始化为数字输出*/
      SYSCFG_DL_init ();
      DL_GPIO_setPins (GPIO_MATCH_PORT、GPIO_MATCH_USER_MATCH_PIN | GPIO_MATCH_USER_TEST_PIN);//将 Pin 设置为高电平
      delay_cycles (delay1_ms * 32.77);
      DL_GPIO_clearPins (GPIO_MATCH_PORT、GPIO_MATCH_USER_MATCH_PIN | GPIO_MATCH_USER_TEST_PIN);//默认:LED 熄灭
      DELAY_CYCLES (delay2_ms * 32.77);
      DL_GPIO_setPins (GPIO_MATCH_PORT、GPIO_MATCH_USER_MATCH_PIN | GPIO_MATCH_USER_TEST_PIN);//将 Pin 设置为高电平
      
      返回 0
    }
    我还有 2 个问题:
    1. 2%时钟误差是否是导致结果差异的原因 (298ms 与 300ms、995ms 与 1000ms)?
    2.测量上述代码的波形时、为什么 VCC 上升沿和第一个 GPIO 高电平的上升沿之间一直有 2.7ms 的延迟?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.2%时钟可能是导致结果差异的原因。 或者、您可以测试更多电路板来观察更多结果。

    2、如上所述,当 MCU 上电时需要首先执行引导代码,然后执行应用程序。