esp8266: Reset "virtual RTC" on power on.
Initialize RTC period coefficients, etc. if RTC RAM doesn't contain valid values. time.time() then will return number of seconds since power-on, unless set to different timebase. This reuses MEM_MAGIC for the purpose beyond its initial purpose (but the whole modpybrtc.c need to be eventually reworked completely anyway).
This commit is contained in:
parent
57884996b9
commit
a4c8ef9d16
|
@ -37,6 +37,7 @@ extern void ets_delay_us();
|
||||||
|
|
||||||
void mp_hal_init(void) {
|
void mp_hal_init(void) {
|
||||||
ets_wdt_disable(); // it's a pain while developing
|
ets_wdt_disable(); // it's a pain while developing
|
||||||
|
mp_hal_rtc_init();
|
||||||
uart_init(UART_BIT_RATE_115200, UART_BIT_RATE_115200);
|
uart_init(UART_BIT_RATE_115200, UART_BIT_RATE_115200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
void ets_isr_mask(unsigned);
|
void ets_isr_mask(unsigned);
|
||||||
|
|
||||||
void mp_hal_init(void);
|
void mp_hal_init(void);
|
||||||
|
void mp_hal_rtc_init(void);
|
||||||
void mp_hal_feed_watchdog(void);
|
void mp_hal_feed_watchdog(void);
|
||||||
|
|
||||||
uint32_t mp_hal_ticks_us(void);
|
uint32_t mp_hal_ticks_us(void);
|
||||||
|
|
|
@ -49,6 +49,20 @@ typedef struct _pyb_rtc_obj_t {
|
||||||
// singleton RTC object
|
// singleton RTC object
|
||||||
STATIC const pyb_rtc_obj_t pyb_rtc_obj = {{&pyb_rtc_type}};
|
STATIC const pyb_rtc_obj_t pyb_rtc_obj = {{&pyb_rtc_type}};
|
||||||
|
|
||||||
|
void mp_hal_rtc_init(void) {
|
||||||
|
uint32_t magic;
|
||||||
|
|
||||||
|
system_rtc_mem_read(MEM_USER_MAGIC_ADDR, &magic, sizeof(magic));
|
||||||
|
if (magic != MEM_MAGIC) {
|
||||||
|
magic = MEM_MAGIC;
|
||||||
|
system_rtc_mem_write(MEM_USER_MAGIC_ADDR, &magic, sizeof(magic));
|
||||||
|
uint32_t cal = system_rtc_clock_cali_proc();
|
||||||
|
int64_t delta = 0;
|
||||||
|
system_rtc_mem_write(MEM_CAL_ADDR, &cal, sizeof(cal));
|
||||||
|
system_rtc_mem_write(MEM_DELTA_ADDR, &delta, sizeof(delta));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t pyb_rtc_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
|
STATIC mp_obj_t pyb_rtc_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
|
||||||
// check arguments
|
// check arguments
|
||||||
mp_arg_check_num(n_args, n_kw, 0, 0, false);
|
mp_arg_check_num(n_args, n_kw, 0, 0, false);
|
||||||
|
|
Loading…
Reference in New Issue