|
26 | 26 |
|
27 | 27 | #include "py/runtime.h"
|
28 | 28 | #include "py/mphal.h"
|
| 29 | +#include "lib/utils/pyexec.h" |
29 | 30 | #include "extmod/machine_i2c.h"
|
30 | 31 | #include "extmod/machine_mem.h"
|
| 32 | +#include "extmod/machine_pulse.h" |
31 | 33 | #include "extmod/machine_spi.h"
|
32 | 34 |
|
33 | 35 | #include "modmachine.h"
|
34 | 36 | #include "hardware/clocks.h"
|
35 | 37 | #include "hardware/watchdog.h"
|
36 | 38 | #include "pico/bootrom.h"
|
| 39 | +#include "pico/unique_id.h" |
37 | 40 |
|
38 | 41 | #define RP2_RESET_PWRON (1)
|
39 | 42 | #define RP2_RESET_WDT (3)
|
40 | 43 |
|
| 44 | +STATIC mp_obj_t machine_unique_id(void) { |
| 45 | + pico_unique_board_id_t id; |
| 46 | + pico_get_unique_board_id(&id); |
| 47 | + return mp_obj_new_bytes(id.id, sizeof(id.id)); |
| 48 | +} |
| 49 | +MP_DEFINE_CONST_FUN_OBJ_0(machine_unique_id_obj, machine_unique_id); |
| 50 | + |
| 51 | +STATIC mp_obj_t machine_soft_reset(void) { |
| 52 | + pyexec_system_exit = PYEXEC_FORCED_EXIT; |
| 53 | + mp_raise_type(&mp_type_SystemExit); |
| 54 | +} |
| 55 | +STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_soft_reset_obj, machine_soft_reset); |
| 56 | + |
41 | 57 | STATIC mp_obj_t machine_reset(void) {
|
42 | 58 | watchdog_reboot(0, SRAM_END, 0);
|
43 | 59 | for (;;) {
|
@@ -69,12 +85,61 @@ STATIC mp_obj_t machine_freq(void) {
|
69 | 85 | }
|
70 | 86 | MP_DEFINE_CONST_FUN_OBJ_0(machine_freq_obj, machine_freq);
|
71 | 87 |
|
| 88 | +STATIC mp_obj_t machine_idle(void) { |
| 89 | + best_effort_wfe_or_timeout(make_timeout_time_ms(1)); |
| 90 | + return mp_const_none; |
| 91 | +} |
| 92 | +STATIC MP_DEFINE_CONST_FUN_OBJ_0(machine_idle_obj, machine_idle); |
| 93 | + |
| 94 | +STATIC mp_obj_t machine_lightsleep(size_t n_args, const mp_obj_t *args) { |
| 95 | + if (n_args == 0) { |
| 96 | + for (;;) { |
| 97 | + MICROPY_EVENT_POLL_HOOK |
| 98 | + } |
| 99 | + } else { |
| 100 | + mp_hal_delay_ms(mp_obj_get_int(args[0])); |
| 101 | + } |
| 102 | + return mp_const_none; |
| 103 | +} |
| 104 | +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_lightsleep_obj, 0, 1, machine_lightsleep); |
| 105 | + |
| 106 | +STATIC mp_obj_t machine_deepsleep(size_t n_args, const mp_obj_t *args) { |
| 107 | + machine_lightsleep(n_args, args); |
| 108 | + return machine_reset(); |
| 109 | +} |
| 110 | +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_deepsleep_obj, 0, 1, machine_deepsleep); |
| 111 | + |
| 112 | +STATIC mp_obj_t machine_disable_irq(void) { |
| 113 | + uint32_t state = MICROPY_BEGIN_ATOMIC_SECTION(); |
| 114 | + return mp_obj_new_int(state); |
| 115 | +} |
| 116 | +MP_DEFINE_CONST_FUN_OBJ_0(machine_disable_irq_obj, machine_disable_irq); |
| 117 | + |
| 118 | +STATIC mp_obj_t machine_enable_irq(mp_obj_t state_in) { |
| 119 | + uint32_t state = mp_obj_get_int(state_in); |
| 120 | + MICROPY_END_ATOMIC_SECTION(state); |
| 121 | + return mp_const_none; |
| 122 | +} |
| 123 | +MP_DEFINE_CONST_FUN_OBJ_1(machine_enable_irq_obj, machine_enable_irq); |
| 124 | + |
72 | 125 | STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
|
73 | 126 | { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_umachine) },
|
| 127 | + { MP_ROM_QSTR(MP_QSTR_unique_id), MP_ROM_PTR(&machine_unique_id_obj) }, |
| 128 | + { MP_ROM_QSTR(MP_QSTR_soft_reset), MP_ROM_PTR(&machine_soft_reset_obj) }, |
74 | 129 | { MP_ROM_QSTR(MP_QSTR_reset), MP_ROM_PTR(&machine_reset_obj) },
|
75 | 130 | { MP_ROM_QSTR(MP_QSTR_reset_cause), MP_ROM_PTR(&machine_reset_cause_obj) },
|
76 | 131 | { MP_ROM_QSTR(MP_QSTR_bootloader), MP_ROM_PTR(&machine_bootloader_obj) },
|
77 | 132 | { MP_ROM_QSTR(MP_QSTR_freq), MP_ROM_PTR(&machine_freq_obj) },
|
| 133 | + |
| 134 | + { MP_ROM_QSTR(MP_QSTR_idle), MP_ROM_PTR(&machine_idle_obj) }, |
| 135 | + { MP_ROM_QSTR(MP_QSTR_lightsleep), MP_ROM_PTR(&machine_lightsleep_obj) }, |
| 136 | + { MP_ROM_QSTR(MP_QSTR_deepsleep), MP_ROM_PTR(&machine_deepsleep_obj) }, |
| 137 | + |
| 138 | + { MP_ROM_QSTR(MP_QSTR_disable_irq), MP_ROM_PTR(&machine_disable_irq_obj) }, |
| 139 | + { MP_ROM_QSTR(MP_QSTR_enable_irq), MP_ROM_PTR(&machine_enable_irq_obj) }, |
| 140 | + |
| 141 | + { MP_ROM_QSTR(MP_QSTR_time_pulse_us), MP_ROM_PTR(&machine_time_pulse_us_obj) }, |
| 142 | + |
78 | 143 | { MP_ROM_QSTR(MP_QSTR_mem8), MP_ROM_PTR(&machine_mem8_obj) },
|
79 | 144 | { MP_ROM_QSTR(MP_QSTR_mem16), MP_ROM_PTR(&machine_mem16_obj) },
|
80 | 145 | { MP_ROM_QSTR(MP_QSTR_mem32), MP_ROM_PTR(&machine_mem32_obj) },
|
|
0 commit comments