PushToGo on STM32F429-Disco Board
Dependencies: BSP_DISCO_F429ZI LCD_DISCO_F429ZI pushtogo usb
RTCClockHR.h@7:bfd32470c0bc, 2018-09-23 (annotated)
- Committer:
- caoyu@caoyuan9642-desktop.MIT.EDU
- Date:
- Sun Sep 23 02:30:32 2018 -0400
- Revision:
- 7:bfd32470c0bc
Implemented HR clock.
BUG: Nudge below x1 speed has trouble switching direction
Who changed what in which revision?
User | Revision | Line number | New 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_ */ |