remove ports/pic16bit
This commit is contained in:
parent
c575cd7bc7
commit
6dcaeae8c7
@ -1,70 +0,0 @@
|
|||||||
include ../../py/mkenv.mk
|
|
||||||
|
|
||||||
# qstr definitions (must come before including py.mk)
|
|
||||||
QSTR_DEFS = qstrdefsport.h
|
|
||||||
|
|
||||||
# include py core make definitions
|
|
||||||
include $(TOP)/py/py.mk
|
|
||||||
|
|
||||||
XC16 = /opt/microchip/xc16/v1.24
|
|
||||||
CROSS_COMPILE = $(XC16)/bin/xc16-
|
|
||||||
|
|
||||||
PARTFAMILY = dsPIC33F
|
|
||||||
PART = 33FJ256GP506
|
|
||||||
|
|
||||||
INC += -I.
|
|
||||||
INC += -I$(TOP)
|
|
||||||
INC += -I$(BUILD)
|
|
||||||
INC += -I$(XC16)/include
|
|
||||||
INC += -I$(XC16)/support/$(PARTFAMILY)/h
|
|
||||||
|
|
||||||
CFLAGS_PIC16BIT = -mcpu=$(PART) -mlarge-code
|
|
||||||
CFLAGS = $(INC) -Wall -Werror -std=gnu99 -nostdlib $(CFLAGS_PIC16BIT) $(COPT)
|
|
||||||
|
|
||||||
#Debugging/Optimization
|
|
||||||
ifeq ($(DEBUG), 1)
|
|
||||||
CFLAGS += -O0 -ggdb
|
|
||||||
else
|
|
||||||
CFLAGS += -O1 -DNDEBUG
|
|
||||||
endif
|
|
||||||
|
|
||||||
LDFLAGS = --heap=0 -nostdlib -T $(XC16)/support/$(PARTFAMILY)/gld/p$(PART).gld -Map=$@.map --cref -p$(PART)
|
|
||||||
LIBS = -L$(XC16)/lib -L$(XC16)/lib/$(PARTFAMILY) -lc -lm -lpic30 -lp$(PART)
|
|
||||||
|
|
||||||
SRC_C = \
|
|
||||||
main.c \
|
|
||||||
board.c \
|
|
||||||
pic16bit_mphal.c \
|
|
||||||
modpyb.c \
|
|
||||||
modpybled.c \
|
|
||||||
modpybswitch.c \
|
|
||||||
lib/utils/pyexec.c \
|
|
||||||
lib/utils/sys_stdio_mphal.c \
|
|
||||||
lib/mp-readline/readline.c \
|
|
||||||
|
|
||||||
SRC_S = \
|
|
||||||
# gchelper.s \
|
|
||||||
|
|
||||||
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o) $(SRC_S:.s=.o))
|
|
||||||
|
|
||||||
# List of sources for qstr extraction
|
|
||||||
SRC_QSTR += $(SRC_C)
|
|
||||||
# Append any auto-generated sources that are needed by sources listed in
|
|
||||||
# SRC_QSTR
|
|
||||||
SRC_QSTR_AUTO_DEPS +=
|
|
||||||
|
|
||||||
all: $(BUILD)/firmware.hex
|
|
||||||
|
|
||||||
$(BUILD)/firmware.hex: $(BUILD)/firmware.elf
|
|
||||||
$(ECHO) "Create $@"
|
|
||||||
$(Q)$(CROSS_COMPILE)bin2hex $<
|
|
||||||
|
|
||||||
$(BUILD)/firmware.elf: $(OBJ)
|
|
||||||
$(ECHO) "LINK $@"
|
|
||||||
$(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
||||||
$(Q)size $@
|
|
||||||
|
|
||||||
$(PY_BUILD)/gc.o: CFLAGS += -O1
|
|
||||||
$(PY_BUILD)/vm.o: CFLAGS += -O1
|
|
||||||
|
|
||||||
include $(TOP)/py/mkrules.mk
|
|
@ -1,153 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <p33Fxxxx.h>
|
|
||||||
#include "board.h"
|
|
||||||
|
|
||||||
/********************************************************************/
|
|
||||||
// CPU
|
|
||||||
|
|
||||||
void cpu_init(void) {
|
|
||||||
// set oscillator to operate at 40MHz
|
|
||||||
// Fosc = Fin*M/(N1*N2), Fcy = Fosc/2
|
|
||||||
// Fosc = 7.37M*40/(2*2) = 80Mhz for 7.37M input clock
|
|
||||||
PLLFBD = 41; // M=39
|
|
||||||
CLKDIVbits.PLLPOST = 0; // N1=2
|
|
||||||
CLKDIVbits.PLLPRE = 0; // N2=2
|
|
||||||
OSCTUN = 0;
|
|
||||||
|
|
||||||
// initiate clock switch to FRC with PLL
|
|
||||||
__builtin_write_OSCCONH(0x01);
|
|
||||||
__builtin_write_OSCCONL(0x01);
|
|
||||||
|
|
||||||
// wait for clock switch to occur
|
|
||||||
while (OSCCONbits.COSC != 0x01) {
|
|
||||||
}
|
|
||||||
while (!OSCCONbits.LOCK) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************/
|
|
||||||
// LEDs
|
|
||||||
|
|
||||||
#define RED_LED_TRIS _TRISC15
|
|
||||||
#define YELLOW_LED_TRIS _TRISC13
|
|
||||||
#define GREEN_LED_TRIS _TRISC14
|
|
||||||
|
|
||||||
#define RED_LED _LATC15
|
|
||||||
#define YELLOW_LED _LATC13
|
|
||||||
#define GREEN_LED _LATC14
|
|
||||||
|
|
||||||
#define LED_ON (0)
|
|
||||||
#define LED_OFF (1)
|
|
||||||
|
|
||||||
void led_init(void) {
|
|
||||||
// set led GPIO as outputs
|
|
||||||
RED_LED_TRIS = 0;
|
|
||||||
YELLOW_LED_TRIS = 0;
|
|
||||||
GREEN_LED_TRIS = 0;
|
|
||||||
|
|
||||||
// turn off the LEDs
|
|
||||||
RED_LED = LED_OFF;
|
|
||||||
YELLOW_LED = LED_OFF;
|
|
||||||
GREEN_LED = LED_OFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_state(int led, int state) {
|
|
||||||
int val = state ? LED_ON : LED_OFF;
|
|
||||||
switch (led) {
|
|
||||||
case 1: RED_LED = val; break;
|
|
||||||
case 2: YELLOW_LED = val; break;
|
|
||||||
case 3: GREEN_LED = val; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_toggle(int led) {
|
|
||||||
switch (led) {
|
|
||||||
case 1: RED_LED ^= 1; break;
|
|
||||||
case 2: YELLOW_LED ^= 1; break;
|
|
||||||
case 3: GREEN_LED ^= 1; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************/
|
|
||||||
// switches
|
|
||||||
|
|
||||||
#define SWITCH_S1_TRIS _TRISD8
|
|
||||||
#define SWITCH_S2_TRIS _TRISD9
|
|
||||||
|
|
||||||
#define SWITCH_S1 _RD8
|
|
||||||
#define SWITCH_S2 _RD9
|
|
||||||
|
|
||||||
void switch_init(void) {
|
|
||||||
// set switch GPIO as inputs
|
|
||||||
SWITCH_S1_TRIS = 1;
|
|
||||||
SWITCH_S2_TRIS = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int switch_get(int sw) {
|
|
||||||
int val = 1;
|
|
||||||
switch (sw) {
|
|
||||||
case 1: val = SWITCH_S1; break;
|
|
||||||
case 2: val = SWITCH_S2; break;
|
|
||||||
}
|
|
||||||
return val == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/********************************************************************/
|
|
||||||
// UART
|
|
||||||
|
|
||||||
/*
|
|
||||||
// TODO need an irq
|
|
||||||
void uart_rx_irq(void) {
|
|
||||||
if (c == interrupt_char) {
|
|
||||||
MP_STATE_VM(mp_pending_exception) = MP_STATE_PORT(keyboard_interrupt_obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void uart_init(void) {
|
|
||||||
// baudrate = F_CY / 16 (uxbrg + 1)
|
|
||||||
// F_CY = 40MHz for us
|
|
||||||
UART1.uxbrg = 64; // 38400 baud
|
|
||||||
UART1.uxmode = 1 << 15; // UARTEN
|
|
||||||
UART1.uxsta = 1 << 10; // UTXEN
|
|
||||||
}
|
|
||||||
|
|
||||||
int uart_rx_any(void) {
|
|
||||||
return UART1.uxsta & 1; // URXDA
|
|
||||||
}
|
|
||||||
|
|
||||||
int uart_rx_char(void) {
|
|
||||||
return UART1.uxrxreg;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uart_tx_char(int chr) {
|
|
||||||
while (UART1.uxsta & (1 << 9)) {
|
|
||||||
// tx fifo is full
|
|
||||||
}
|
|
||||||
UART1.uxtxreg = chr;
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef MICROPY_INCLUDED_PIC16BIT_BOARD_H
|
|
||||||
#define MICROPY_INCLUDED_PIC16BIT_BOARD_H
|
|
||||||
|
|
||||||
void cpu_init(void);
|
|
||||||
|
|
||||||
void led_init(void);
|
|
||||||
void led_state(int led, int state);
|
|
||||||
void led_toggle(int led);
|
|
||||||
|
|
||||||
void switch_init(void);
|
|
||||||
int switch_get(int sw);
|
|
||||||
|
|
||||||
void uart_init(void);
|
|
||||||
int uart_rx_any(void);
|
|
||||||
int uart_rx_char(void);
|
|
||||||
void uart_tx_char(int chr);
|
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_PIC16BIT_BOARD_H
|
|
@ -1,127 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <p33Fxxxx.h>
|
|
||||||
|
|
||||||
#include "py/compile.h"
|
|
||||||
#include "py/runtime.h"
|
|
||||||
#include "py/gc.h"
|
|
||||||
#include "py/mphal.h"
|
|
||||||
#include "py/mperrno.h"
|
|
||||||
#include "lib/utils/pyexec.h"
|
|
||||||
#include "lib/mp-readline/readline.h"
|
|
||||||
#include "board.h"
|
|
||||||
#include "modpyb.h"
|
|
||||||
|
|
||||||
_FGS(GWRP_OFF & GCP_OFF);
|
|
||||||
_FOSCSEL(FNOSC_FRC);
|
|
||||||
_FOSC(FCKSM_CSECMD & OSCIOFNC_ON & POSCMD_NONE);
|
|
||||||
_FWDT(FWDTEN_OFF);
|
|
||||||
|
|
||||||
// maximum heap for device with 8k RAM
|
|
||||||
static char heap[4600];
|
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
|
||||||
// init the CPU and the peripherals
|
|
||||||
cpu_init();
|
|
||||||
led_init();
|
|
||||||
switch_init();
|
|
||||||
uart_init();
|
|
||||||
|
|
||||||
soft_reset:
|
|
||||||
|
|
||||||
// flash green led for 150ms to indicate boot
|
|
||||||
led_state(1, 0);
|
|
||||||
led_state(2, 0);
|
|
||||||
led_state(3, 1);
|
|
||||||
mp_hal_delay_ms(150);
|
|
||||||
led_state(3, 0);
|
|
||||||
|
|
||||||
// init MicroPython runtime
|
|
||||||
int stack_dummy;
|
|
||||||
MP_STATE_THREAD(stack_top) = (char*)&stack_dummy;
|
|
||||||
gc_init(heap, heap + sizeof(heap));
|
|
||||||
mp_init();
|
|
||||||
mp_hal_init();
|
|
||||||
readline_init0();
|
|
||||||
|
|
||||||
// REPL loop
|
|
||||||
for (;;) {
|
|
||||||
if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {
|
|
||||||
if (pyexec_raw_repl() != 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (pyexec_friendly_repl() != 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("PYB: soft reboot\n");
|
|
||||||
mp_deinit();
|
|
||||||
goto soft_reset;
|
|
||||||
}
|
|
||||||
|
|
||||||
void gc_collect(void) {
|
|
||||||
// TODO possibly need to trace registers
|
|
||||||
void *dummy;
|
|
||||||
gc_collect_start();
|
|
||||||
// Node: stack is ascending
|
|
||||||
gc_collect_root(&dummy, ((mp_uint_t)&dummy - (mp_uint_t)MP_STATE_THREAD(stack_top)) / sizeof(mp_uint_t));
|
|
||||||
gc_collect_end();
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_lexer_t *mp_lexer_new_from_file(const char *filename) {
|
|
||||||
mp_raise_OSError(MP_ENOENT);
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_import_stat_t mp_import_stat(const char *path) {
|
|
||||||
return MP_IMPORT_STAT_NO_EXIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) {
|
|
||||||
return mp_const_none;
|
|
||||||
}
|
|
||||||
MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open);
|
|
||||||
|
|
||||||
void nlr_jump_fail(void *val) {
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NORETURN __fatal_error(const char *msg) {
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
void MP_WEAK __assert_func(const char *file, int line, const char *func, const char *expr) {
|
|
||||||
printf("Assertion '%s' failed, at file %s:%d\n", expr, file, line);
|
|
||||||
__fatal_error("Assertion failed");
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "py/obj.h"
|
|
||||||
#include "py/mphal.h"
|
|
||||||
#include "modpyb.h"
|
|
||||||
|
|
||||||
STATIC mp_obj_t pyb_millis(void) {
|
|
||||||
return MP_OBJ_NEW_SMALL_INT(mp_hal_ticks_ms());
|
|
||||||
}
|
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_0(pyb_millis_obj, pyb_millis);
|
|
||||||
|
|
||||||
STATIC mp_obj_t pyb_elapsed_millis(mp_obj_t start) {
|
|
||||||
uint32_t startMillis = mp_obj_get_int(start);
|
|
||||||
uint32_t currMillis = mp_hal_ticks_ms();
|
|
||||||
return MP_OBJ_NEW_SMALL_INT((currMillis - startMillis) & 0x1fff);
|
|
||||||
}
|
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_elapsed_millis_obj, pyb_elapsed_millis);
|
|
||||||
|
|
||||||
STATIC mp_obj_t pyb_delay(mp_obj_t ms_in) {
|
|
||||||
mp_int_t ms = mp_obj_get_int(ms_in);
|
|
||||||
if (ms >= 0) {
|
|
||||||
mp_hal_delay_ms(ms);
|
|
||||||
}
|
|
||||||
return mp_const_none;
|
|
||||||
}
|
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_delay_obj, pyb_delay);
|
|
||||||
|
|
||||||
STATIC const mp_rom_map_elem_t pyb_module_globals_table[] = {
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_pyb) },
|
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_millis), MP_ROM_PTR(&pyb_millis_obj) },
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_elapsed_millis), MP_ROM_PTR(&pyb_elapsed_millis_obj) },
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_delay), MP_ROM_PTR(&pyb_delay_obj) },
|
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pyb_led_type) },
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_Switch), MP_ROM_PTR(&pyb_switch_type) },
|
|
||||||
};
|
|
||||||
|
|
||||||
STATIC MP_DEFINE_CONST_DICT(pyb_module_globals, pyb_module_globals_table);
|
|
||||||
|
|
||||||
const mp_obj_module_t pyb_module = {
|
|
||||||
.base = { &mp_type_module },
|
|
||||||
.globals = (mp_obj_dict_t*)&pyb_module_globals,
|
|
||||||
};
|
|
@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
#ifndef MICROPY_INCLUDED_PIC16BIT_MODPYB_H
|
|
||||||
#define MICROPY_INCLUDED_PIC16BIT_MODPYB_H
|
|
||||||
|
|
||||||
extern const mp_obj_type_t pyb_led_type;
|
|
||||||
extern const mp_obj_type_t pyb_switch_type;
|
|
||||||
extern const mp_obj_module_t pyb_module;
|
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_PIC16BIT_MODPYB_H
|
|
@ -1,93 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "py/runtime.h"
|
|
||||||
#include "board.h"
|
|
||||||
#include "modpyb.h"
|
|
||||||
|
|
||||||
typedef struct _pyb_led_obj_t {
|
|
||||||
mp_obj_base_t base;
|
|
||||||
} pyb_led_obj_t;
|
|
||||||
|
|
||||||
STATIC const pyb_led_obj_t pyb_led_obj[] = {
|
|
||||||
{{&pyb_led_type}},
|
|
||||||
{{&pyb_led_type}},
|
|
||||||
{{&pyb_led_type}},
|
|
||||||
};
|
|
||||||
|
|
||||||
#define NUM_LED MP_ARRAY_SIZE(pyb_led_obj)
|
|
||||||
#define LED_ID(obj) ((obj) - &pyb_led_obj[0] + 1)
|
|
||||||
|
|
||||||
void pyb_led_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
|
||||||
pyb_led_obj_t *self = self_in;
|
|
||||||
mp_printf(print, "LED(%u)", LED_ID(self));
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC mp_obj_t pyb_led_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, 1, false);
|
|
||||||
mp_int_t led_id = mp_obj_get_int(args[0]);
|
|
||||||
if (!(1 <= led_id && led_id <= NUM_LED)) {
|
|
||||||
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "LED %d does not exist", led_id));
|
|
||||||
}
|
|
||||||
return (mp_obj_t)&pyb_led_obj[led_id - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_obj_t pyb_led_on(mp_obj_t self_in) {
|
|
||||||
pyb_led_obj_t *self = self_in;
|
|
||||||
led_state(LED_ID(self), 1);
|
|
||||||
return mp_const_none;
|
|
||||||
}
|
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_led_on_obj, pyb_led_on);
|
|
||||||
|
|
||||||
mp_obj_t pyb_led_off(mp_obj_t self_in) {
|
|
||||||
pyb_led_obj_t *self = self_in;
|
|
||||||
led_state(LED_ID(self), 0);
|
|
||||||
return mp_const_none;
|
|
||||||
}
|
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_led_off_obj, pyb_led_off);
|
|
||||||
|
|
||||||
mp_obj_t pyb_led_toggle(mp_obj_t self_in) {
|
|
||||||
pyb_led_obj_t *self = self_in;
|
|
||||||
led_toggle(LED_ID(self));
|
|
||||||
return mp_const_none;
|
|
||||||
}
|
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_led_toggle_obj, pyb_led_toggle);
|
|
||||||
|
|
||||||
STATIC const mp_rom_map_elem_t pyb_led_locals_dict_table[] = {
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_on), MP_ROM_PTR(&pyb_led_on_obj) },
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_off), MP_ROM_PTR(&pyb_led_off_obj) },
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_toggle), MP_ROM_PTR(&pyb_led_toggle_obj) },
|
|
||||||
};
|
|
||||||
|
|
||||||
STATIC MP_DEFINE_CONST_DICT(pyb_led_locals_dict, pyb_led_locals_dict_table);
|
|
||||||
|
|
||||||
const mp_obj_type_t pyb_led_type = {
|
|
||||||
{ &mp_type_type },
|
|
||||||
.name = MP_QSTR_LED,
|
|
||||||
.print = pyb_led_print,
|
|
||||||
.make_new = pyb_led_make_new,
|
|
||||||
.locals_dict = (mp_obj_t)&pyb_led_locals_dict,
|
|
||||||
};
|
|
@ -1,81 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "py/runtime.h"
|
|
||||||
#include "board.h"
|
|
||||||
#include "modpyb.h"
|
|
||||||
|
|
||||||
typedef struct _pyb_switch_obj_t {
|
|
||||||
mp_obj_base_t base;
|
|
||||||
} pyb_switch_obj_t;
|
|
||||||
|
|
||||||
STATIC const pyb_switch_obj_t pyb_switch_obj[] = {
|
|
||||||
{{&pyb_switch_type}},
|
|
||||||
{{&pyb_switch_type}},
|
|
||||||
};
|
|
||||||
|
|
||||||
#define NUM_SWITCH MP_ARRAY_SIZE(pyb_switch_obj)
|
|
||||||
#define SWITCH_ID(obj) ((obj) - &pyb_switch_obj[0] + 1)
|
|
||||||
|
|
||||||
void pyb_switch_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
|
||||||
pyb_switch_obj_t *self = self_in;
|
|
||||||
mp_printf(print, "Switch(%u)", SWITCH_ID(self));
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC mp_obj_t pyb_switch_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, 1, false);
|
|
||||||
mp_int_t sw_id = mp_obj_get_int(args[0]);
|
|
||||||
if (!(1 <= sw_id && sw_id <= NUM_SWITCH)) {
|
|
||||||
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Switch %d does not exist", sw_id));
|
|
||||||
}
|
|
||||||
return (mp_obj_t)&pyb_switch_obj[sw_id - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_obj_t pyb_switch_value(mp_obj_t self_in) {
|
|
||||||
pyb_switch_obj_t *self = self_in;
|
|
||||||
return switch_get(SWITCH_ID(self)) ? mp_const_true : mp_const_false;
|
|
||||||
}
|
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_switch_value_obj, pyb_switch_value);
|
|
||||||
|
|
||||||
mp_obj_t pyb_switch_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
|
|
||||||
mp_arg_check_num(n_args, n_kw, 0, 0, false);
|
|
||||||
return pyb_switch_value(self_in);
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC const mp_rom_map_elem_t pyb_switch_locals_dict_table[] = {
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_value), MP_ROM_PTR(&pyb_switch_value_obj) },
|
|
||||||
};
|
|
||||||
|
|
||||||
STATIC MP_DEFINE_CONST_DICT(pyb_switch_locals_dict, pyb_switch_locals_dict_table);
|
|
||||||
|
|
||||||
const mp_obj_type_t pyb_switch_type = {
|
|
||||||
{ &mp_type_type },
|
|
||||||
.name = MP_QSTR_Switch,
|
|
||||||
.print = pyb_switch_print,
|
|
||||||
.make_new = pyb_switch_make_new,
|
|
||||||
.call = pyb_switch_call,
|
|
||||||
.locals_dict = (mp_obj_t)&pyb_switch_locals_dict,
|
|
||||||
};
|
|
@ -1,110 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
// options to control how MicroPython is built
|
|
||||||
#define MICROPY_OBJ_REPR (MICROPY_OBJ_REPR_B)
|
|
||||||
#define MICROPY_ALLOC_PATH_MAX (64)
|
|
||||||
#define MICROPY_EMIT_X64 (0)
|
|
||||||
#define MICROPY_EMIT_THUMB (0)
|
|
||||||
#define MICROPY_EMIT_INLINE_THUMB (0)
|
|
||||||
#define MICROPY_COMP_MODULE_CONST (0)
|
|
||||||
#define MICROPY_COMP_CONST (0)
|
|
||||||
#define MICROPY_MEM_STATS (0)
|
|
||||||
#define MICROPY_DEBUG_PRINTERS (0)
|
|
||||||
#define MICROPY_ENABLE_GC (1)
|
|
||||||
#define MICROPY_REPL_EVENT_DRIVEN (0)
|
|
||||||
#define MICROPY_HELPER_REPL (1)
|
|
||||||
#define MICROPY_HELPER_LEXER_UNIX (0)
|
|
||||||
#define MICROPY_ENABLE_SOURCE_LINE (0)
|
|
||||||
#define MICROPY_ENABLE_DOC_STRING (0)
|
|
||||||
#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_TERSE)
|
|
||||||
#define MICROPY_PY_ASYNC_AWAIT (0)
|
|
||||||
#define MICROPY_PY_BUILTINS_BYTEARRAY (0)
|
|
||||||
#define MICROPY_PY_BUILTINS_MEMORYVIEW (0)
|
|
||||||
#define MICROPY_PY_BUILTINS_FROZENSET (0)
|
|
||||||
#define MICROPY_PY_BUILTINS_SET (0)
|
|
||||||
#define MICROPY_PY_BUILTINS_SLICE (0)
|
|
||||||
#define MICROPY_PY_BUILTINS_PROPERTY (0)
|
|
||||||
#define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
|
|
||||||
#define MICROPY_PY___FILE__ (0)
|
|
||||||
#define MICROPY_PY_GC (1)
|
|
||||||
#define MICROPY_PY_ARRAY (0)
|
|
||||||
#define MICROPY_PY_COLLECTIONS (0)
|
|
||||||
#define MICROPY_PY_MATH (0)
|
|
||||||
#define MICROPY_PY_CMATH (0)
|
|
||||||
#define MICROPY_PY_IO (0)
|
|
||||||
#define MICROPY_PY_STRUCT (0)
|
|
||||||
#define MICROPY_PY_SYS (0)
|
|
||||||
#define MICROPY_CPYTHON_COMPAT (0)
|
|
||||||
#define MICROPY_LONGINT_IMPL (MICROPY_LONGINT_IMPL_MPZ)
|
|
||||||
#define MICROPY_FLOAT_IMPL (MICROPY_FLOAT_IMPL_NONE)
|
|
||||||
#define MICROPY_NO_ALLOCA (1)
|
|
||||||
|
|
||||||
// type definitions for the specific machine
|
|
||||||
|
|
||||||
#define MP_ENDIANNESS_LITTLE (1)
|
|
||||||
#define MPZ_DIG_SIZE (8)
|
|
||||||
|
|
||||||
// The xc16 compiler doesn't seem to respect alignment (!!) so we
|
|
||||||
// need to use instead an object representation that allows for
|
|
||||||
// 2-byte aligned pointers (see config setting above).
|
|
||||||
//#define MICROPY_OBJ_BASE_ALIGNMENT __attribute__((aligned(4)))
|
|
||||||
|
|
||||||
#define MICROPY_MAKE_POINTER_CALLABLE(p) ((void*)((mp_uint_t)(p)))
|
|
||||||
|
|
||||||
#define UINT_FMT "%u"
|
|
||||||
#define INT_FMT "%d"
|
|
||||||
typedef int mp_int_t; // must be pointer size
|
|
||||||
typedef unsigned int mp_uint_t; // must be pointer size
|
|
||||||
|
|
||||||
typedef int mp_off_t;
|
|
||||||
|
|
||||||
#define MP_PLAT_PRINT_STRN(str, len) mp_hal_stdout_tx_strn_cooked(str, len)
|
|
||||||
|
|
||||||
// extra builtin names to add to the global namespace
|
|
||||||
#define MICROPY_PORT_BUILTINS \
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&mp_builtin_open_obj) },
|
|
||||||
|
|
||||||
// extra builtin modules to add to the list of known ones
|
|
||||||
extern const struct _mp_obj_module_t pyb_module;
|
|
||||||
#define MICROPY_PORT_BUILTIN_MODULES \
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_pyb), MP_ROM_PTR(&pyb_module) }, \
|
|
||||||
|
|
||||||
#define MP_STATE_PORT MP_STATE_VM
|
|
||||||
|
|
||||||
#define MICROPY_PORT_ROOT_POINTERS \
|
|
||||||
char *readline_hist[8]; \
|
|
||||||
mp_obj_t keyboard_interrupt_obj; \
|
|
||||||
|
|
||||||
#define MICROPY_MPHALPORT_H "pic16bit_mphal.h"
|
|
||||||
#define MICROPY_HW_BOARD_NAME "dsPICSK"
|
|
||||||
#define MICROPY_HW_MCU_NAME "dsPIC33"
|
|
||||||
|
|
||||||
// XC16 toolchain doesn't seem to define these
|
|
||||||
typedef int intptr_t;
|
|
||||||
typedef unsigned int uintptr_t;
|
|
@ -1,79 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include "py/mphal.h"
|
|
||||||
#include "board.h"
|
|
||||||
|
|
||||||
static int interrupt_char;
|
|
||||||
|
|
||||||
void mp_hal_init(void) {
|
|
||||||
MP_STATE_PORT(keyboard_interrupt_obj) = mp_obj_new_exception(&mp_type_KeyboardInterrupt);
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_uint_t mp_hal_ticks_ms(void) {
|
|
||||||
// TODO
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mp_hal_delay_ms(mp_uint_t ms) {
|
|
||||||
// tuned for fixed CPU frequency
|
|
||||||
for (int i = ms; i > 0; i--) {
|
|
||||||
for (volatile int j = 0; j < 5000; j++) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mp_hal_set_interrupt_char(int c) {
|
|
||||||
interrupt_char = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mp_hal_stdin_rx_chr(void) {
|
|
||||||
for (;;) {
|
|
||||||
if (uart_rx_any()) {
|
|
||||||
return uart_rx_char();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mp_hal_stdout_tx_str(const char *str) {
|
|
||||||
mp_hal_stdout_tx_strn(str, strlen(str));
|
|
||||||
}
|
|
||||||
|
|
||||||
void mp_hal_stdout_tx_strn(const char *str, size_t len) {
|
|
||||||
for (; len > 0; --len) {
|
|
||||||
uart_tx_char(*str++);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mp_hal_stdout_tx_strn_cooked(const char *str, size_t len) {
|
|
||||||
for (; len > 0; --len) {
|
|
||||||
if (*str == '\n') {
|
|
||||||
uart_tx_char('\r');
|
|
||||||
}
|
|
||||||
uart_tx_char(*str++);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the MicroPython project, http://micropython.org/
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 Damien P. George
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
* THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "py/mpstate.h"
|
|
||||||
|
|
||||||
void mp_hal_init(void);
|
|
||||||
|
|
||||||
void mp_hal_set_interrupt_char(int c);
|
|
@ -1 +0,0 @@
|
|||||||
// qstrs specific to this port
|
|
@ -1,11 +0,0 @@
|
|||||||
#ifndef MICROPY_INCLUDED_PIC16BIT_UNISTD_H
|
|
||||||
#define MICROPY_INCLUDED_PIC16BIT_UNISTD_H
|
|
||||||
|
|
||||||
// XC16 compiler doesn't seem to have unistd.h file
|
|
||||||
|
|
||||||
#define SEEK_SET 0
|
|
||||||
#define SEEK_CUR 1
|
|
||||||
|
|
||||||
typedef int ssize_t;
|
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_PIC16BIT_UNISTD_H
|
|
Loading…
x
Reference in New Issue
Block a user