summaryrefslogtreecommitdiff
path: root/shared-bindings/microcontroller
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2017-08-25 13:00:27 -0700
committerDan Halbert <halbert@halwitz.org>2017-08-25 16:00:27 -0400
commit266be307770abe11c220eb493388807920914b7a (patch)
treed3cff1ab1d0ecc1c55747a2f3ebdf21e450fa794 /shared-bindings/microcontroller
parentdd1c4fc8c776d060acd9b66865b1f961e939716a (diff)
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()
Diffstat (limited to 'shared-bindings/microcontroller')
-rw-r--r--shared-bindings/microcontroller/__init__.c13
-rw-r--r--shared-bindings/microcontroller/__init__.h8
2 files changed, 20 insertions, 1 deletions
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__