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.

[参考译文] Starterware/MSP432P401R:RTC 示例代码不起作用

Guru**** 2535150 points
Other Parts Discussed in Thread: MSP432WARE

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/566162/starterware-msp432p401r-rtc-sample-code-do-not-work

器件型号:MSP432P401R
主题中讨论的其他器件:MSP432WARE

工具/软件:Starterware

我和我的客户在 MSP432 Launchpad 上测试 RTC 示例代码、我们找到了

-"MSP432Ware_3_50_00_02\examples\devices\MSP432P4xx\MSP432P401x_Code_examples\C\msp432p401x_RTC_02"   工作正常 、将每1秒进入 RTC 中断

-"MSP432Ware_3_50_00_02\driverlib\examples\MSP432P4xx\RTC_c\RTC_c_calender_interrupt"    不起作用、 紧张者进入 RTC 中断

由于客户想要使用 API 格式来编写 RTC 代码、我们想要再次确认"RTC_c_calender_interrupt"示例代码是否可以正常工作? 如果是、我们的测试可能出了什么问题。 如果没有、我们是否有基于 API 格式的正确 RTC 示例代码?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将此主题移至 MSP430论坛。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Terry、
    您能否将第126行中的 RTC_c_calender_alarm_interrupt 示例更改为 MAP_PCM_gotoLPM0 ();并查看您是否仍有问题?

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

    Terry、

    我更深入地研究了这一点、发现 RTC_c_calender_interrupt.c 文件缺少其 RTC_C_Calendar CurrentTime 结构常量中的 DayOfWeek 变量。  这是第一个需要纠正的问题。

    除此之外,函数 MAP_RTC_C_initCalendar()没有正确地指向它应该指向的位置,因此无法可靠正确地写入该主函数顶部定义的 CurrentTime 常量中的值。  通过从函数名称中删除"map_"并调用 RTC_C_initCalendar、可以轻松解决此问题。  如果实际的小时/分钟/秒/月对您很重要(通常在 RTC 中)、则您也需要执行此操作(我们将在将来当然解决此问题、但现在这就是使其可靠运行的答案)。

    我和 Chris 一直在为您讨论此问题(也许您和 Chris 已经对此进行了更详细的讨论)、但您能告诉我您想如何处理给出的代码示例吗?  因为、我运行了它、它看起来工作正常、并显示一个闪烁的红色 LED。

    哦、等一下... 就是这样。  当我在调试模式下运行时、红色 LED 会按预期闪烁、但一旦我在 CCS 上退出调试模式、红色 LED 就会保持亮起且不再闪烁。  这是否与您遇到的问题相同?

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

    Terry、

                   您可以理解、此 API 示例存在一些问题。  我们将努力纠正这些问题。  

     

                   我有两个解决方案可为您提供:

     

    1. RTC_C_CLOCK_READ_READY_INTERRUPT 不能用于将器件从 LPM3唤醒。 您只需改用 LPM0即可。
      将线路126从       MAP_PCM_gotoLPM3 ()更改为             MAP_PCM_gotoLPM0 ();此处的唯一更改是3至0。

    2. 您在寄存器级别 C 中引用的 RTC_02代码使用预分频器中断、因为它可以从 LPM3唤醒。 您可以通过如下更改 RTC_VREGACY_ALARM 示例来使用 API 调用执行此操作:
      更改行110和113、以便清除/启用预分频器中断、而不是读取就绪中断。 只需将这两行中的 RTC_C_CLOCK 读取就绪中断更改为 RTC_C_PRINTERALE_Timer1_INTERRUPT。
      此外、在第109行的正上方插入以下代码:RTC_C_definePrescaleEvent (RTC_C_PRESALE_1、RTC_C_PSEVENTDIVIDER_128);//不要在此处使用 MAP_RTC_C_definePrescaleEvent 版本、它不能正常工作。
      最后、更改第139行上的 ISR、使其通过将 RTC_C_CLOCK _READ_READY_INTERRUPT 更改为 RTC_C_PRESALE_Timer1_INTERRUPT 来检查 PSIFG 而不是 RTCRDYIFG

     

    如果您在本示例中遇到任何其他意外结果、或者您有任何后续问题、请告诉我。 谢谢你。