@@ -13,29 +13,31 @@ UINT interrupt_save;
1313static UINT us_to_second_ticks (ULONG us , UINT second_fractions )
1414{
1515 // Second fraction = SS / (PREDIV_S + 1)
16- return (uint64_t )us * (second_fractions + 1L ) /
17- 1000000L ; // TODO: double check overflow issues
16+ return (uint64_t )us * (second_fractions + 1 ) / 1000000L ;
1817}
1918
2019static ULONG second_ticks_to_us (UINT second_ticks , UINT second_fractions )
2120{
22- return (uint64_t )1000000L * second_ticks /
23- (second_fractions + 1 ); // TODO: double check overflow issues
21+ return (uint64_t )1000000L * second_ticks / (second_fractions + 1 );
2422}
2523
2624static void set_subsecond (UINT rtc_sub_second_tick , UINT second_fractions )
2725{
26+ if (~(rtc_sub_second_tick >> 15 & 0b1 )) {
27+ printf ("rtc SS overflow ig" );
28+ }
29+
2830 UINT rtp_sub_second_tick = us_to_second_ticks (
2931 ptp_date_time -> nanosecond / 1000 , second_fractions );
3032
3133 UINT offset_tick = 0 ; // ticks to go backwards
3234 UINT offset_ahead_1s = RTC_SHIFTADD1S_RESET ;
33- if (rtc_sub_second_tick > rtp_sub_second_tick ) { // local ahead
35+ if (rtc_sub_second_tick >= rtp_sub_second_tick ) { // local ahead
3436 offset_tick = rtc_sub_second_tick - rtp_sub_second_tick ;
3537 } else { // local behind
3638 offset_ahead_1s = RTC_SHIFTADD1S_SET ;
37- offset_tick = second_fractions + rtc_sub_second_tick -
38- rtp_sub_second_tick ;
39+ offset_tick = second_fractions -
40+ ( rtc_sub_second_tick - rtp_sub_second_tick ) ;
3941 }
4042 HAL_RTCEx_SetSynchroShift (& hrtc1 , offset_tick , offset_ahead_1s );
4143}
0 commit comments