@@ -93,18 +93,14 @@ static void rtc_sanitize_time (uint8_t *regs) {
93
93
}
94
94
}
95
95
96
- static void rtc_wait_osc ( bool running ) {
97
- uint8_t rtcwkday ;
96
+ static void rtc_osc_stop ( void ) {
97
+ uint8_t tmp = 0x00 ;
98
98
99
- while (1 ) {
100
- rtc_read (RTC_ADDRESS_RTCWKDAY , & rtcwkday , 1 );
99
+ rtc_write (RTC_ADDRESS_RTCSEC , & tmp , 1 );
101
100
102
- if (running && (rtcwkday & RTC_RTCWKDAY_OSCRUN )) {
103
- return ;
104
- } else if (!running && (!(rtcwkday & RTC_RTCWKDAY_OSCRUN ))) {
105
- return ;
106
- }
107
- }
101
+ do {
102
+ rtc_read (RTC_ADDRESS_RTCWKDAY , & tmp , 1 );
103
+ } while (tmp & RTC_RTCWKDAY_OSCRUN );
108
104
}
109
105
110
106
static void rtc_read_time (void ) {
@@ -130,11 +126,7 @@ static void rtc_read_time (void) {
130
126
static void rtc_write_time (void ) {
131
127
uint8_t regs [7 ];
132
128
133
- regs [0 ] = 0x00 ;
134
-
135
- rtc_write (RTC_ADDRESS_RTCSEC , regs , 1 );
136
-
137
- rtc_wait_osc (false);
129
+ rtc_osc_stop ();
138
130
139
131
regs [0 ] = rtc_time .second ;
140
132
regs [1 ] = rtc_time .minute ;
@@ -147,11 +139,10 @@ static void rtc_write_time (void) {
147
139
rtc_sanitize_time (regs );
148
140
149
141
regs [0 ] |= RTC_RTCSEC_ST ;
150
- regs [3 ] |= (RTC_RTCWKDAY_OSCRUN | RTC_RTCWKDAY_VBATEN );
151
-
152
- rtc_write (RTC_ADDRESS_RTCSEC , regs , 7 );
142
+ regs [3 ] |= RTC_RTCWKDAY_VBATEN ;
153
143
154
- rtc_wait_osc (true);
144
+ rtc_write (RTC_ADDRESS_RTCMIN , & regs [1 ], 6 );
145
+ rtc_write (RTC_ADDRESS_RTCSEC , & regs [0 ], 1 );
155
146
}
156
147
157
148
static void rtc_read_region (void ) {
@@ -188,6 +179,7 @@ static void rtc_init (void) {
188
179
if (uninitialized ) {
189
180
buffer [0 ] = 0 ;
190
181
rtc_write (RTC_ADDRESS_SRAM_MAGIC , (uint8_t * ) (magic ), 4 );
182
+ rtc_write (RTC_ADDRESS_CONTROL , buffer , 1 );
191
183
rtc_write (RTC_ADDRESS_OSCTRIM , buffer , 1 );
192
184
rtc_write_time ();
193
185
rtc_write_region ();
0 commit comments