3
3
#include " mbed.h"
4
4
#include " target_init.h"
5
5
#include " ota.h"
6
+ #include " rtc.h"
6
7
#include " bootutil/bootutil_log.h"
7
8
8
9
// clock source is selected with CLOCK_SOURCE in json config
@@ -30,8 +31,6 @@ volatile uint8_t ledTargetValue = 20;
30
31
volatile int8_t ledDirection = 1 ;
31
32
volatile int divisor = 0 ;
32
33
33
- RTC_HandleTypeDef RtcHandle;
34
-
35
34
DigitalOut led (PK_6);
36
35
37
36
static inline void LED_pulse (DigitalOut* led)
@@ -40,8 +39,8 @@ static inline void LED_pulse(DigitalOut* led)
40
39
return ;
41
40
}
42
41
43
- if (HAL_GetTick () > 500 && double_tap_flag && HAL_RTCEx_BKUPRead (&RtcHandle, RTC_BKP_DR0) == 0xDF59 ) {
44
- HAL_RTCEx_BKUPWrite (&RtcHandle, RTC_BKP_DR0, 0 );
42
+ if (HAL_GetTick () > 500 && double_tap_flag && RTCGetBKPRegister ( RTC_BKP_DR0) == 0xDF59 ) {
43
+ RTCSetBKPRegister ( RTC_BKP_DR0, 0 );
45
44
double_tap_flag = false ;
46
45
}
47
46
@@ -61,77 +60,20 @@ static inline void LED_pulse(DigitalOut* led)
61
60
}
62
61
}
63
62
64
- void HAL_RTC_MspInit (RTC_HandleTypeDef *hrtc)
65
- {
66
- RCC_OscInitTypeDef RCC_OscInitStruct;
67
- RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
68
-
69
- /* ##-1- Configure LSE as RTC clock source ##################################*/
70
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI | RCC_OSCILLATORTYPE_LSE;
71
- RCC_OscInitStruct.PLL .PLLState = RCC_PLL_NONE;
72
- RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
73
- RCC_OscInitStruct.LSIState = RCC_LSI_ON;
74
- if (HAL_RCC_OscConfig (&RCC_OscInitStruct) != HAL_OK)
75
- {
76
- return ;
77
- }
78
-
79
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
80
- PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
81
- if (HAL_RCCEx_PeriphCLKConfig (&PeriphClkInitStruct) != HAL_OK)
82
- {
83
- return ;
84
- }
85
-
86
- /* ##-2- Enable RTC peripheral Clocks #######################################*/
87
- /* Enable RTC Clock */
88
- __HAL_RCC_RTC_ENABLE ();
89
- }
90
-
91
- #define RTC_ASYNCH_PREDIV 0x7F /* LSE as RTC clock */
92
- #define RTC_SYNCH_PREDIV 0x00FF /* LSE as RTC clock */
93
-
94
- void RTC_CalendarBkupInit (void )
95
- {
96
-
97
- /* ##-1- Configure the RTC peripheral #######################################*/
98
- /* Configure RTC prescaler and RTC data registers */
99
- /* RTC configured as follow:
100
- - Hour Format = Format 24
101
- - Asynch Prediv = Value according to source clock
102
- - Synch Prediv = Value according to source clock
103
- - OutPut = Output Disable
104
- - OutPutPolarity = High Polarity
105
- - OutPutType = Open Drain */
106
- RtcHandle.Instance = RTC;
107
- RtcHandle.Init .HourFormat = RTC_HOURFORMAT_24;
108
- RtcHandle.Init .AsynchPrediv = RTC_ASYNCH_PREDIV;
109
- RtcHandle.Init .SynchPrediv = RTC_SYNCH_PREDIV;
110
- RtcHandle.Init .OutPut = RTC_OUTPUT_DISABLE;
111
- RtcHandle.Init .OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
112
- RtcHandle.Init .OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
113
-
114
- if (HAL_RTC_Init (&RtcHandle) != HAL_OK)
115
- {
116
- }
117
- }
118
63
119
64
int target_init (void ) {
120
65
DigitalIn boot_sel (PI_8,PullDown);
121
66
122
- HAL_RTC_MspInit (&RtcHandle);
123
- RTC_CalendarBkupInit ();
124
-
125
- int magic = HAL_RTCEx_BKUPRead (&RtcHandle, RTC_BKP_DR0);
126
- BOOT_LOG_DBG (" Envie magic 0x%x" );
67
+ int magic = RTCGetBKPRegister (RTC_BKP_DR0);
68
+ BOOT_LOG_DBG (" Envie magic 0x%x" , magic);
127
69
128
70
// in case we have been reset let's wait 500 ms to see if user is trying to stay in bootloader
129
71
if (ResetReason::get () == RESET_REASON_PIN_RESET) {
130
72
// now that we've been reset let's set magic. resetting with this set will
131
73
// flag we need to stay in bootloader.
132
- HAL_RTCEx_BKUPWrite (&RtcHandle, RTC_BKP_DR0, 0xDF59 );
74
+ RTCSetBKPRegister ( RTC_BKP_DR0, 0xDF59 );
133
75
HAL_Delay (500 );
134
- BOOT_LOG_DBG (" Envie magic set 0x%x" , HAL_RTCEx_BKUPRead (&RtcHandle, RTC_BKP_DR0));
76
+ BOOT_LOG_DBG (" Envie magic set 0x%x" , RTCGetBKPRegister ( RTC_BKP_DR0));
135
77
}
136
78
137
79
DigitalOut usb_reset (PJ_4, 0 );
@@ -223,24 +165,6 @@ int target_init(void) {
223
165
224
166
HAL_Delay (10 );
225
167
226
- if (magic == 0x07AA ) {
227
- // DR1 contains the backing storage type, DR2 the offset in case of raw device / MBR
228
- storageType storage_type = (storageType)HAL_RTCEx_BKUPRead (&RtcHandle, RTC_BKP_DR1);
229
- uint32_t offset = HAL_RTCEx_BKUPRead (&RtcHandle, RTC_BKP_DR2);
230
- uint32_t update_size = HAL_RTCEx_BKUPRead (&RtcHandle, RTC_BKP_DR3);
231
- // int ota_result =
232
- setOTAData (storage_type, offset, update_size);
233
- /* if (ota_result == 0) {
234
- // clean reboot with success flag
235
- HAL_RTCEx_BKUPWrite(&RtcHandle, RTC_BKP_DR0, 0);
236
- HAL_FLASH_Lock();
237
- // wait for external reboot
238
- while (1) {}
239
- } else {
240
- HAL_RTCEx_BKUPWrite(&RtcHandle, RTC_BKP_DR0, ota_result);
241
- }*/
242
- }
243
-
244
168
/* Test if user code is programmed starting from USBD_DFU_APP_DEFAULT_ADD
245
169
* address. TODO check MCUBoot header instead.
246
170
*/
@@ -250,13 +174,13 @@ int target_init(void) {
250
174
|| (((*(__IO uint32_t *) 0x08040000 ) & 0xFF000000 ) == 0x38000000 );
251
175
252
176
if (app_valid && magic != 0xDF59 && magic != 0x07AA && boot_sel==0 ) {
253
- HAL_RTCEx_BKUPWrite (&RtcHandle, RTC_BKP_DR0, 0 );
177
+ RTCSetBKPRegister ( RTC_BKP_DR0, 0 );
254
178
HAL_FLASH_Lock ();
255
- BOOT_LOG_DBG (" Envie app magic 0x%x" , HAL_RTCEx_BKUPRead (&RtcHandle, RTC_BKP_DR0));
179
+ BOOT_LOG_DBG (" Envie app magic 0x%x" , RTCGetBKPRegister ( RTC_BKP_DR0));
256
180
return 0 ;
257
181
258
182
} else {
259
- BOOT_LOG_DBG (" Envie loop magic 0x%x" , HAL_RTCEx_BKUPRead (&RtcHandle, RTC_BKP_DR0));
183
+ BOOT_LOG_DBG (" Envie loop magic 0x%x" , RTCGetBKPRegister ( RTC_BKP_DR0));
260
184
return 1 ;
261
185
}
262
186
}
@@ -272,13 +196,10 @@ extern "C" {
272
196
}
273
197
274
198
void envie_loop (void ) {
275
-
276
- BOOT_LOG_INF (" Application not found. Starting boot loop\n " );
277
-
278
- HAL_RTCEx_BKUPWrite (&RtcHandle, RTC_BKP_DR0, 0 );
199
+ RTCSetBKPRegister (RTC_BKP_DR0, 0 );
279
200
280
201
SetSysClock_PLL_HSE (1 , false );
281
- SystemCoreClockUpdate ();;
202
+ SystemCoreClockUpdate ();
282
203
283
204
// turnDownEthernet();
284
205
0 commit comments