kopia lustrzana https://github.com/micropython/micropython
mimxrt: Enable many Python and some extmod features.
Besides Python features this includes the extmod modules which make use of the Pin module, especially machine.softSPI, machine.SoftI2C and onewire.pull/7349/head
rodzic
a40e1473dc
commit
bbdc98f72e
|
@ -152,6 +152,8 @@ SRC_C = \
|
|||
lib/utils/pyexec.c \
|
||||
lib/utils/stdout_helpers.c \
|
||||
lib/utils/sys_stdio_mphal.c \
|
||||
drivers/bus/softspi.c \
|
||||
extmod/modonewire.c \
|
||||
$(SRC_TINYUSB_C) \
|
||||
$(SRC_TINYUSB_IMX_C) \
|
||||
|
||||
|
@ -265,6 +267,7 @@ SRC_QSTR += \
|
|||
moduos.c \
|
||||
pin.c \
|
||||
lib/utils/sys_stdio_mphal.c \
|
||||
extmod/modonewire.c \
|
||||
$(GEN_PINS_SRC) \
|
||||
|
||||
OBJ += $(PY_O)
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
freeze("$(PORT_DIR)/modules")
|
||||
freeze("$(MPY_DIR)/drivers/onewire")
|
||||
include("$(MPY_DIR)/extmod/uasyncio/manifest.py")
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#define MICROPY_INCLUDED_MIMXRT_HAL_FLEXSPI_NOR_FLASH_H
|
||||
|
||||
#include "fsl_flexspi.h"
|
||||
#include "mpconfigport.h"
|
||||
#include "mpconfigboard.h"
|
||||
#include BOARD_FLASH_CONFIG_HEADER_H
|
||||
|
||||
// Defined in boards flash_config.c
|
||||
|
|
|
@ -39,7 +39,7 @@ STATIC mp_obj_t machine_pin_obj_init_helper(const machine_pin_obj_t *self, size_
|
|||
// Class Methods
|
||||
STATIC void machine_pin_obj_print(const mp_print_t *print, mp_obj_t o, mp_print_kind_t kind);
|
||||
STATIC mp_obj_t machine_pin_obj_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args);
|
||||
STATIC mp_obj_t machine_pin_obj_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args);
|
||||
mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args);
|
||||
|
||||
// Instance Methods
|
||||
STATIC mp_obj_t machine_pin_off(mp_obj_t self_in);
|
||||
|
@ -191,7 +191,7 @@ STATIC void machine_pin_obj_print(const mp_print_t *print, mp_obj_t o, mp_print_
|
|||
}
|
||||
|
||||
// pin(id, mode, pull, ...)
|
||||
STATIC mp_obj_t machine_pin_obj_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
|
||||
mp_obj_t mp_pin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
|
||||
mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
|
||||
|
||||
const machine_pin_obj_t *pin = pin_find(args[0]);
|
||||
|
@ -273,7 +273,7 @@ const mp_obj_type_t machine_pin_type = {
|
|||
.name = MP_QSTR_Pin,
|
||||
.print = machine_pin_obj_print,
|
||||
.call = machine_pin_obj_call,
|
||||
.make_new = machine_pin_obj_make_new,
|
||||
.make_new = mp_pin_make_new,
|
||||
.locals_dict = (mp_obj_dict_t *)&machine_pin_locals_dict,
|
||||
};
|
||||
|
||||
|
@ -282,6 +282,6 @@ const mp_obj_type_t machine_pin_af_type = {
|
|||
{&mp_type_type},
|
||||
.name = MP_QSTR_PinAF,
|
||||
.print = machine_pin_obj_print,
|
||||
.make_new = machine_pin_obj_make_new,
|
||||
.make_new = mp_pin_make_new,
|
||||
.locals_dict = (mp_obj_dict_t *)&machine_pin_locals_dict,
|
||||
};
|
||||
|
|
|
@ -128,7 +128,7 @@ const char mimxrt_help_text[] =
|
|||
" machine.Pin(pin, m, [p]) -- get a pin and configure it for IO mode m, pull mode p\n"
|
||||
" methods: init(..), value([v]), high(), low())\n"
|
||||
"\n"
|
||||
"Pin IO modes are: Pin.IN, Pin.OUT\n"
|
||||
"Pin IO modes are: Pin.IN, Pin.OUT, Pin.OPEN_DRAIN\n"
|
||||
"Pin pull modes are: Pin.PULL_UP, Pin.PULL_UP_47K, Pin.PULL_UP_22K, Pin.PULL_DOWN, Pin.PULL_HOLD\n"
|
||||
"\n"
|
||||
"Useful control commands:\n"
|
||||
|
|
|
@ -27,9 +27,13 @@
|
|||
|
||||
#include "py/runtime.h"
|
||||
#include "extmod/machine_mem.h"
|
||||
#include "extmod/machine_i2c.h"
|
||||
#include "extmod/machine_signal.h"
|
||||
#include "extmod/machine_spi.h"
|
||||
#include "led.h"
|
||||
#include "pin.h"
|
||||
#include "modmachine.h"
|
||||
#include "fsl_clock.h"
|
||||
|
||||
#include CPU_HEADER_H
|
||||
|
||||
|
@ -40,7 +44,7 @@ STATIC mp_obj_t machine_reset(void) {
|
|||
MP_DEFINE_CONST_FUN_OBJ_0(machine_reset_obj, machine_reset);
|
||||
|
||||
STATIC mp_obj_t machine_freq(void) {
|
||||
return MP_OBJ_NEW_SMALL_INT(0);
|
||||
return MP_OBJ_NEW_SMALL_INT(CLOCK_GetFreq(kCLOCK_CpuClk));
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_0(machine_freq_obj, machine_freq);
|
||||
|
||||
|
@ -57,6 +61,9 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
|
|||
{ MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&machine_pin_type) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_Timer), MP_ROM_PTR(&machine_timer_type) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_RTC), MP_ROM_PTR(&machine_rtc_type) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_Signal), MP_ROM_PTR(&machine_signal_type) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SoftI2C), MP_ROM_PTR(&mp_machine_soft_i2c_type) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SoftSPI), MP_ROM_PTR(&mp_machine_soft_spi_type) },
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(machine_module_globals, machine_module_globals_table);
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
// Board specific definitions
|
||||
#include "mpconfigboard.h"
|
||||
#include "fsl_common.h"
|
||||
|
||||
// Memory allocation policies
|
||||
#define MICROPY_GC_STACK_ENTRY_TYPE uint16_t
|
||||
|
@ -35,6 +36,11 @@
|
|||
#define MICROPY_ALLOC_PARSE_CHUNK_INIT (32)
|
||||
#define MICROPY_ALLOC_PATH_MAX (256)
|
||||
|
||||
// MicroPython emitters
|
||||
#define MICROPY_PERSISTENT_CODE_LOAD (1)
|
||||
#define MICROPY_EMIT_THUMB (1)
|
||||
#define MICROPY_EMIT_INLINE_THUMB (1)
|
||||
|
||||
// Compiler configuration
|
||||
#define MICROPY_COMP_CONST (0)
|
||||
|
||||
|
@ -60,32 +66,64 @@
|
|||
#define MICROPY_QSTR_EXTRA_POOL mp_qstr_frozen_const_pool
|
||||
|
||||
// Control over Python builtins
|
||||
#define MICROPY_PY_BUILTINS_STR_COUNT (0)
|
||||
#define MICROPY_PY_FUNCTION_ATTRS (1)
|
||||
#define MICROPY_PY_DESCRIPTORS (1)
|
||||
#define MICROPY_PY_DELATTR_SETATTR (1)
|
||||
#define MICROPY_PY_BUILTINS_STR_UNICODE (1)
|
||||
#define MICROPY_PY_BUILTINS_STR_CENTER (1)
|
||||
#define MICROPY_PY_BUILTINS_STR_PARTITION (1)
|
||||
#define MICROPY_PY_BUILTINS_STR_SPLITLINES (1)
|
||||
#define MICROPY_PY_BUILTINS_MEMORYVIEW (1)
|
||||
#define MICROPY_PY_BUILTINS_SET (1)
|
||||
#define MICROPY_PY_BUILTINS_FROZENSET (0)
|
||||
#define MICROPY_PY_BUILTINS_PROPERTY (0)
|
||||
#define MICROPY_PY_BUILTINS_ENUMERATE (0)
|
||||
#define MICROPY_PY_BUILTINS_FILTER (0)
|
||||
#define MICROPY_PY_BUILTINS_REVERSED (1)
|
||||
#define MICROPY_PY_BUILTINS_MIN_MAX (0)
|
||||
#define MICROPY_PY_BUILTINS_SLICE_ATTRS (1)
|
||||
#define MICROPY_PY_BUILTINS_SLICE_INDICES (1)
|
||||
#define MICROPY_PY_BUILTINS_FROZENSET (1)
|
||||
#define MICROPY_PY_BUILTINS_ROUND_INT (1)
|
||||
#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
|
||||
#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1)
|
||||
#define MICROPY_PY_BUILTINS_COMPILE (1)
|
||||
#define MICROPY_PY_BUILTINS_INPUT (1)
|
||||
#define MICROPY_PY_BUILTINS_POW3 (1)
|
||||
#define MICROPY_PY_BUILTINS_HELP (1)
|
||||
#define MICROPY_PY_BUILTINS_HELP_MODULES (1)
|
||||
#define MICROPY_PY_BUILTINS_HELP_TEXT mimxrt_help_text
|
||||
#define MICROPY_PY___FILE__ (0)
|
||||
#define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
|
||||
#define MICROPY_PY_ARRAY_SLICE_ASSIGN (1)
|
||||
#define MICROPY_PY_COLLECTIONS (0)
|
||||
#define MICROPY_PY_COLLECTIONS_DEQUE (1)
|
||||
#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1)
|
||||
#define MICROPY_PY_MATH_SPECIAL_FUNCTIONS (1)
|
||||
#define MICROPY_PY_MATH_FACTORIAL (1)
|
||||
#define MICROPY_PY_MATH_ISCLOSE (1)
|
||||
#define MICROPY_PY_CMATH (1)
|
||||
#define MICROPY_PY_IO_IOBASE (1)
|
||||
#define MICROPY_PY_IO_FILEIO (1)
|
||||
#define MICROPY_PY_SYS_MAXSIZE (1)
|
||||
#define MICROPY_PY_SYS_PLATFORM "mimxrt"
|
||||
#define MICROPY_PY_SYS_STDFILES (1)
|
||||
#define MICROPY_PY_SYS_STDIO_BUFFER (1)
|
||||
#define MICROPY_PY_UERRNO (1)
|
||||
|
||||
// Extended modules
|
||||
#define MICROPY_EPOCH_IS_1970 (1)
|
||||
#define MICROPY_PY_UASYNCIO (1)
|
||||
#define MICROPY_PY_UCTYPES (1)
|
||||
#define MICROPY_PY_UZLIB (1)
|
||||
#define MICROPY_PY_UJSON (1)
|
||||
#define MICROPY_PY_URE (1)
|
||||
#define MICROPY_PY_URE_MATCH_GROUPS (1)
|
||||
#define MICROPY_PY_URE_MATCH_SPAN_START_END (1)
|
||||
#define MICROPY_PY_URE_SUB (1)
|
||||
#define MICROPY_PY_UHASHLIB (1)
|
||||
#define MICROPY_PY_UBINASCII (1)
|
||||
#define MICROPY_PY_UBINASCII_CRC32 (1)
|
||||
#define MICROPY_PY_UTIME_MP_HAL (1)
|
||||
#define MICROPY_PY_URANDOM (1)
|
||||
#define MICROPY_PY_URANDOM_EXTRA_FUNCS (1)
|
||||
#define MICROPY_PY_USELECT (1)
|
||||
#define MICROPY_PY_MACHINE (1)
|
||||
#define MICROPY_PY_MACHINE_PIN_MAKE_NEW mp_pin_make_new
|
||||
#define MICROPY_PY_MACHINE_I2C (1)
|
||||
#define MICROPY_PY_MACHINE_SPI (1)
|
||||
#define MICROPY_PY_FRAMEBUF (1)
|
||||
|
||||
// Use VfsLfs2's types for fileio/textio
|
||||
#define mp_type_fileio mp_type_vfs_lfs2_fileio
|
||||
|
@ -97,11 +135,24 @@
|
|||
|
||||
// Hooks to add builtins
|
||||
|
||||
__attribute__((always_inline)) static inline void enable_irq(uint32_t state) {
|
||||
__set_PRIMASK(state);
|
||||
}
|
||||
|
||||
__attribute__((always_inline)) static inline uint32_t disable_irq(void) {
|
||||
uint32_t state = __get_PRIMASK();
|
||||
return state;
|
||||
}
|
||||
|
||||
#define MICROPY_BEGIN_ATOMIC_SECTION() disable_irq()
|
||||
#define MICROPY_END_ATOMIC_SECTION(state) enable_irq(state)
|
||||
|
||||
#define MICROPY_PORT_BUILTINS \
|
||||
{ MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mp_builtin_open_obj) },
|
||||
|
||||
extern const struct _mp_obj_module_t mp_module_machine;
|
||||
extern const struct _mp_obj_module_t mp_module_mimxrt;
|
||||
extern const struct _mp_obj_module_t mp_module_onewire;
|
||||
extern const struct _mp_obj_module_t mp_module_uos;
|
||||
extern const struct _mp_obj_module_t mp_module_utime;
|
||||
|
||||
|
@ -110,6 +161,7 @@ extern const struct _mp_obj_module_t mp_module_utime;
|
|||
{ MP_ROM_QSTR(MP_QSTR_mimxrt), (mp_obj_t)&mp_module_mimxrt }, \
|
||||
{ MP_ROM_QSTR(MP_QSTR_uos), MP_ROM_PTR(&mp_module_uos) }, \
|
||||
{ MP_ROM_QSTR(MP_QSTR_utime), MP_ROM_PTR(&mp_module_utime) }, \
|
||||
{ MP_ROM_QSTR(MP_QSTR__onewire), MP_ROM_PTR(&mp_module_onewire) }, \
|
||||
|
||||
#define MICROPY_HW_PIT_NUM_CHANNELS 3
|
||||
|
||||
|
@ -129,10 +181,17 @@ extern const struct _mp_obj_module_t mp_module_utime;
|
|||
|
||||
#define MICROPY_MAKE_POINTER_CALLABLE(p) ((void *)((mp_uint_t)(p) | 1))
|
||||
|
||||
#define MP_HAL_CLEAN_DCACHE(addr, size) \
|
||||
(SCB_CleanDCache_by_Addr((uint32_t *)((uint32_t)addr & ~0x1f), \
|
||||
((uint32_t)((uint8_t *)addr + size + 0x1f) & ~0x1f) - ((uint32_t)addr & ~0x1f)))
|
||||
|
||||
#define MP_SSIZE_MAX (0x7fffffff)
|
||||
typedef int mp_int_t; // must be pointer size
|
||||
typedef unsigned mp_uint_t; // must be pointer size
|
||||
typedef long mp_off_t;
|
||||
|
||||
// Need an implementation of the log2 function which is not a macro.
|
||||
#define MP_NEED_LOG2 (1)
|
||||
|
||||
// Need to provide a declaration/definition of alloca()
|
||||
#include <alloca.h>
|
||||
|
|
|
@ -48,6 +48,9 @@
|
|||
#define mp_hal_pin_od_low(p) mp_hal_pin_low(p)
|
||||
#define mp_hal_pin_od_high(p) mp_hal_pin_high(p)
|
||||
|
||||
#define mp_hal_quiet_timing_enter() MICROPY_BEGIN_ATOMIC_SECTION()
|
||||
#define mp_hal_quiet_timing_exit(irq_state) MICROPY_END_ATOMIC_SECTION(irq_state)
|
||||
|
||||
void mp_hal_set_interrupt_char(int c);
|
||||
|
||||
static inline mp_uint_t mp_hal_ticks_ms(void) {
|
||||
|
|
Ładowanie…
Reference in New Issue