请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F5659 主题中讨论的其他器件:MSPWARE、
我刚刚注意到、我的软件中的时间从5月30日跳到6月1日(Skips 5月31日)。 我的假设是、我有一个月范围错误[1-12]而不是[0-11]、导致时钟认为它是错误的月份、因此每个月的天数是错误的。 在测试了我自己的所有库后、我确定没有问题。 然后、我将焦点转移到 RTC 和日历数据类型、在这里我发现了以下内容:
在 SLAU208P (MSP430F5659用户指南)的611页上、寄存器 RTCMON 表示月份范围为[1-12]。 在 mspware 驱动程序库用户指南(DOCNUM-2.91.03.00)的第401页、日历数据类型指定月范围为[0-11]。 最后、在 driverlib/MSP430F5xx_6xx/rtc_b.c 中、函数 RTC_B_initCalendar ()和 RTC_B_getCalendarTime ()不考虑月份范围转换(请参阅随附的代码 和文档片段)。
RTC_b 函数似乎应该有一个月的转换。 我的调查结果是否有价值、或者我是否遗漏了什么?
void RTC_B_initCalendar (uint16_t baseAddress、 日历*CalendarTime、 uint16_t formatSelect) { HWREG8 (baseAddress + OFS_RTCCTL01_H)|= RTCHOLD; HWREG16 (baseAddress + OFS_RTCCTL01)&=~(RTCBCD); HWREG16 (baseAddress + OFS_RTCCTL01)|= formatSelect; HWREG8 (baseAddress + OFS_RTCTIM0_L)=日历时间->秒; HWREG8 (baseAddress + OFS_RTCTIM0_H)=日历时间->分钟; HWREG8 (baseAddress + OFS_RTCTIM1_L)=日历时间->小时; HWREG8 (baseAddress + OFS_RTCTIM1_H)=日历时间->DayOfWeek; HWREG8 (baseAddress + OFS_RTCDATE_L)=日历时间->月中某天; HWREG8 (baseAddress + OFS_RTCDATE_H)=日历时间->月; HWREG16 (baseAddress + OFS_RTCYEAR)=日历时间->年; } 日历 RTC_B_getCalendarTime (uint16_t baseAddress) { 日历 tempCal; while (!(HWREG16 (baseAddress + OFS_RTCCTL01)& RTCRDY)) { ; } tempCal.seconds = HWREG8 (baseAddress + OFS_RTCTIM0_L); tempCal.Minutes = HWREG8 (baseAddress + OFS_RTCTIM0_H); tempCal.Hours = HWREG8 (baseAddress + OFS_RTCTIM1_L); tempCal.DayOfWeek = HWREG8 (baseAddress + OFS_RTCTIM1_H); tempCal.dayofmonth = HWREG8 (baseAddress + OFS_RTCDATE_L); tempCal.Month = HWREG8 (baseAddress + OFS_RTCDATE_H); tempCal.Year = HWREG16 (baseAddress + OFS_RTCYEAR); 返回(tempCal); }