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.

[参考译文] MSP432 Driverlib 示例- CS_startLFXT 循环

Guru**** 2609695 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/652058/msp432-driverlib-examples---cs_startlfxt-loop

大家好、

我尝试使用 RTC 示例启动 RTC、但它已在 CS_startLFXT (false)停止;

当我删除此代码时、它起作用。

cs_startLFXT,它很重要吗??

谢谢大家!

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

    Phuong、

     我使用驱动强度参数调用 CS_startLFXT()的 RTC 示例,如下所示,而不是简单地传递空值。
    如果您使用适当的驱动强度并且 API 调用仍然挂起、则表明您可能遇到 LFXT 振荡器问题。 如您所做的那样移除该调用会导致器件回到内部基准振荡器、 与 LaunchPad 上的 LFXT 一样、该示例也以32kHz 为中心、因此该示例仍可运行、因为您不太可能从短时间内运行的简单示例中注意到内部振荡器与外部晶体之间的频率变化。

    /*在非旁路模式下启动 LFXT 而不超时。 *
    CS_startLFXT (CS_LFXT_DRIVE3);

    我引用的示例是 MSP432P4 SDK 中的 RTC_c_calender_interrupt 示例。 资源管理器中。

    CS_startLFXT() API 调用的 API 说明可在 Driverlib 用户指南第6.6.2.29节中找到,该节摘录如下:

    6.6.2.29 bool CS_startLFXT (uint32_t xtDrive)

    初始化 LFXT 晶体振荡器、该振荡器支持高达50kHz 的晶体频率、具体取决于所选的驱动强度。 循环、直到所有振荡器故障标志被清除、并且没有超时。 有关适当的驱动器设置、请参阅《特定器件的数据手册》。 注意:在调用此函数之前、用户必须调用 CS_setExternalClockSourceFrequency 来设置外部时钟的频率。 参数

    XtDrive 是 LFXT 晶体振荡器的目标驱动强度。 有效值为:CS_LFXT_Drive0、

    • CS_LFXT_Drive1、
    • CS_LFXT_drive2、
    • CS_LFXT_DRIVE3、[默认值]
    • CS_LFXT_BYPASS

    注释

    当 CS_LFXT_BYPASS 作为参数传递时、振荡器将在旁路模式下启动、并且信号可由数字方波生成。

    返回

    如果正确启动则为 true、否则为 false

    引用 CS_startLFXTWithTimeout()。


    希望这会有所帮助。

    此致、

     Bob L.

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

    Bob L、

    感谢您的回答、现在我想我知道了我的问题。

    我有另一个问题、您能告诉我其他问题吗?

    /*指定一个中断、每分钟生效一次*/
    MAP_RTC_C_setCalendarEvent (RTC_C_CALENDAREVENT_INTOTECHANGE);
    //启用 RTC 就绪状态中断、当 RTC
    *日历寄存器准备好读取时生效。
    *此外,为日历警报和日历事件启用中断。 /
    MAP_RTC_C_clearInterruptFlag (RTC_C_TIME_EVENT_INTERRUPT);
    MAP_RTC_C_enableInterrupt (RTC_C_TIME_EVENT_INTERRUPT); 
    void RTC_C_IRQHandler (void)
    {
    uint32_t status;
    status = MAP_RTC_C_getEnabableInterruptStatus ();
    MAP_RTC_C_clearInterruptFlag (status);
    if (status & RTC_C_TIME_EVENT_INTERRUPT)
    {
    /*每分钟中断一次-在此处设置断点*/
    /*我的代码*/
    }
    

    大约30分钟后、 每分钟的中断不再起作用。  
    请给我一个解决方案、非常感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有人可以帮帮我吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Phuong、
    我将了解一下这一点、但由于这是一个单独的问题、如果您仍有此问题、我可以要求您将其重新归档为新线程吗? 您还可以发布您正在使用的其余代码吗?
    -Bob