PushToGo on STM32F429-Disco Board

Dependencies:   BSP_DISCO_F429ZI LCD_DISCO_F429ZI pushtogo usb

Committer:
caoyu@caoyuan9642-desktop.MIT.EDU
Date:
Sun Sep 23 02:31:28 2018 -0400
Revision:
8:f0455a1d4709
Parent:
7:bfd32470c0bc
merge

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 1 /*
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 2 * RTCClockHR.h
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 3 *
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 4 * Created on: Sep 23, 2018
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 5 * Author: caoyu
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 6 */
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 7
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 8 #ifndef RTCCLOCKHR_H_
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 9 #define RTCCLOCKHR_H_
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 10
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 11 #include "mbed.h"
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 12 #include "RTCClock.h"
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 13 #include "mbed_mktime.h"
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 14 #include "rtc_api_hal.h"
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 15
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 16 class RTCClockHR: public RTCClock {
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 17 public:
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 18 RTCClockHR(){
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 19 }
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 20 virtual ~RTCClockHR(){
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 21 }
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 22
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 23 virtual double getTimeHighResolution() {
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 24 struct tm timeinfo;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 25
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 26 /* Since the shadow registers are bypassed we have to read the time twice and compare them until both times are the same */
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 27 uint32_t Read_time = RTC->TR & RTC_TR_RESERVED_MASK;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 28 uint32_t Read_date = RTC->DR & RTC_DR_RESERVED_MASK;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 29 uint32_t Read_ss = RTC->SSR & (0xFFFF);
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 30
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 31 while ((Read_ss != (RTC->SSR & 0xFFFF))
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 32 || (Read_time != (RTC->TR & RTC_TR_RESERVED_MASK))
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 33 || (Read_date != (RTC->DR & RTC_DR_RESERVED_MASK))) {
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 34 Read_ss = RTC->SSR & 0xFFFF;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 35 Read_time = RTC->TR & RTC_TR_RESERVED_MASK;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 36 Read_date = RTC->DR & RTC_DR_RESERVED_MASK;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 37 }
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 38
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 39 /* Setup a tm structure based on the RTC
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 40 struct tm :
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 41 tm_sec seconds after the minute 0-61
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 42 tm_min minutes after the hour 0-59
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 43 tm_hour hours since midnight 0-23
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 44 tm_mday day of the month 1-31
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 45 tm_mon months since January 0-11
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 46 tm_year years since 1900
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 47 tm_yday information is ignored by _rtc_maketime
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 48 tm_wday information is ignored by _rtc_maketime
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 49 tm_isdst information is ignored by _rtc_maketime
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 50 */
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 51 timeinfo.tm_mday = RTC_Bcd2ToByte(
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 52 (uint8_t) (Read_date & (RTC_DR_DT | RTC_DR_DU)));
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 53 timeinfo.tm_mon = RTC_Bcd2ToByte(
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 54 (uint8_t) ((Read_date & (RTC_DR_MT | RTC_DR_MU)) >> 8)) - 1;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 55 timeinfo.tm_year = RTC_Bcd2ToByte(
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 56 (uint8_t) ((Read_date & (RTC_DR_YT | RTC_DR_YU)) >> 16)) + 68;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 57 timeinfo.tm_hour = RTC_Bcd2ToByte(
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 58 (uint8_t) ((Read_time & (RTC_TR_HT | RTC_TR_HU)) >> 16));
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 59 timeinfo.tm_min = RTC_Bcd2ToByte(
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 60 (uint8_t) ((Read_time & (RTC_TR_MNT | RTC_TR_MNU)) >> 8));
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 61 timeinfo.tm_sec = RTC_Bcd2ToByte(
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 62 (uint8_t) ((Read_time & (RTC_TR_ST | RTC_TR_SU)) >> 0));
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 63
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 64 // Convert to timestamp
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 65 time_t t;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 66 if (_rtc_maketime(&timeinfo, &t, RTC_4_YEAR_LEAP_YEAR_SUPPORT) == false) {
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 67 return 0;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 68 }
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 69
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 70 // Add fractional part
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 71 double thr = (double) t
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 72 + (double) (PREDIV_S_VALUE - Read_ss) / (PREDIV_S_VALUE + 1);
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 73
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 74 return thr;
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 75 }
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 76 };
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 77
caoyu@caoyuan9642-desktop.MIT.EDU 7:bfd32470c0bc 78 #endif /* RTCCLOCKHR_H_ */