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.

[参考译文] LAUNCHXL-CC26X2R1:32kHz 晶体调节

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1356600/launchxl-cc26x2r1-32-khz-crystal-adjusting

器件型号:LAUNCHXL-CC26X2R1
主题中讨论的其他器件:SysConfig

大家好!

软件:示例"project zero"项目。 香草、无修改。

硬件:cc26x2r launchpad。

在函数"project_zero_init ()"末尾修改以下代码可让 我的示波器看到32 kHz 晶体时钟信号重新路由到右上角的 GPIO 12。 整洁! 感谢 Clement。

    IOCPortConfigureSet(12, IOC_PORT_AON_CLK32K, IOC_STD_OUTPUT);
    AONIOC32kHzOutputEnable();

该信号或多或少正常、但对于我们的用途而言、它不够准确。 我们希望根据器件调整它。 因此、就在 前一个代码之前、我们添加:

    
    uint32_t subSecInc = 0x20000;
    
    HWREG( AUX_WUC_BASE + AUX_WUC_O_RTCSUBSECINC0 ) = (( subSecInc       ) & AUX_WUC_RTCSUBSECINC0_INC15_0_M  );
    HWREG( AUX_WUC_BASE + AUX_WUC_O_RTCSUBSECINC1 ) = (( subSecInc >> 16 ) & AUX_WUC_RTCSUBSECINC1_INC23_16_M );
    HWREG( AUX_WUC_BASE + AUX_WUC_O_RTCSUBSECINCCTL ) = AUX_WUC_RTCSUBSECINCCTL_UPD_REQ;
    while( ! ( HWREGBITW( AUX_WUC_BASE + AUX_WUC_O_RTCSUBSECINCCTL, AUX_WUC_RTCSUBSECINCCTL_UPD_ACK_BITN )));
    HWREG( AUX_WUC_BASE + AUX_WUC_O_RTCSUBSECINCCTL ) = 0;
    

遗憾的是、此代码会卡在 while 循环中。 我怀疑 AUX_WUC_O_RTCSECINCCTL 的偏移量是错误的、因此从不满足 UPD_REQ、UPD_ACK 组合的要求。

我访问了一个类似的线程,但那里的答案没有让我走过去循环 . 为了方便其他人,我在此附上。

     e2e.ti.com/.../cc1310-c1310-hang-on-change-rtc-sub-second-increment

我的目的是将值 subSecInc、例如修改为0x20004、以补偿晶体信号并获得更高的精度。 只能在代码开始执行此操作。 我们可以通过测试来获取该0x20004值或类似值、方法是每个器件使用频率计数器、然后加载它。

那么、我的问题有两个:

  1. Code Composer Studio 中的寄存器视图没有向我显示任何 AUX_WUC_O_RTCSUBSECINCCTL、我的偏移地址是否正确? 请查看此帖子末尾的#defines。
  2. 这是放置此校准代码的正确位置吗?

请告诉我您对这两个问题的看法。 接下来是#defines。

#include <driverlib/aon_ioc.h>
#define AUX_WUC_BASE                            0x400C6000

#define AUX_WUC_O_RTCSUBSECINC0                 0x0000003C
#define AUX_WUC_O_RTCSUBSECINC1                 0x00000040
#define AUX_WUC_O_RTCSUBSECINCCTL               0x00000044

#define AUX_WUC_RTCSUBSECINC1_INC23_16_M        0x00FF0000
#define AUX_WUC_RTCSUBSECINC0_INC15_0_M         0x0000FFFF
#define AUX_WUC_RTCSUBSECINCCTL_UPD_ACK_BITN    0x02
#define AUX_WUC_RTCSUBSECINCCTL_UPD_REQ         0x01

