mimxrt: Add initial impl of machine.LED class, and basic pin support.
This commit implements an LED class with rudimentary parts of a pin C API to support it. The LED class does not yet support setting an intensity. This LED class is put in the machine module for the time being, until a better place is found. One LED is supported on TEENSY40 and MIMXRT1010_EVK boards.
This commit is contained in:
parent
e54626f4c1
commit
02cc4462b7
|
@ -88,9 +88,13 @@ SRC_TINYUSB_IMX_C += \
|
|||
|
||||
SRC_C = \
|
||||
main.c \
|
||||
led.c \
|
||||
pin.c \
|
||||
tusb_port.c \
|
||||
board_init.c \
|
||||
$(BOARD_DIR)/flash_config.c \
|
||||
$(BOARD_DIR)/pins.c \
|
||||
machine_led.c \
|
||||
modutime.c \
|
||||
modmachine.c \
|
||||
mphalport.c \
|
||||
|
@ -108,7 +112,12 @@ SRC_SS = $(MCU_DIR)/gcc/startup_$(MCU_SERIES).S
|
|||
SRC_S = lib/utils/gchelper_m3.s \
|
||||
|
||||
# List of sources for qstr extraction
|
||||
SRC_QSTR += modutime.c modmachine.c
|
||||
SRC_QSTR += \
|
||||
machine_led.c \
|
||||
modutime.c \
|
||||
modmachine.c \
|
||||
pin.c \
|
||||
$(BOARD_DIR)/pins.c \
|
||||
|
||||
OBJ += $(PY_O)
|
||||
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
||||
|
|
|
@ -45,8 +45,6 @@ volatile uint32_t systick_ms = 0;
|
|||
|
||||
const uint8_t dcd_data[] = { 0x00 };
|
||||
|
||||
void board_led_write(bool state);
|
||||
|
||||
void board_init(void) {
|
||||
// Init clock
|
||||
BOARD_BootClockRUN();
|
||||
|
@ -58,14 +56,6 @@ void board_init(void) {
|
|||
// 1ms tick timer
|
||||
SysTick_Config(SystemCoreClock / 1000);
|
||||
|
||||
// LED
|
||||
IOMUXC_SetPinMux(MICROPY_HW_LED_PINMUX, 0U);
|
||||
IOMUXC_SetPinConfig(MICROPY_HW_LED_PINMUX, 0x10B0U);
|
||||
|
||||
gpio_pin_config_t led_config = { kGPIO_DigitalOutput, 0, kGPIO_NoIntmode };
|
||||
GPIO_PinInit(MICROPY_HW_LED_PORT, MICROPY_HW_LED_PIN, &led_config);
|
||||
board_led_write(true);
|
||||
|
||||
// ------------- USB0 ------------- //
|
||||
|
||||
// Clock
|
||||
|
@ -95,10 +85,6 @@ void board_init(void) {
|
|||
// CLOCK_EnableUsbhs1Clock(kCLOCK_Usb480M, 480000000U);
|
||||
}
|
||||
|
||||
void board_led_write(bool state) {
|
||||
GPIO_PinWrite(MICROPY_HW_LED_PORT, MICROPY_HW_LED_PIN, state ? LED_STATE_ON : (1 - LED_STATE_ON));
|
||||
}
|
||||
|
||||
void SysTick_Handler(void) {
|
||||
systick_ms++;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#define BOARD_FLASH_SIZE (16 * 1024 * 1024)
|
||||
|
||||
#define MICROPY_HW_LED_PINMUX IOMUXC_GPIO_11_GPIOMUX_IO11
|
||||
#define MICROPY_HW_LED_PORT GPIO1
|
||||
#define MICROPY_HW_LED_PIN 11
|
||||
// i.MX RT1010 EVK has 1 board LED
|
||||
#define MICROPY_HW_LED1_PIN (GPIO_11)
|
||||
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
|
||||
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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 "pin.h"
|
||||
|
||||
static pin_af_obj_t GPIO_11_af[] = {
|
||||
PIN_AF(GPIOMUX_IO11, PIN_AF_MODE_ALT5, GPIO1, 0x10B0U),
|
||||
};
|
||||
|
||||
pin_obj_t GPIO_11 = PIN(GPIO_11, GPIO1, 5, GPIO_11_af);
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// NOTE: pins.h shall only be included in in pin.h
|
||||
// hence no include guards are needed since they will be provided by pin.h
|
||||
|
||||
extern pin_obj_t GPIO_11;
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#define BOARD_FLASH_SIZE (2 * 1024 * 1024)
|
||||
|
||||
#define MICROPY_HW_LED_PINMUX IOMUXC_GPIO_B0_03_GPIO2_IO03 // D13
|
||||
#define MICROPY_HW_LED_PORT GPIO2
|
||||
#define MICROPY_HW_LED_PIN 3
|
||||
// Teensy 4.0 has 1 board LED
|
||||
#define MICROPY_HW_LED1_PIN (GPIO_B0_03)
|
||||
#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
|
||||
#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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 "pin.h"
|
||||
|
||||
static pin_af_obj_t GPIO_B0_03_af[] = {
|
||||
PIN_AF(GPIO2_IO03, PIN_AF_MODE_ALT5, GPIO2, 0x10B0U),
|
||||
};
|
||||
|
||||
pin_obj_t GPIO_B0_03 = PIN(GPIO_B0_03, GPIO2, 3, GPIO_B0_03_af);
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// NOTE: pins.h shall only be included in in pin.h
|
||||
// hence no include guards are needed since they will be provided by pin.h
|
||||
|
||||
extern pin_obj_t GPIO_B0_03;
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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 "fsl_gpio.h"
|
||||
#include "fsl_iomuxc.h"
|
||||
|
||||
#include "py/runtime.h"
|
||||
#include "py/mphal.h"
|
||||
#include "led.h"
|
||||
|
||||
#if NUM_LEDS
|
||||
|
||||
const machine_led_obj_t machine_led_obj[NUM_LEDS] = {
|
||||
{
|
||||
.base = {&machine_led_type},
|
||||
.led_id = 1U,
|
||||
.led_pin = &MICROPY_HW_LED1_PIN,
|
||||
}
|
||||
};
|
||||
|
||||
void led_init(void) {
|
||||
// Turn off LEDs and initialize
|
||||
for (mp_int_t led = 0; led < NUM_LEDS; led++) {
|
||||
const pin_obj_t *led_pin = machine_led_obj[led].led_pin;
|
||||
|
||||
gpio_pin_config_t pin_config = {
|
||||
.outputLogic = 1U,
|
||||
.direction = kGPIO_DigitalOutput,
|
||||
.interruptMode = kGPIO_NoIntmode,
|
||||
};
|
||||
|
||||
GPIO_PinInit(led_pin->gpio, led_pin->pin, &pin_config);
|
||||
|
||||
// ALT mode for GPIO is always 5
|
||||
IOMUXC_SetPinMux(led_pin->muxRegister, 5U, 0, 0, led_pin->configRegister,
|
||||
1U); // Software Input On Field: Input Path is determined by functionality
|
||||
IOMUXC_SetPinConfig(led_pin->muxRegister, 5U, 0, 0, led_pin->configRegister, 0x10B0U);
|
||||
MICROPY_HW_LED_OFF(led_pin);
|
||||
}
|
||||
}
|
||||
|
||||
void led_state(machine_led_t led, int state) {
|
||||
if (led < 1 || led > NUM_LEDS) {
|
||||
return;
|
||||
}
|
||||
|
||||
const pin_obj_t *led_pin = machine_led_obj[led - 1].led_pin;
|
||||
|
||||
if (state == 0) {
|
||||
// turn LED off
|
||||
MICROPY_HW_LED_OFF(led_pin);
|
||||
} else {
|
||||
// turn LED on
|
||||
MICROPY_HW_LED_ON(led_pin);
|
||||
}
|
||||
}
|
||||
|
||||
void led_toggle(machine_led_t led) {
|
||||
if (led < 1 || led > NUM_LEDS) {
|
||||
return;
|
||||
}
|
||||
|
||||
const pin_obj_t *led_pin = machine_led_obj[led - 1].led_pin;
|
||||
mp_hal_pin_toggle(led_pin);
|
||||
}
|
||||
|
||||
void led_debug(int value, int delay) {
|
||||
for (mp_int_t i = 0; i < NUM_LEDS; i++) {
|
||||
led_state(i + 1, (value & (1 << i)));
|
||||
}
|
||||
mp_hal_delay_ms(delay);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void led_init(void) {
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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_MIMXRT_LED_H
|
||||
#define MICROPY_INCLUDED_MIMXRT_LED_H
|
||||
|
||||
#include "pin.h"
|
||||
|
||||
#if defined(MICROPY_HW_LED1_PIN)
|
||||
#define NUM_LEDS (1)
|
||||
#else
|
||||
#define NUM_LEDS (0)
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
MACHINE_BOARD_LED = 1,
|
||||
} machine_led_t;
|
||||
|
||||
typedef struct _machine_led_obj_t {
|
||||
mp_obj_base_t base;
|
||||
mp_uint_t led_id;
|
||||
const pin_obj_t *led_pin;
|
||||
} machine_led_obj_t;
|
||||
|
||||
void led_init(void);
|
||||
void led_state(machine_led_t led, int state);
|
||||
void led_toggle(machine_led_t led);
|
||||
void led_debug(int value, int delay);
|
||||
|
||||
extern const mp_obj_type_t machine_led_type;
|
||||
extern const machine_led_obj_t machine_led_obj[NUM_LEDS];
|
||||
|
||||
#endif // MICROPY_INCLUDED_MIMXRT_LED_H
|
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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 "py/mphal.h"
|
||||
#include "led.h"
|
||||
|
||||
#if NUM_LEDS
|
||||
|
||||
STATIC void led_obj_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
||||
(void)kind;
|
||||
machine_led_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
mp_printf(print, "LED(%u)", self->led_id);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t led_obj_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);
|
||||
|
||||
// Extract arguments
|
||||
mp_int_t led_id = mp_obj_get_int(args[0]);
|
||||
|
||||
// Check led id is in range
|
||||
if (!(1 <= led_id && led_id <= NUM_LEDS)) {
|
||||
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "LED(%d) doesn't exist", led_id));
|
||||
}
|
||||
|
||||
// Return reference to static object
|
||||
return MP_OBJ_FROM_PTR(&machine_led_obj[led_id - 1]);
|
||||
}
|
||||
|
||||
STATIC mp_obj_t led_obj_on(mp_obj_t self_in) {
|
||||
machine_led_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
MICROPY_HW_LED_ON(self->led_pin);
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(led_obj_on_obj, led_obj_on);
|
||||
|
||||
STATIC mp_obj_t led_obj_off(mp_obj_t self_in) {
|
||||
machine_led_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
MICROPY_HW_LED_OFF(self->led_pin);
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(led_obj_off_obj, led_obj_off);
|
||||
|
||||
STATIC mp_obj_t led_obj_toggle(mp_obj_t self_in) {
|
||||
machine_led_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
mp_hal_pin_toggle(self->led_pin);
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(led_obj_toggle_obj, led_obj_toggle);
|
||||
|
||||
STATIC const mp_rom_map_elem_t led_locals_dict_table[] = {
|
||||
{MP_ROM_QSTR(MP_QSTR_on), MP_ROM_PTR(&led_obj_on_obj)},
|
||||
{MP_ROM_QSTR(MP_QSTR_off), MP_ROM_PTR(&led_obj_off_obj)},
|
||||
{MP_ROM_QSTR(MP_QSTR_toggle), MP_ROM_PTR(&led_obj_toggle_obj)},
|
||||
};
|
||||
|
||||
STATIC MP_DEFINE_CONST_DICT(led_locals_dict, led_locals_dict_table);
|
||||
|
||||
const mp_obj_type_t machine_led_type = {
|
||||
{&mp_type_type},
|
||||
.name = MP_QSTR_LED,
|
||||
.print = led_obj_print,
|
||||
.make_new = led_obj_make_new,
|
||||
.locals_dict = (mp_obj_dict_t *)&led_locals_dict,
|
||||
};
|
||||
|
||||
#endif
|
|
@ -33,6 +33,7 @@
|
|||
#include "lib/utils/gchelper.h"
|
||||
#include "lib/utils/pyexec.h"
|
||||
#include "tusb.h"
|
||||
#include "led.h"
|
||||
|
||||
extern uint8_t _sstack, _estack, _gc_heap_start, _gc_heap_end;
|
||||
|
||||
|
@ -41,6 +42,7 @@ void board_init(void);
|
|||
int main(void) {
|
||||
board_init();
|
||||
tusb_init();
|
||||
led_init();
|
||||
|
||||
mp_stack_set_top(&_estack);
|
||||
mp_stack_set_limit(&_estack - &_sstack - 1024);
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "py/runtime.h"
|
||||
#include "extmod/machine_mem.h"
|
||||
#include "led.h"
|
||||
|
||||
#include CPU_HEADER_H
|
||||
|
||||
|
@ -48,6 +49,9 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
|
|||
{ MP_ROM_QSTR(MP_QSTR_mem8), MP_ROM_PTR(&machine_mem8_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_mem16), MP_ROM_PTR(&machine_mem16_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_mem32), MP_ROM_PTR(&machine_mem32_obj) },
|
||||
#if NUM_LEDS
|
||||
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&machine_led_type) },
|
||||
#endif
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(machine_module_globals, machine_module_globals_table);
|
||||
|
||||
|
|
|
@ -29,6 +29,10 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#define mp_hal_pin_high(p) (GPIO_PinWrite(p->gpio, p->pin, 1U))
|
||||
#define mp_hal_pin_low(p) (GPIO_PinWrite(p->gpio, p->pin, 0U))
|
||||
#define mp_hal_pin_toggle(p) (GPIO_PortToggle(p->gpio, (1 << p->pin)))
|
||||
|
||||
extern volatile uint32_t systick_ms;
|
||||
|
||||
void mp_hal_set_interrupt_char(int c);
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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 "pin.h"
|
||||
|
||||
const mp_obj_type_t pin_type = {
|
||||
.base = {&mp_type_type},
|
||||
.name = MP_QSTR_Pin,
|
||||
};
|
||||
|
||||
const mp_obj_type_t pin_af_type = {
|
||||
{&mp_type_type},
|
||||
.name = MP_QSTR_PinAF,
|
||||
};
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Philipp Ebensberger
|
||||
*
|
||||
* 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_MIMXRT_PIN_H
|
||||
#define MICROPY_INCLUDED_MIMXRT_PIN_H
|
||||
|
||||
#include "fsl_gpio.h"
|
||||
#include "py/obj.h"
|
||||
|
||||
enum {
|
||||
PIN_MODE_IN = 0,
|
||||
PIN_MODE_OUT,
|
||||
PIN_MODE_ALT,
|
||||
};
|
||||
|
||||
enum {
|
||||
PIN_AF_MODE_ALT1 = 1,
|
||||
PIN_AF_MODE_ALT2,
|
||||
PIN_AF_MODE_ALT3,
|
||||
PIN_AF_MODE_ALT4,
|
||||
PIN_AF_MODE_ALT5,
|
||||
PIN_AF_MODE_ALT6,
|
||||
PIN_AF_MODE_ALT7,
|
||||
PIN_AF_MODE_ALT8,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
mp_obj_base_t base;
|
||||
qstr name; // port name
|
||||
uint32_t af_mode; // alternate function
|
||||
void *instance; // pointer to peripheral instance for alternate function
|
||||
uint32_t pad_config; // pad configuration for alternate function
|
||||
} pin_af_obj_t;
|
||||
|
||||
typedef struct {
|
||||
mp_obj_base_t base;
|
||||
qstr name; // pad name
|
||||
GPIO_Type *gpio; // gpio instance for pin
|
||||
uint32_t pin; // pin number
|
||||
uint32_t muxRegister;
|
||||
uint32_t configRegister;
|
||||
uint32_t mode; // current pin mode
|
||||
uint32_t af_mode; // current alternate function mode
|
||||
size_t af_list_len; // length of available alternate functions list
|
||||
const pin_af_obj_t *af_list; // pointer tolist with alternate functions
|
||||
} pin_obj_t;
|
||||
|
||||
extern const mp_obj_type_t pin_type;
|
||||
extern const mp_obj_type_t pin_af_type;
|
||||
|
||||
#define PIN_AF(_name, _af_mode, _instance, _pad_config) \
|
||||
{ \
|
||||
.base = { &pin_af_type }, \
|
||||
.name = MP_QSTR_##_name, \
|
||||
.af_mode = (uint32_t)(_af_mode), \
|
||||
.instance = (void *)(_instance), \
|
||||
.pad_config = (uint32_t)(_pad_config), \
|
||||
} \
|
||||
|
||||
#define PIN(_name, _gpio, _pin, _af_list) \
|
||||
{ \
|
||||
.base = { &pin_type }, \
|
||||
.name = MP_QSTR_##_name, \
|
||||
.gpio = (_gpio), \
|
||||
.pin = (uint32_t)(_pin), \
|
||||
.muxRegister = (uint32_t)&(IOMUXC->SW_MUX_CTL_PAD[kIOMUXC_SW_MUX_CTL_PAD_##_name]), \
|
||||
.configRegister = (uint32_t)&(IOMUXC->SW_PAD_CTL_PAD[kIOMUXC_SW_PAD_CTL_PAD_##_name]), \
|
||||
.mode = PIN_MODE_IN, \
|
||||
.af_mode = PIN_AF_MODE_ALT5, \
|
||||
.af_list_len = (size_t)(sizeof((_af_list)) / sizeof(pin_af_obj_t)), \
|
||||
.af_list = (_af_list), \
|
||||
} \
|
||||
|
||||
// Include board specific pins
|
||||
#include "pins.h"
|
||||
|
||||
#endif // MICROPY_INCLUDED_MIMXRT_PIN_H
|
Loading…
Reference in New Issue