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.

[参考译文] CCS/MSP432P401R:RTC 日期和时间配置

Guru**** 2609895 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/652038/ccs-msp432p401r-rtc-date-and-time-configuration

器件型号:MSP432P401R

工具/软件:Code Composer Studio

我已经完成了一个固件、用户可以在其中根据硬件配置选择调整日期和时间。 问题是... 在用户调整日期和时间之后、我希望使用 RTC 来控制手表并在 LCD 中显示当前日期和时间。 因此、如果我需要使用 bcd 代码、如何转换 bcd 代码中的用户配置、以及在以十进制转换显示在 LCD 屏幕中之后。

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

    Armando、

     当然、可以设置从低功耗模式唤醒的 RTC、以更新 LCD 等输出。 TI Resource Explorer 提供指向 SimpleLink MSP432 SDK 的链接  、该 SDK 具有用于为此目的使用 RTC 运行时钟/日历的示例代码。 此示例可在此处找到: RTC_c_calender_interrupt。此示例还显示了时钟/日历信息的存储方式。 从此处可以直接转换您必须/从该格式转换的任何用户配置信息。

    driverlib API 用于 RTC 的数据结构在示例中显示为:

    //![简单 RTC 配置]
    /*时间为1955年11月12日星期六晚上10:03 *
    CONST RTC_C_Calendar CurrentTime =

    0x00、
    0x03、
    0x22、
    0x06、
    0x12、
    0x11、
    0x1955
    };
    //![简单 RTC 配置]

    下面列出了用于访问 RTC 的 API:

    newTime = MAP_RTC_C_getCalendarTime()

    /*按照中的时间描述,用当前时间初始化 RTC
    *定义部分*/
    MAP_RTC_C_initCalendar (&CurrentTime、RTC_C_FORMAT_BCD);

    /*设置10:04pm 的日历警报(对于磁通电容器)*/
    MAP_RTC_C_setCalendarAlarm (0x04、0x22、RTC_C_ALARMCONDITION_OFF、
    RTC_C_ALARMCONDITION_OFF);

    希望这会有所帮助。

    此致、

     Bob L

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我明白了、但我觉得我来到了一个死区、我在 Code Composer Studio (CMSIS)上开发了所有代码、现在我需要将用户给出的配置传递给 RTC 变量、直到现在一切都正常、一切都准备就绪。 现在、我如何获取电流、秒、分钟、小时...
    我需要一些帮助来解决这个问题、我是 MSP432的新手。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我将代码留给希望有人帮助我。 advance.e2e.ti.com/.../3060.clock.c 中的存储罐

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

    现在我对我的文件 clock.c 进行了一些更改、我在寄存器的时钟工作、那么我如何获取每个参数(年、月、日、小时、分钟)

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

    Armando、

     如果您询问如何从 RTC 中提取日历数据,则由 RTC_C_getCalendarTime() API 处理。 此 API 返回 RTC_C_Calendar 对象、其定义如下所示:

    typedef struct _rtc_Calendar


      uint_fast8_t 秒;
      uint_fast8_t 分钟;
      uint_fast8_t 小时;
      uint_fast8_t dayOfWeek;
      uint_fast8_t 日月;
      uint_fast8_t 月;
      uint_fast16_t 年;
    } RTC_C_Calendar;

    RTC_C_Calendar 当前时间;

    currTime = RTC_C_getCalendarTime();

    然后、每个参数被访问为:

    当前时间->秒
    当前时间->分钟
    当前时间->小时

    等等。

    此致、

     Bob L

     

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

    Bob L 感谢您的帮助,我解决了我的问题。如果您想共享我的解决方案,我必须将十进制转换为 BCD,使用 MSP432 RTC,并且要在 LCD 中获得实时时间,我必须通过 RTC 寄存器将 BCD 转换为十进制。

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

    Armando、

     感谢您的回应、很高兴听到您找到了解决方案。 我不明白是 BCD 到十进制转换才是问题所在。 您可以通过使用 RTCCTL1寄存器中的 RTCBCD 位让 RTC 始终使用十进制来跳过转换。 在读取这些值并将其发送到 LCD 时、您无需进行转换。 可以使用 RTC_C_initCalendar()函数选择 BCD/ Decimal 模式。 RTC_c_calender_interrupt.c 示例代码显示了如何完成此操作:  

    /*按照 定义部分中的时间说明使用当前时间初始化 RTC */
    MAP_RTC_C_initCalendar (&CurrentTime、RTC_C_FORMAT_BCD); //或使用 RTC_C_FORMAT_BINARY 进行十进制表示

    正如其他阅读此帖子的人所参考的、将 BCD 转换为十进制和十进制转换为 BCD   的 RTC 寄存器为:RTCBCD2BIN 和 RTCBIN2BCD。 写入这些寄存器、然后从同一寄存器读回、将自动执行所述的转换。 有执行相同函数的等效 driverlib 调用:

    uint16_t RTC_C_convertBCDToBinary (uint16_t valueToConvert);   和

    uint16_t RTC_C_convertBinaryToBCD (uint16_t valueToConvert);

    有关 RTC 寄存器的更多详细信息、请参阅《MSP432技术参考手册》的 RTC 部分。 以及 Driverlib 用户指南

    此致、

     Bob L.