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.

CC2652RSIP: 关于定时器Timer的API Timer_control 的一些疑问

Part Number: CC2652RSIP

我有一个需求,需要查看指定的定时器的运行状态(停止、运行中等)。

查看Timer的API,感觉Timer_control可能能够实现此功能,但只在Timer.h文件中看到它的声明extern int_fast16_t Timer_control(Timer_Handle handle, uint_fast16_t cmd, void *arg);但并未对其支持的cmd命令进行详细的描述,能否有更详细的资料对其进行描述?谢谢

  • 我看的就是这个文件,没有描述支持的命令。它只是定义了控制命令预留的偏移量:Timer_CMD_RESERVED。

  • extern void Timer_stop(Timer_Handle handle);这个能满足您查看指定的定时器的运行状态(停止)的需求吗

  • 这个不可以。还有需要获取定时器还剩多长时间超时的功能,有没有相应的接口

  • 为了更好地了解计时器,您可以参考一些资源,其功能包括:

    driverlib 上的 Timer.h 文件参考

    driverlib 上的 Timer.c 文件参考

    您还可以使用 CPU_MMAP 作为指导来引用寄存器,以查看正在使用的计时器(我喜欢引用 GPT0)。 

    cc26xx_CPU_MMAP

    您可以通过多种方式查看计时器的当前计数,例如使用timer.c/h 中的函数和查看寄存器(下图)。

    另外,在 syscfg 本身中,“计时器(已添加 1)”旁边有一个“?” 标记,单击它会弹出一个额外的菜单,其中包含一些对于学习非常有用的额外选项

    通过额外菜单中的“示例”找到的图像。

    如果您需要更多支持,请包括:您的 SDK、您用于开发的基础示例 (SDK)、CCS 版本以及您对代码所做的任何修改。 

  • 我用的CCS版本是12.5.0;SDK版本是:simplelink_cc13xx_cc26xx_sdk_7_10_01_24;基于simple_peripheral项目。

    我在看您给的链接,感谢。

    如果Timer.h的接口API(比如Timer_open)、timer..h中的API(比如TimerEnable),以及GPTimerCC26XX.h中的API可以混用吗,会有什么问题吗

  • 我在TimerCC26XX.c中找到Timer_control的实现了。如下,调用此接口只会返回Timer_STATUS_UNDEFINEDCMD错误,所以此接口不能用

    Fullscreen
    1
    2
    3
    4
    int_fast16_t Timer_control(Timer_Handle handle, uint_fast16_t cmd, void *arg)
    {
    return (Timer_STATUS_UNDEFINEDCMD);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 为了获取定时器已经运行了多长时间,我用了如下的实现,它基于以下3个前提

    1、定时器的频率与CPU的频率相同。

    2、定时器是向上计数。

    3、Timer_getCount()实时获取当前定时器的计数寄存器的值

    这2个前提与实际相符吗?

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    ClockP_FreqHz clockFreq;
    uint32_t ElapsedTime;
    ClockP_getCpuFreq(&clockFreq);
    uint32_t timer_freq_hz = clockFreq.lo;
    ElapsedTime = (uint32_t) (Timer_getCount(timer_handle) / timer_freq_hz);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 正在跟进您的问题,需要一些时间。

  • GPTimerCC26XX.h中的API可以混用吗,会有什么问题吗

    您不能混合使用它们,您只能使用一个 API 或另一个,不能同时使用两者。 

    如果您选择使用GPTimer 驱动程序,您还将面临以下限制(以及其他差异):

    • 不支持 DMA 使用
    • 不支持定时器同步
    • 驱动程序不支持向下计数模式(PWM 除外)

     timer.h doxygen 有一些关于计时器某些用例的有用文档(带有代码和解释)。 

    只是为了仔细检查您使用 Timer_getCount 时,计时器是否已经打开?

    该函数应该返回刻度数,然后您可以像您所做的一样除以频率(您是否尝试对此进行调试?)。 

    您还可以引用 SDK 中的“timerLED”示例,并尝试先将您想要的功能添加到 timerLED 示例中,然后再将其添加到simple_peripheral中。

  • 您好,以上步骤您尝试过了吗,问题的疑惑点解决了吗,如果没有,将继续为您跟进。

  • 还没有试,有时间了会进行测试,非常感谢您的帮助

  • 好的,那您有时间了测试一下,希望我的建议能够解决您的问题,后续疑问可以继续在此贴帮您跟进。