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.

[参考译文] TM4C1290NCPDT:RTCCLK 输出不起作用...

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/569732/tm4c1290ncpdt-rtcclk-output-not-functioning

器件型号:TM4C1290NCPDT
Thread 中讨论的其他器件: EK-TM4C1294XL

尊敬的支持:

使用 TM4C1290NCPDT 时、从 RTCCLK (PC5)引脚获取 RTCCLK 信号时遇到问题。 对于"问题"、请阅读"我不成功"。 我将 Code Composer Studio 版本6.2.0.00050与 TivaWare C 系列2.1.1.71库搭配使用。

下面是我尝试将 PC5配置为作为 RTCCLK 工作时使用的代码:

(未显示启用/配置休眠外设并使 RTC 运行的代码。 我已经添加了代码来确认 RTC 秒寄存器每秒递增一次。)

   //启用 GPIOC
   //(我们有一些引脚用于设置/配置)
   SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);

   //现在等待它启用...
   while (false =SysCtlPeripheralReady (SYSCTL_Periph_GPIOC));

   // RTCCLK 是一个替代函数
   GPIOPinConfigure (GPIO_PC5_RTCCLK);

   //就像 DIVSCLK 那样执行第二个
   GPIOPadConfigSet (GPIO_PORTC_BASE、GPIO_PIN_5、GPIO_FORMENT_2mA、GPIO_PIN_TYPE_STD);

   //我们必须对 RTCCLK 和 DIVCLK 执行以下操作
   // 因为 Tiva 库不提供
   // 完成设置的函数、配置引脚供硬件/外设使用
   //现在将引脚配置为硬件控制!
   //请注意,此函数写入 GPIO_O_AFSEL
   // 使用引脚#注册以完成到备用功能的转换!
   GPIODirModeSet (GPIO_PORTC_BASE、GPIO_PIN_5、GPIO_DIR_MODE_HW);


让我在此补充一点、对于配置 PQ4作为 DIVSCLK 运行以发出 PIOSC 时钟的适当参数、上述步骤可以正常工作。 我将从 DIVSCLK 引脚获取16MHz PIOSC (尽管我通过另一个寄存器选择的是64分频)。

RTCCLK 仅配置为在初始制造测试期间发出 RTC 时钟信号。 RTCCLK 引脚几乎直接路由到该引脚下的测试焊盘、因此不会有太多可能出错的地方、但我已确认它没有短接到任何其他引脚。 哦、我已经注意到电路板的两个不同硬件版本上的这种行为。

这项工作非常重要,因为我们要确认32.768kHz 时钟非常精确--在几个 PPM 以内。 我们将 RTC 用于网状无线电网络的关键计时。 我们还使用 RTC 来执行 PIOSC 校准、以使 PIOSC 的精度优于1%。

