summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobert-hh <robert@hammelrath.com>2022-06-29 14:09:57 +0200
committerDamien George <damien@micropython.org>2022-10-25 22:41:31 +1100
commit64e3c351de0959660d1a6b691ee7dbf2de565fbe (patch)
treec22d4c7f6bd37257433bed552658497b61b9894b
parent1c32cec7f11864a9bc67f988e39e7dfc7c33188e (diff)
samd/modmachine: Add machine.reset_cause().
-rw-r--r--ports/samd/modmachine.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/ports/samd/modmachine.c b/ports/samd/modmachine.c
index 21d700ac3..db3f159cc 100644
--- a/ports/samd/modmachine.c
+++ b/ports/samd/modmachine.c
@@ -139,6 +139,17 @@ STATIC mp_obj_t machine_enable_irq(mp_obj_t state_in) {
}
MP_DEFINE_CONST_FUN_OBJ_1(machine_enable_irq_obj, machine_enable_irq);
+STATIC mp_obj_t machine_reset_cause(void) {
+ #if defined(MCU_SAMD21)
+ return MP_OBJ_NEW_SMALL_INT(PM->RCAUSE.reg);
+ #elif defined(MCU_SAMD51)
+ return MP_OBJ_NEW_SMALL_INT(RSTC->RCAUSE.reg);
+ #else
+ return MP_OBJ_NEW_SMALL_INT(0);
+ #endif
+}
+MP_DEFINE_CONST_FUN_OBJ_0(machine_reset_cause_obj, machine_reset_cause);
+
STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_umachine) },
{ MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&machine_reset_obj) },
@@ -165,8 +176,18 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) },
{ MP_ROM_QSTR(MP_QSTR_disable_irq), MP_ROM_PTR(&machine_disable_irq_obj) },
{ MP_ROM_QSTR(MP_QSTR_enable_irq), MP_ROM_PTR(&machine_enable_irq_obj) },
+ { MP_ROM_QSTR(MP_QSTR_reset_cause), MP_ROM_PTR(&machine_reset_cause_obj) },
{ MP_ROM_QSTR(MP_QSTR_time_pulse_us), MP_ROM_PTR(&machine_time_pulse_us_obj) },
{ MP_ROM_QSTR(MP_QSTR_bitstream), MP_ROM_PTR(&machine_bitstream_obj) },
+
+ // Class constants.
+ // Use numerical constants instead of the symbolic names,
+ // since the names differ between SAMD21 and SAMD51.
+ { MP_ROM_QSTR(MP_QSTR_PWRON_RESET), MP_ROM_INT(0x01) },
+ { MP_ROM_QSTR(MP_QSTR_HARD_RESET), MP_ROM_INT(0x10) },
+ { MP_ROM_QSTR(MP_QSTR_WDT_RESET), MP_ROM_INT(0x20) },
+ { MP_ROM_QSTR(MP_QSTR_SOFT_RESET), MP_ROM_INT(0x40) },
+ { MP_ROM_QSTR(MP_QSTR_DEEPSLEEP_RESET), MP_ROM_INT(0x80) },
};
STATIC MP_DEFINE_CONST_DICT(machine_module_globals, machine_module_globals_table);