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.

[参考译文] CC1312R:RTC 比较是如何实现的?

Guru**** 2589300 points
Other Parts Discussed in Thread: CC1312R

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1072844/cc1312r-how-the-rtc-compare-is-implemented

部件号:CC1312R

您好,

CC1312R AON_RTC 为每个32 kHz 时钟实施一个70位的自由运行计数器,其增量为可编程值。 可编程值允许在32 kHz 时钟中补偿 ppm 偏移,从而使计数器能够以非常高的精度工作。

默认情况下,AON_RTC 会增加计数器的增量,每个32-kHz 时钟刻度为1/32768秒。 次秒增量值0x20 000对应于1/32768秒。 增加或减少次秒增量值可增加或降低 AON_RTC 的速度,幅度相同。

比较适用于32位 SecLo:SubSecHi,但默认 RTC 子秒增量池与子 SecHi 的位1,因此我的问题是:

1.如何进行比较,以避免 SubSecHi 在每个刻度上没有增加1,某些值可能会丢失,特别是在 SubSecInc 关联的情况下?

2.  SubSecInc 值是否有任何限制?

此致,

D.德文济耶夫

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

    您好,

    您是否了解了实施情况? 您可以在 SDK 中找到源代码。 例如 ,C:\ti\simplelink_cc13xx_cc26xx_SDK_5_30_01_01\sources\ti\devices\cc13x2_cc26x2\driverlib  

    谢谢,

    玛丽·H

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

    您好,

    我已经问过比较模式下的 RTC 比较硬件实施情况以及比较硬件实施可能产生的 SubSecInc 值限制。

    我的问题与 SW 驱动程序无关,但如果谈论这些问题,将会增加第三个问题:

    3. aon_RTC API 发生了变化,在多个 API 上使用了一个名为“nonsecure offset”的新常量。 它的含义是什么?它在哪里定义?  

    注意

    D.德文济耶夫  

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

    你好, Dimitar  

    很抱歉我的答复很晚,但我不得不向研发部门的人员询问您的问题,因为这不是我的专业领域。

    1)  

    当 RTC–CHnCMP < 1秒时,HW 会设置比较事件。 不仅适用于 RTC == CHnCMP

    因此,这就是比较器如何避免事件丢失。

    2)

    HW RTC 计数器本身不限制 SUBSECINC 值。

    尽管请注意,TI 软件不直接校准 LF,但会调整 SUBSECINC 值以确保 RTC 的准确性。

    3)

    此外,nonsecute_offset 可能用于未来的设备,并且在所有当前设备上都设置为0。
    巴西
    西里
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Siri,

    1)关于:“当 RTC–CHnCMP <1秒时,HW 设置比较事件。 不仅适用于 RTC == CHncmc"。  

    比较是基于 SecLo:SubSecHi,其实际工作时间小于一秒,所以这“1秒”可能较小,但它是什么(比较的位1,而不是比特0 corespond 到 RTC tick)?

    2) 我对 RTC 使用外部32,768kHz 晶体,我的自定义代码操纵 SUBSECINC 值,或用于校准 RTC 网络 RTC。 我应该知道我是否意外地通过 TI SW 调整了 SUBSECINC 值,或者换句话说,TI SW 在何时/何地操作 调整 SUBSECINC 值?  

    此致

    D.德文济耶夫

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

    你(们)好

    1) 这是第二次。 它还反映在寄存器描述中:

    如果新的比较值与过去1秒到当前实时时钟值匹配,则写入此寄存器可能触发即时*)事件。

    *)由于同步,事件发生前可能需要一个 SCLK_LF 时钟周期。”

    2) 如果.CalibrateRCOSC_LF = true,则从待机状态唤醒时校准 RTC:

    /*
     *  =============================== Power ===============================
     */
    
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26X2.h>
    #include "ti_drivers_config.h"
    
    extern void PowerCC26XX_standbyPolicy(void);
    extern bool PowerCC26XX_calibrate(unsigned int);
    
    const PowerCC26X2_Config PowerCC26X2_config = {
        .enablePolicy           = true,
        .policyInitFxn          = NULL,
        .policyFxn              = PowerCC26XX_standbyPolicy,
        .calibrateFxn           = PowerCC26XX_calibrate,
        .calibrateRCOSC_LF      = true,
        .calibrateRCOSC_HF      = true,
        .enableTCXOFxn          = NULL
    };
    

    在 PowerCC26X2_CalibrateRCOSC.c 中,从 PowerCC26X2_auxISR 调用 UpdeSubSecInc

    西里

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

    你好,Siri,

    关于1):

    我绝对确信 RTC 比较工作的时间间隔小于1秒(我用它生成15毫秒的时间间隔)。

    注:“向该寄存器写入数据可能会触发即时消息*) 如果新的比较值与过去1秒到当前实时时钟值之间的实时时钟值匹配,则为事件。”当比较正时器在过去1秒内加载与当前 RTC 值相关的值时,就会出现这种情况 (如果有人不接受此前发生的某种类似 HWI 执行的执行,以加载新的计算比较值,并且该值在不久的过去就会出现,那么就采取行动)。

    询问如何实施比较以及 SubSecInc 值是否存在任何限制的原因是,在我的应用程序中,我没有对 SUBSECINC 值校正的计算施加任何限制,因此,当我的“网络管理员”收到错误的网络时间时,我的设备不仅丢失了 同步但卡住。 对我来说,这种卡滞似乎与 RTC CH0唤醒(RTOS 使用)的 MCU 无关。 将大值加载到 SUBSECINC 可能导致 RTC SubSecHi 可以跳过某些值(例如,计数为0,3,6)的情况。 我说了一些限制,情况已经过去了,但我仍然很感兴趣的是如何准确地进行比较,特别是当比较值不在过去时。

    关于2):

    谢谢你直接告诉我。

    如果将来有人对校准物 RCOSC_LF 感兴趣,请做一个记录。

    由于它被命名(校准物 RCOSC_LF),只有当 RCOSC 对 LF 时钟源是 chousen 时,它才会消失(在我的情况下,XOSC 不会像这样消失)。

    int_fast16_t Power_init()
    {
        ................................
        ................................
        
        /* read the LF clock source from CCFG */
        ccfgLfClkSrc = CCFGRead_SCLK_LF_OPTION();
    
        /* check if should calibrate RCOSC_LF */
        if (PowerCC26X2_config.calibrateRCOSC_LF) {
            /* verify RCOSC_LF is the LF clock source */
            if (ccfgLfClkSrc == CCFGREAD_SCLK_LF_OPTION_RCOSC_LF) {
                PowerCC26X2_module.calLF = true;
            }
        }
        ....................................
        ....................................
    }

    此致,

    D.德文济耶夫

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

    你(们)好,Siri

    关于1)

    我刚刚意识到,这1秒只是一个时间间隔,用来区分未来和过去,而比较机制只是在比较值时触发事件,因为比较值是来自过去的。 这意味着我没有错过比较问题。

    再次感谢,致以诚挚的问候,

    D.德文济耶夫  

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

    你好,Dimitar

    以下是我刚刚从研发部门收到的信息/解释:

    RTC 比较窗口为1秒! 这适用于所有 RTC 比较,而不仅仅是在更新 RTC 比较值时。

    但过去只有1秒,而不是未来。 因此,即使 RTC 比较窗口为1秒,您的间隔时间也可以小于1秒 这就是我们支持比较值具有高分辨率的方式,因为我们可能会将 RTC 增加到比较值以上。 如您所述,在某些情况下,我们的增量将超过实际比较值。 然后,比较值将在过去的1秒比较窗口中显示,您仍然可以看到匹配/事件。 1秒远远超出所需,因为最大 SUBSECINC 小于1秒… 因此,我们支持 SUBSECINC 的所有可能值。 也是所有值,这是最大增量值。

    大型 RTC 窗口的原因是,由于中断++,应用程序计时存在不确定性,并且在更新 RTC 比较值时,仍不会错过任何 RTC 事件

    巴西

    西里