|
39 | 39 | #include "pin.h" |
40 | 40 | #include "timer.h" |
41 | 41 | #include "usb.h" |
| 42 | +#include "rtc.h" |
42 | 43 | #include "i2c.h" |
43 | 44 | #include "spi.h" |
44 | 45 |
|
@@ -281,6 +282,9 @@ STATIC mp_obj_t machine_freq(mp_uint_t n_args, const mp_obj_t *args) { |
281 | 282 | } else { |
282 | 283 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; |
283 | 284 | } |
| 285 | + uint32_t h = RCC_ClkInitStruct.AHBCLKDivider >> 4; |
| 286 | + uint32_t b1 = RCC_ClkInitStruct.APB1CLKDivider >> 10; |
| 287 | + uint32_t b2 = RCC_ClkInitStruct.APB2CLKDivider >> 10; |
284 | 288 | if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { |
285 | 289 | goto fail; |
286 | 290 | } |
@@ -312,6 +316,23 @@ STATIC mp_obj_t machine_freq(mp_uint_t n_args, const mp_obj_t *args) { |
312 | 316 | // re-init TIM3 for USB CDC rate |
313 | 317 | timer_tim3_init(); |
314 | 318 |
|
| 319 | + #if defined(MICROPY_HW_CLK_LAST_FREQ) && MICROPY_HW_CLK_LAST_FREQ |
| 320 | + #if defined(MCU_SERIES_F7) |
| 321 | + #define FREQ_BKP BKP31R |
| 322 | + #else |
| 323 | + #define FREQ_BKP BKP19R |
| 324 | + #endif |
| 325 | + // qqqqqqqq pppppppp nnnnnnnn nnmmmmmm |
| 326 | + // qqqqQQQQ ppppppPP nNNNNNNN NNMMMMMM |
| 327 | + // 222111HH HHQQQQPP nNNNNNNN NNMMMMMM |
| 328 | + p = (p / 2) - 1; |
| 329 | + RTC->FREQ_BKP = m |
| 330 | + | (n << 6) | (p << 16) | (q << 18) |
| 331 | + | (h << 22) |
| 332 | + | (b1 << 26) |
| 333 | + | (b2 << 29); |
| 334 | + #endif |
| 335 | + |
315 | 336 | return mp_const_none; |
316 | 337 |
|
317 | 338 | fail:; |
@@ -349,6 +370,8 @@ STATIC mp_obj_t machine_sleep(void) { |
349 | 370 | MP_DEFINE_CONST_FUN_OBJ_0(machine_sleep_obj, machine_sleep); |
350 | 371 |
|
351 | 372 | STATIC mp_obj_t machine_deepsleep(void) { |
| 373 | + rtc_init_finalise(); |
| 374 | + |
352 | 375 | #if defined(MCU_SERIES_F7) |
353 | 376 | printf("machine.deepsleep not supported yet\n"); |
354 | 377 | #else |
|
0 commit comments