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.

[参考译文] CC2340R5:CC2340R5 RTC

Guru**** 2611005 points
Other Parts Discussed in Thread: CC2340R5

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1581633/cc2340r5-cc2340r5-rtc

器件型号:CC2340R5


您好、

我们要求在 CC2340R5 上维护 RTC 时间。  

我们将通过 UART 接收 epoch 时间(以秒为单位)。 在我们整个系统的睡眠状态期间、我们希望 RTC 运行。  

从我从 TRM 中看到、我们有两个寄存器“ TIME524M “和“ TIME8U “、其中包含分别在 0.5s 和 8us 处递增寄存器的计数器。

一种方法是读取寄存器并将其用于计时。 或者、我们也看到“ CH0CC8U “寄存器、可用于在设置去序值后生成比较事件。

  1. 如何使用 RTC 比较事件生成中断以将系统从待机状态唤醒、在哪里可以注册回调?
  2. 您还能建议如何有效“ TIME524M“和“TIME8U"</s>“  可用于保持时间不变。

 我试图寻找一个例子,但我没有找到任何到目前为止。 我还确认、RTC 是唯一在睡眠状态下保持活动状态的外设/模块、因此任何其他替代方案都不适用于我们的用例、因为我们处于睡眠状态。

 

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

    您好、Sandeep Singh、

    应该可以使用比较事件加 RTC 来唤醒器件、如果您要遍历此路由、我建议查看控制睡眠的驱动器功能、因为这基本上是它们的低级功能(按代码)。  

    但是、如果您需要一种快速解决方案来实现相同的结果、我建议使用睡眠功能 (Sleep、uSleep、ClockP_Sleep、ClockP_uSleep)。 在这种特定情况下、您需要先创建一个变量来保存器件 RTC 的值、然后找到您需要休眠的“增量“(通过获取当前 RTC 值与未来的值)、一旦找到该差值、 您就会将其加载到睡眠功能中以进入睡眠状态、直到达到预计时间并唤醒。 然后、您可以使用另一个变量来跟踪时间、如果需要、请将其保存到 NVS 区域以保存数据供以后使用。  

    谢谢、
    Alex F

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

    您好 Alex、

    应该可以使用比较事件加 RTC 来唤醒设备、如果你要仔细阅读这条路由、我建议查看控制休眠的驱动程序函数、因为这是它们基本上做的低级(按代码)。

    我应该在哪里查找? 我看不到包含 RTC 相关信息的文件夹/文件。  

    但是、如果您需要一种快速解决方案来实现相同的结果、我建议您使用休眠功能 (sleep、usleep、ClockP_sleep、ClockP_usleep)。 在这种特定情况下、您需要先创建一个变量来保存器件 RTC 的值、然后找到您需要休眠的“增量“(通过获取当前 RTC 值与未来的值)、一旦找到该差值、 您就会将其加载到睡眠功能中以进入睡眠状态、直到达到预计时间并唤醒。 然后、您可以使用另一个变量来跟踪时间、如果需要、请将其保存到 NVS 区域以保存数据供以后使用。  [/报价]

    虽然这是一个不错的选择,但这里有两个问题。

    1.在待机模式下 ClockP 功能不工作,无法被唤醒以从待机模式。

      2.如果我使用 ClockP_USleep、则整个系统进入睡眠状态、并阻止其它运行、如 BLE、UART 等。  

    我的目标是:

    我已经收到 Unix 时间(以秒为单位)、我可以更新“ CH0CC8U“  生成中断的时间。 一旦我收到比较事件,这意味着 10 秒已经过去了,我可以更新 UNIX 时间 10 秒。 这样、我的 BLE 和其他活动不会被阻止、我们无需担心器件是处于运行状态还是待机状态、因为这两个域中都有 RTC 供电。

    请引导我如何有效地使用“ CH0CC8U“  进行比较。

    ISET 寄存器 “谈到设置中断、一旦我们设置了一个中断、我们可以在哪里得到它的回调? 我们如何注册?

    谢谢、

    Sandeep

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

    您好 Sandeep、

    请引导我如何有效地使用“ CH0CC8U“  注册和比较事件。

    下面是 powercc23x0.c 驱动程序的一些代码、它具有与您尝试执行的操作“相似“的代码:

        /* Switch CPUIRQ16 in event fabric to RTC.
         * Since the CC23X0 only has limited interrupt lines, we need to switch the
         * interrupt line from SysTimer to RTC in the event fabric.
         * The triggered interrupt will wake up the device with interrupts disabled.
         * We can consume that interrupt event without vectoring to the ISR and then
         * change the event fabric signal back to the SysTimer.
         * Thus, there is no need to swap out the actual interrupt function of the
         * clockHwi.
         */
        EVTSVTConfigureEvent(EVTSVT_SUB_CPUIRQ16, EVTSVT_PUB_AON_RTC_COMB);
    
        /* Clear interrupt in case it triggered since we disabled interrupts */
        HwiP_clearInterrupt(INT_CPUIRQ16);
    
        soonestDelta = nextEventTimeUs - HWREG(SYSTIM_BASE + SYSTIM_O_TIME1U);
    
        /* Get current time in 8us resolution. Must be done as close as possible to
         * getting the SysTimer time above.
         */
        rtcCurrTime = HWREG(RTC_BASE + RTC_O_TIME8U);
    
        /* Ensure the device wakes up early enough to reinitialise the
         * HW and take care of housekeeping.
         */
        soonestDelta -= PowerCC23X0_WAKEDELAYSTANDBY;
    
        /* Convert delta to RTC units */
        soonestDelta /= RTC_TO_SYSTIMER_TICKS;
    
        /* RTC channel 0 compare is automatically armed upon writing the
         * compare value. It will automatically be disarmed when it
         * triggers.
         */
        HWREG(RTC_BASE + RTC_O_CH0CC8U) = rtcCurrTime + soonestDelta;
    
        /* Go to standby mode */
        result = Power_sleep(PowerLPF3_STANDBY);

    谢谢、
    Alex F

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

    您好 Alex、  

    由于采用了  CH0CC8U  也使用了 BLE 堆栈。 我认为修改它不是一个好主意。 可能会覆盖该值。

    感谢您的更新。

    目前、我将使用 TIME524 作为时间参考、并围绕它构建逻辑。  

    谢谢  

    Sandeep