祝您度过美好的一天!

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

    您好、Kazola、

    我希望你们做得好。 在上一篇文章中、我不知道我们是否以这种方式准确测试了一个示例(因此不确定是否涉及任何问题)。 看起来为了调整时钟、我们需要严格遵循 TRM 的第16.2.2节:"新的亚秒增量值在收到 AON_RTC 的确认之前不得由 AUX 更改"、 这似乎是3-7行正在努力做的事情。  

    您是否在自定义地址中加入了"nonsecure_offset"? 与以下示例类似。  


    谢谢。
    A·F

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

    您好, 

    提前感谢您的参与。

    我 从这里复制了我的一段代码。

    software-dl.ti.com/.../group__setup__api.html

    我从复制了寄存器地址和偏移量、

    https://software-dl.ti.com/lprf/simplelink_cc13x0_sdk/1_30_00_06/exports/docs/driverlib_cc13xx_cc26xx/cc26x0/register_descriptions/CPU_MMAP/AUX_WUC.html#RTCSUBSECINC0_INC15_0

    我认为我不需要任何非 secure_offset、因为我在论坛周围从未看到过这个、而且我认为我从寄存器地址复制粘贴到这里是正确的。 但请您随时 自行检查这些地址。 我肯定是90%。 我甚至不明白 NON_SECURE_OFFSET 会做什么。 我们这样做是因为上面的链接显示您必须从 WUC 部分访问寄存器。

    此处的主要问题是、由于 UPD_REQ 和 ACK、我们陷入了循环。 如果我们可以浏览一下、我认为通过更改"subsecsinc"变量就足够了。 我还读到、我们可能需要写入和读取同步寄存器、但我也尝试了这种方法、运气不好。 或者我可能是在做非常错误的事情。

    TI 的某人 是否可以尝试修改该代码以调整这个32kHz 时钟? 正如我所说的,我唯一改变的部分是函数"project_zero_init ()"的结尾。

    我们将等待您的回答。

    谢谢。

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

    您好、Kazola、

    在查看函数设置文件时、您从其中复制的代码用于"SetupAfterColdResetWakeupFromShutDownCfg3"函数、该函数中包含更多设置。  

    如前所述、我们目前没有任何官方示例、也没有支持以这种方式(或如果可能)对晶体进行调优;因此、 我们一方的支持非常有限。  

    谢谢。
    A·F

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

    您好, 

    感谢您的投入和付出。

     用户指南 指出这是可行的、我们购买了约3000多个此类 cc26x2r。  这并不是我们有2个 launchpad :)我们需要能够调整这一点。

    如果由于这种低级代码不是您的部门而无法提供支持、您能否上报此问题和/或让我们与能够提供支持的人员联系? 如果需要、我们可以签署 NDA。

    我想如果有另外一个技巧、那就是使用调优的子域值直接使器件启动、而不是在代码上这样做、这样做 可能  同样工作  即使我们针对每个器件都有一个稍有不同的文件。 是否可以在 CCFG、driverlib 或 someway 上更改它、以便在所闪存的代码中硬编码?

    谢谢、我将等待您的回答。

    祝你度过美好的一天!

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

    您好、Kazola、

    我想告诉你,我已经联系了 rnd 团队,目前正在等待他们的回应。 当我从他们那里得到响应时、我将更新该主题。 与此同时、您当前正在使用的 SDK 是什么、以及 CCS 版本?

    谢谢。
    A·F

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

    太棒了!

    CCS v12.x。

    SDK 为7.40、不过我想您的解决方案可以使用任何一种低层次代码。

    谢谢!

    我们将等待您的回答。

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

    您好、Kazola、

    我收到了 rnd 团队的回复、如下所示:

    SubSecInc 实际上是用于改变 RTC 的有效更新速率的寄存器。

    我建议您查看由 PowerCC26X2_enableXoscLfRtcCompensation ()实现的 XOSC_LF SWTCXO。 这会随着温度的变化调整 SubSecInc 值、以适应晶体振荡器随温度变化的频率。

    它将展示如何更改 SubSecInc 值。

    您是否需要温度补偿?温度范围是多少? SysConfig 中有一项用于此目的的功能。  

    谢谢。
    A·F

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

    您好,

    这看起来更有希望。

    我将在星期一查看它并继续这句话、我认为这句话对很多人来说正在变得非常有用。

    它会让您了解最新情况。

    希望我们能尽快"解决"此线程。

    谢谢!

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

    您好, 

    我尝试过这种方法、但它不起作用。

    我把这3行放在香草"项目零"的末尾。

        PowerCC26X2_enableXoscLfRtcCompensation();
        IOCPortConfigureSet(12, IOC_PORT_AON_CLK32K, IOC_STD_OUTPUT);
        AONIOC32kHzOutputEnable();

    我在该文件顶部包含了以下内容

    #include <ti/drivers/temperature/TemperatureCC26X2.h>
    #include <ti/drivers/Power.h>
    #include <ti/drivers/power/PowerCC26X2.h>
    #include <ti/drivers/power/PowerCC26X2_helpers.h>
    const TemperatureCC26X2_Config TemperatureCC26X2_config;
    

    但代码在 PowerCC26X2_enableXoscLfrtcCompensation ()挂起。

    我想他们之所以在 SDK v7x 上添加此代码、是因为在使用32kHz 晶体时 RTC 会发生漂移、这意味着这是一个已知问题。

    我购买了一个不错的频率计数器、Launchpad 中的 xtal 为32.7684950且会波动一点。

    我们实际上能够独立于 SDK 进行调整。 那么、您能否问这个研发部门、为什么该主题/帖子开头的循环卡住了?

    通过他们测试它并修复它(不能超过5/6行代码,可能我们丢失了一些寄存器的特殊性)将解决它。

    谢谢。

    我们将等待您的回答。

    我们有点时间紧迫。

    祝你度过美好的一天!

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

    您好、Kazola、  

    我已联系 rnd 了解有关代码为什么在 while 循环中挂起并等待响应的具体问题。  

    他们还告诉我:

    "如果您想要运行温度补偿并添加单点插入、他们可以运行与 OSC_LFXOSCInitStaticOffset ()类似的代码、根据已知温度下的测量值设置_lfXoscParams 系数 d 本身、而不是从 FCFG 导出它们。"

    谢谢。
    亚历克斯  

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

    谢谢!