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.

[参考译文] MSP430F5659:何时使用计时器,Delay_Cycles()和INTERNAL MCU RTC警报

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430F5659

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/574166/msp430f5659-when-to-use-timers-delay_cycles-and-internal-mcu-rtc-alarms

部件号:MSP430F5659

何时使用计时器,DELAY-CYCES()和INTERNAL-MCU RTC警报

我想开始讨论何时使用计时器,DELAY周期,RTC警报(如果存在)的最佳做法。

快速概述:

delay_cycles(x)-编译器插入需要x个周期的指令。 如果已知时钟频率,则周期可转换为时间。 (免责声明:在延迟过程中,中断可能会触发,从而导致ISR执行时间的延迟,总之,在某些情况下,延迟的时间很难预测)。

计时器-适用于不受其他ISR影响的计时(某些边缘情况除外)。 处理器可以在计时器计数时执行其他操作(休眠,处理其他输入等)。 功能强大的工具,主要问题是缺少可用的计时器模块(MSP430F5659具有2个加一个WDT)。

内部RTC -不影响CPU运行的时钟,可轮询H:M:S:D:M:Y 用于保留课程时间,并具有警报。 可以针对分钟更改,午夜等情况触发中断。这对于从睡眠状态唤醒或将时间与报警列表进行比较以确定何时执行操作非常有用。 在精细比例计时时不是很好(粒度小于秒)


举一个例子进行讨论:

假设我们有一个接口的传感器(SPI,I2C,UART...等等)。 在I/O层,我们可能希望以特定的时间间隔进行通信,或者在特定时间后停止侦听输入。 在IO层的顶部,我们处理传感器信息并将其存储在外部存储器中,这很可能需要自身的延迟(串行闪存,FRAM,SD卡等)。 由于电源限制,存储此传感器信息的过程应限制在一定的时间内,或者可能由于外力的作用,额外的时间无法提供更好的样品。 最后,有一些与此类似的任务计划定期执行,我们在这些任务之间睡觉。

我经常遇到的一个问题是无法在函数中使用计时器,因为它当前正在我的调用函数中使用。 我很好奇,你们有哪些最佳实践可以帮助你们在何时将上述工具一起使用来解决上述问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    (nitpick:F5659具有四个计时器模块,总共18个CCR。)

    可以对任意多个计划事件使用单个计时器:具有按过期时间排序的事件列表,以连续模式运行计时器,并为下一个事件编程一个CCR。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    假设我们有一个接口的传感器(SPI,I2C,UART...等等)。 我经常遇到的一个问题是无法在函数中使用计时器,因为它当前正在我的调用函数中使用。[/QUET]

    对于这样的I/O密集型项目,我想说您应该选择另一个具有足够计时器的微控制器。 Delay_Cycles用于短_Delays_(<=1000个CPU周期)和/或超简单应用程序,只需一个轮询环路,没有或很少有很短的ISR。 请注意,如果在delay_cycles()期间启用了GIE,任何ISR都将根据ISR处理所需的CPU周期延长延迟时间。 这些只是定时器与DELAY-CYCLES ()的主要考虑事项,我的考虑事项:) [EDIT] RTC警报:低功率应用,睡眠时间长,工作周期低,如低功率传感器,每秒或每分钟测量一次。

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

    首先,我非常感谢他们的反馈(nitPicks让世界变得到处都是)。

    [报价用户="Clemens Ladisch"](首选:F5659具有四个计时器模块,总共18个CCR。)

    [/引述]

    我最初认为它有两个以上的计时器是我不会错过的,所以我拉了 MSP430x5xx和MSP430x6xx系列的用户指南,看到多个计时器可以在同一个模块上。 在快速检查msp430f5659.h后,我看到了以下内容。

    TimerA0 (5捕获/比较注册表)  

    TimerA1  (3个捕获/比较注册表)  

    TimerA2 (3个捕获/比较区域)  

    TimerB0 (7捕获/比较注册表)  

    总计:4个计时器和18个CCR。  

    [报价用户="Clemens Ladisch"]

    可以对任意多个计划事件使用单个计时器:具有按过期时间排序的事件列表,以连续模式运行计时器,并为下一个事件编程一个CCR。

    [/引述]

    我真的很喜欢这个想法。 开发这一系统将是一项很好的工作。