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.

[参考译文] CCS/TM4C123GH6PM:TM4C 上的测量时间、以毫秒或微秒为单位

Guru**** 2605015 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/750872/ccs-tm4c123gh6pm-measuring-time-in-milliseconds-or-microseconds-on-the-tm4c

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

工具/软件:Code Composer Studio

您好!

我正在使用 github.com/.../rosserial_tivac 编写 ROS_embedded_program

我需要测量时间、以便使循环每100ms 执行一个例程。

通常、这是通过以下方式完成的:

while (1){

   CURRENT_TIME =微秒();

   if (CURRENT_TIME - LAST_TIME >= 100000){

//执行例程

   }

在 Tiva-c 中有 SysCtlClockGet ()-当 TM4C123以80MHz 运行时返回80000000。

我们是否有任何方法可以获得系统时钟节拍? 基本上、我想在 TM4C 中毫不延迟地进行闪烁。

除了测量时间/时钟计时器之外、还有其他方法可以实现此目的吗? (可能是 SysTick 中断)

无论采用哪种方法、我如何在 TM4C 中测量时间? 有时、我只需要临时测量例程用于调试所需的时间。

此致、

CAN

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将配置 ARM 内核的 SysTick 计时器或 TM4C 外设计时器之一、以在所需频率生成中断。

    根据您希望执行的例程、执行所需的时间以及例程使用的资源、您可以在中断服务例程(ISR)中执行例程、也可以将 ISR 中的代码限制为仅设置"执行例程的时间"标志、 主循环可以检查它们。

    我建议仅在以下情况下直接在 ISR 中执行:

    (1)要执行的代码很短、很快就会完成(例如、它不包含任何 while (1)循环或延迟、它不会阻止等待您控制之外的一些外部事物、例如来自其他设备或输入的通信、 它不包含任何或其他可能"阻止"长时间执行的语句)

    (2)没有并发问题--例如 ISR 中的代码和共享任何资源的主上下文中的代码--或者您有某种类型或另一种上下文同步

    如果不满足上述条件、您可以将例程拆分为两部分:在中断中执行的快速执行"时间关键型"部分和在主循环中执行的缓慢执行非时间关键型部分。

    要配置 SysTick 计时器,请参阅 TivaWare 函数:SysTickEnable()、SysTickDisable()、SysTickIntRegister()、SysTickIntUnregister()、SysTickIntEnable()、 SysTickIntDisable()、SysTickPeriodSet()、SysTickPeriodGet ()、SysTickValueGet (),在 C:\ti\TivaWare_C_Series-2.1.4.178\driverlib\systick.h 中定义(如果 TivaWare 安装到默认位置)。

    要配置定时器外设、请参阅 C:\ti\TivaWare_C_Series-2.1.4.178\driverlib\timer.h