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.

[参考译文] MSP430F5659:RTC 月和日历月范围冲突

Guru**** 2535750 points
Other Parts Discussed in Thread: MSP430F5659

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/697352/msp430f5659-rtc-month-and-calendar-month-range-conflict

器件型号: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);
} 

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

    通常、当发现差异时、数据表是法律。 我会说这是一个有关如何为 RTC_B 实现 DriverLib 的错误 它与 RTC_A 模块看起来一样、但是 RTC_C 似乎被正确执行。 我会将其输入到我们的错误跟踪器中进行处理。 感谢大家的注意!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哇哦! 太糟糕了,TI 没有任何与 Knuth 检查等效的东西:)