@@ -733,19 +733,16 @@ void RTC_GetTime(uint8_t *hours, uint8_t *minutes, uint8_t *seconds, uint32_t *s
733
733
if (subSeconds != NULL ) {
734
734
/*
735
735
* The subsecond is the free-running downcounter, to be converted in milliseconds.
736
- * Give one more to compensate the fqce_apre uncertainty
737
736
*/
738
- if (initMode == MODE_BINARY_MIX ) {
737
+ if (initMode == MODE_BINARY_ONLY ) {
739
738
* subSeconds = (((UINT32_MAX - RTC_TimeStruct .SubSeconds + 1 ) & UINT32_MAX )
740
739
* 1000 ) / fqce_apre ;
741
- * subSeconds = * subSeconds % 1000 ; /* nb of milliseconds [0..999] */
742
- } else if (initMode == MODE_BINARY_ONLY ) {
743
- * subSeconds = (((UINT32_MAX - RTC_TimeStruct .SubSeconds + 1 ) & UINT32_MAX )
740
+ } else if (initMode == MODE_BINARY_MIX ) {
741
+ * subSeconds = (((UINT32_MAX - RTC_TimeStruct .SubSeconds ) & predivSync )
744
742
* 1000 ) / fqce_apre ;
745
743
} else {
746
744
/* the subsecond register value is converted in millisec on 32bit */
747
- * subSeconds = (((predivSync - RTC_TimeStruct .SubSeconds + 1 ) & predivSync )
748
- * 1000 ) / fqce_apre ;
745
+ * subSeconds = ((predivSync - RTC_TimeStruct .SubSeconds ) * 1000 ) / (predivSync + 1 );
749
746
}
750
747
}
751
748
#else
@@ -856,11 +853,14 @@ void RTC_StartAlarm(alarm_t name, uint8_t day, uint8_t hours, uint8_t minutes, u
856
853
* The subsecond param is a nb of milliseconds to be converted in a subsecond
857
854
* downcounter value and to be comapred to the SubSecond register
858
855
*/
859
- if (( initMode == MODE_BINARY_MIX ) || ( initMode == MODE_BINARY_NONE ) ) {
856
+ if (initMode == MODE_BINARY_ONLY ) {
860
857
/* the subsecond is the millisecond to be converted in a subsecond downcounter value */
861
- RTC_AlarmStructure .AlarmTime .SubSeconds = UINT32_MAX - (subSeconds * (predivSync + 1 )) / 1000 + 1 ;
858
+ RTC_AlarmStructure .AlarmTime .SubSeconds = UINT32_MAX - (subSeconds * (predivSync + 1 )) / 1000 ;
859
+ } else if (initMode == MODE_BINARY_MIX ) {
860
+ /* the subsecond is the millisecond to be converted in a subsecond downcounter value */
861
+ RTC_AlarmStructure .AlarmTime .SubSeconds = UINT32_MAX - (subSeconds * (predivSync + 1 )) / 1000 ;
862
862
} else {
863
- RTC_AlarmStructure .AlarmTime .SubSeconds = predivSync - (subSeconds * (predivSync + 1 )) / 1000 + 1 ;
863
+ RTC_AlarmStructure .AlarmTime .SubSeconds = predivSync - (subSeconds * (predivSync + 1 )) / 1000 ;
864
864
}
865
865
} else {
866
866
RTC_AlarmStructure .AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL ;
@@ -922,7 +922,11 @@ void RTC_StartAlarm(alarm_t name, uint8_t day, uint8_t hours, uint8_t minutes, u
922
922
RTC_AlarmStructure .AlarmSubSecondMask = mask << RTC_ALRMASSR_MASKSS_Pos ;
923
923
}
924
924
#if defined(RTC_ICSR_BIN )
925
- if ((initMode == MODE_BINARY_MIX ) || (initMode == MODE_BINARY_ONLY )) {
925
+ if (initMode == MODE_BINARY_ONLY ) {
926
+ /* We have an SubSecond alarm to set in RTC_BINARY_MIX or RTC_BINARY_ONLY mode */
927
+ /* The subsecond in ms is converted in ticks unit 1 tick is 1000 / fqce_apre */
928
+ RTC_AlarmStructure .AlarmTime .SubSeconds = UINT32_MAX - (subSeconds * (predivSync + 1 )) / 1000 ;
929
+ } else if (initMode == MODE_BINARY_MIX ) {
926
930
/* We have an SubSecond alarm to set in RTC_BINARY_MIX or RTC_BINARY_ONLY mode */
927
931
/* The subsecond in ms is converted in ticks unit 1 tick is 1000 / fqce_apre */
928
932
RTC_AlarmStructure .AlarmTime .SubSeconds = UINT32_MAX - (subSeconds * (predivSync + 1 )) / 1000 ;
@@ -1026,11 +1030,14 @@ void RTC_GetAlarm(alarm_t name, uint8_t *day, uint8_t *hours, uint8_t *minutes,
1026
1030
* The subsecond is the bit SS[14:0] of the ALARM SSR register (not ALARMxINR)
1027
1031
* to be converted in milliseconds
1028
1032
*/
1029
- if ((initMode == MODE_BINARY_MIX ) || (initMode == MODE_BINARY_ONLY )) {
1033
+ if (initMode == MODE_BINARY_ONLY ) {
1034
+ /* read the ALARM SSR register on SS[14:0] bits --> 0x7FFF */
1035
+ * subSeconds = (((0x7fff - RTC_AlarmStructure .AlarmTime .SubSeconds + 1 ) & 0x7fff ) * 1000 ) / fqce_apre ;
1036
+ } else if (initMode == MODE_BINARY_MIX ) {
1030
1037
/* read the ALARM SSR register on SS[14:0] bits --> 0x7FFF */
1031
1038
* subSeconds = (((0x7fff - RTC_AlarmStructure .AlarmTime .SubSeconds + 1 ) & 0x7fff ) * 1000 ) / fqce_apre ;
1032
1039
} else {
1033
- * subSeconds = ((( predivSync - RTC_AlarmStructure .AlarmTime .SubSeconds + 1 ) & predivSync ) * 1000 ) / (predivSync + 1 );
1040
+ * subSeconds = ((predivSync - RTC_AlarmStructure .AlarmTime .SubSeconds ) * 1000 ) / (predivSync + 1 );
1034
1041
}
1035
1042
}
1036
1043
#else
0 commit comments