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