此致、

 Marc Warden
 高级固件工程师
 Davis Instruments

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

    为了能够输出 RTCCLK、需要启动并配置休眠模块。 我没有看到任何相同的代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好,Amit。

    正如我在帖子中指出的、我没有提供启用/配置休眠外设的代码、但我可以确保休眠外设及其 RTC 正在运行、并且我确认 RTC 秒寄存器每秒递增一次。 如果您需要查看启用/配置休眠外设的代码、只需询问、我将收集并发布该代码。

    Marc。

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

    我要检查的是 SYSCLKEN 的 HIBCC 寄存器位是否被置位、该位允许 RTCOSC 时钟源进入系统。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、

    下面是休眠外设配置源代码行:

    SysCtlPeripheralPowerOn (SYSCTL_Periph_HIBERNATE);
    SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);
    while (!(SysCtlPeripheralReady (SYSCTL_Periph_HIBERNATE)));

    /*配置休眠模块的时钟*/
    HibernateEnableExpClk (16000000);

    /*打开 RTC */
    HibernateRTCEnable();

    /*设置外设*/
    HibernateClockConfig (HIBERNATE_OSC_LOWDRIVE);

    休眠计数器模式(HIBERNATE_COUNTER_RTC);

    HibernateRTCSet (0);

    HibernateRTCTrimSet (0x7FFF);

    我没有 Code Composer Studio 使用的库的 Hibernate 库代码的源代码,但在版本中,SYSCLKEN 被设置的固件库源(TM4C_HIBERNATE.C)--在调用 HibernateClockConfig()时--在 HIBCC 寄存器中由 #define 控制

    #define HIBERNATE_CLOCK_OUTPUT CLASS_IS_TM4C129

    TM4C_HIBERNATE.C 库源文件中的代码行为:

    if (HIBERNATE_CLOCK_OUTPUT)

    HWREG (HIB_CC)= ui32Config &(HIBERNATE_OUT_SYSCLK |
    HIBERNATE_OUT_ALT1CLK);


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

    感谢您提供相关信息。 我相信您使用的是 TI RTOS 示例、也许是因为 TivaWare 文件被命名为 hibernate.c

    我可以在 LaunchPad 上检查它、看看可能会出现什么问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TI RTOS 示例? 我不这么认为。

    我关于发布固件或测试(Baremetal)固件如何诞生的信息非常粗略。 当这个基于 TM4C1290的项目开始时、我深入参与了另一个项目(基于每个 STM32F103xx 和 STM32F105xx ARM 处理器的一个项目)、然后在大约6个月后加入了该项目。 我所说的"发布"固件是使用某种开源非 IDE 开发系统构建的。 要构建版本固件、必须在 Windows 7中运行的 Cygwin 会话中运行"make"。 该固件确实使用了嵌入式操作系统 Contiki。

    测试或裸机固件最初是由另一个开发人员使用免费的 Code Composer Studio 完成的。 我不知道这个开发人员是从什么开始的。 我知道测试固件不使用任何 RTOS。 它是一个"BareMetal"代码、固件和硬件之间实际上没有任何内容、以便允许基于 PC 的测试程序(我也在使用该程序)以非常私密的方式与固件/硬件进行交互、从而支持对其从生产线上脱离的硬件进行低级测试。

    我继承了 Baremetal 代码,并添加了一些更好的 I/O 功能--例如,将 printf()函数作为第一种格式,然后将内容直接从调试通信端口发出--然后添加了许多额外的功能以支持制造测试要求。

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

    我使用 TivaWare 2.1.3.156为 EK-TM4C1294XL 编写了一个简单的代码
    内部
    MAIN ()

    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
    SysCtlPeripheralEnable (SYSCTL_Periph_HIBERNATE);

    GPIOPinConfigure (GPIO_PC5_RTCCLK);
    GPIOPinTypeHibernateRTCCLK (GPIO_PORTC_BASE、GPIO_PIN_5);

    HibernateEnableExpClk (16000000);
    HibernateRTCSet (0);
    HibernateRTCEnable();

    HWREG (HIB_CC)= HIB_CC_SYSCLKEN;

    while (1);


    我可以在示波器上看到 PC5按预期进行切换。 那么、我采用了您已经输入并添加的代码

    HWREG (HIB_CC)= HIB_CC_SYSCLKEN;

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

    代码 HibernateClockConfig()中的发行固件项目的库源代码有一个用于设置 HIB_CC_SYSCLKEN 位的行,但用于 Baremetal 项目的库可能不同。 (我没有 Code Composer Studio 使用的库的源代码。)

    让我打印 HIB_CC 寄存器的内容、看看该位设置为什么。

    如果 SYSCLKEN 位未被置位、我将对其进行置位。

    Marc。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我"转储"了 HIB_CC 寄存器、并且该位被*未*置位。 我设置该位、RTCCLK 现在出现在测试垫上。

    在事后逐步完成 RTCCLK 引脚的 GPIO 配置后、我应该也对休眠外设配置进行了彻底的分析。

    Amit、感谢您的帮助。

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

    没问题。 很高兴您耐心等待了我一天。