From 266be307770abe11c220eb493388807920914b7a Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Fri, 25 Aug 2017 13:00:27 -0700 Subject: atmel-samd: Introduce a nvm module for non-volatile byte-level memory access. (#203) * atmel-samd: Introduce a nvm module for non-volatile byte-level memory access. This allows for persisting small configuration values even when the file system is read-only from CircuitPython. Fixes #160 * Review feedback: * Add tests. * Fix non-zero index. * Fix len() --- shared-bindings/microcontroller/__init__.c | 13 ++++++++++++- shared-bindings/microcontroller/__init__.h | 8 ++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'shared-bindings/microcontroller') diff --git a/shared-bindings/microcontroller/__init__.c b/shared-bindings/microcontroller/__init__.c index fbe359ed9..56d363eed 100644 --- a/shared-bindings/microcontroller/__init__.c +++ b/shared-bindings/microcontroller/__init__.c @@ -90,6 +90,12 @@ STATIC mp_obj_t mcu_enable_interrupts(void) { } STATIC MP_DEFINE_CONST_FUN_OBJ_0(mcu_enable_interrupts_obj, mcu_enable_interrupts); +//| .. attribute:: nvm +//| +//| Available non-volatile memory. Its a `nvm.ByteArray` when available or +//| ``None`` otherwise. +//| + //| :mod:`microcontroller.pin` --- Microcontroller pin names //| -------------------------------------------------------- //| @@ -109,7 +115,12 @@ STATIC const mp_rom_map_elem_t mcu_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_delay_us), MP_ROM_PTR(&mcu_delay_us_obj) }, { MP_ROM_QSTR(MP_QSTR_disable_interrupts), MP_ROM_PTR(&mcu_disable_interrupts_obj) }, { MP_ROM_QSTR(MP_QSTR_enable_interrupts), MP_ROM_PTR(&mcu_enable_interrupts_obj) }, - { MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&mcu_pin_type) }, + #if CIRCUITPY_INTERNAL_NVM_SIZE > 0 + { MP_ROM_QSTR(MP_QSTR_nvm), &common_hal_mcu_nvm_obj }, + #else + { MP_ROM_QSTR(MP_QSTR_nvm), &mp_const_none_obj }, + #endif + { MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&mcu_pin_type) }, { MP_ROM_QSTR(MP_QSTR_pin), MP_ROM_PTR(&mcu_pin_module) }, }; diff --git a/shared-bindings/microcontroller/__init__.h b/shared-bindings/microcontroller/__init__.h index 8c0b071ec..52aabf9b8 100644 --- a/shared-bindings/microcontroller/__init__.h +++ b/shared-bindings/microcontroller/__init__.h @@ -27,6 +27,7 @@ #ifndef __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___INIT___H__ #define __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___INIT___H__ +#include "py/mpconfig.h" #include "py/obj.h" extern void common_hal_mcu_delay_us(uint32_t); @@ -36,4 +37,11 @@ extern void common_hal_mcu_enable_interrupts(void); extern const mp_obj_dict_t mcu_pin_globals; +#if CIRCUITPY_INTERNAL_NVM_SIZE > 0 + +#include "common-hal/nvm/ByteArray.h" +extern const nvm_bytearray_obj_t common_hal_mcu_nvm_obj; + +#endif + #endif // __MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER___INIT___H__ -- cgit v1.2.3