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.

[参考译文] TMS570LS1224:如何在一段时间内延迟微控制器?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/596707/tms570ls1224-how-to-delay-the-microcontroller-in-some-time

器件型号:TMS570LS1224

大家好。 对于 TMS570LS1224、如何将微控制器延迟几微秒? 就像 PC 多线程编程中的"Sleep ()"一样?

顺便说一下、这个微控制器是多线程还是单线程?

感谢你的帮助。

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

    要对您的"延迟"功能请求提供更多帮助、我需要更多信息。

    当然、您只需创建一个延迟函数、其中 CPU 在 while 环路中旋转、直到计数器超过阈值。 这将导致 CPU 根据您定义的计数数量在循环指令上旋转、从而产生一般延迟。 这种情况的影响是、如果启用了中断、延迟环路将会受到中断的影响。

    您还可以通过多种方式使用 RTI。

    第一个选项是像以前一样对延迟环路进行编程、方法是使用 RTI 中断设置的标志来断开/结束该环路。 这对于循环的时序更确切、但也需要禁用其他中断以防止循环被后续 ISR 执行中断。

    另一种选择是使用器件的低功耗模式来实现睡眠或打盹模式运行。 这将使器件进入低功耗模式(低功耗模式、因为极端条件下不会因芯片技术节点的电流消耗而节省太多功耗)。 在这些低功耗模式期间、器件被置于一个空闲状态并且大多数时钟被禁用。 在您的原因中、您将使 RTI 时钟保持启用状态、并使用 RTI 中断来唤醒器件并恢复正常运行。

    对于有关多线程的问题、该器件是锁步 CPU 器件。 实际上、有一个 CPU 内核执行所有工作、第二个内核在锁步中运行、并使用诊断来检查主 CPU 中的故障。 简而言之、它仍然是单核架构、但具有高诊断能力。 没有方法可以执行并行操作。 这本身并不限制多线程、但意味着您需要实施 RTOS 来管理线程(实际上是时间分片)。 有多个支持 Hercules 的 RTOS、包括 FreeRTOS、SafeRTOS、Micrium、SCIOPTA 等 如需完整列表、请访问以下链接: www.ti.com/.../tools-software.page
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Chuck、

     我是说、例如、如果我使用 GIO 协议、我将引脚设置为5V、然后我希望保持5V 2秒、然后返回0V。 写入循环的问题是、我无法获得相对正确 的" 2秒"。 我不知道迭代次数会使 CPU 延迟2秒。在 Arduino 中、我看到它们具有这样的延迟(int timeInterval)功能。

     对于低功耗模式、我不确定、但我认为它太复杂了。 我只是想简单地将程序的执行延迟一小段时间。

    谢谢。

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

    通常、您所指的延迟是针对您所使用的微控制器进行编程的。 在某些情况下、RTI 可以处理这个问题、或者如果信号在每个时间周期(即 PWM)重复、您可以使用 NHET 或 ePWM 来处理这个问题。 另一种方法是编写您自己的延迟函数。 正如您所指出的、Arduino 支持包附带了这一高级功能、该功能在背后执行一些操作、以使用嵌入式计时器或按我所建议的那样简单地计算循环中的执行周期数。 为了实现一个环路、通常建议将其写入汇编器中、这是因为针对每条指令的 CPY 周期可在 ARM 指令用户指南中找到。 当然、每个 CPU 周期为1/HCLK、因此知道执行每个指令的周期数和每个周期的时间、您可以确定函数中的总时间。

    话虽如此、最简单的实现方式是设置 RTI、例如在每个 MS 上触发比较中断。 当中断触发时、递增一个计数器、该计数器代表已通过的 MS 数量。 在 main 中、使用 if 语句或 switch case 语句在循环中设置应用程序执行循环、以检查 MS 计数器的值。 当计数器达到2000 ms 时、根据需要切换 GPIO。 然后、您可以使用同一个计数器来启动 MS 分辨率上的其他任务。 如果1ms 太短、只要32位计数器可以处理它、并且为 RTI 选择了时钟源、就将 RTI 比较设置为更高的值。

    最后、出于正确性和清晰度考虑、Hercules 上的 IO 为3.3V 而不是5V、因此请确保您的应用不需要5V 电压、否则将需要电平转换电路。