first pass of DigitalIO
This commit is contained in:
parent
f31a0d9cf5
commit
c588cc6db0
@ -70,6 +70,7 @@ INC += -I./stm32cube/CMSIS/Device/ST/STM32F4xx/Include
|
||||
INC += -I./stm32cube/CMSIS/Include
|
||||
INC += -I./boards
|
||||
INC += -I./boards/$(BOARD)
|
||||
INC += -I./peripherals
|
||||
INC += -I../../lib/mp-readline
|
||||
INC += -I../../lib/tinyusb/src
|
||||
INC += -I../../supervisor/shared/usb
|
||||
@ -88,10 +89,9 @@ endif
|
||||
|
||||
# C defines
|
||||
C_DEFS = \
|
||||
-DUSE_FULL_LL_DRIVER \
|
||||
-DUSE_HAL_DRIVER \
|
||||
-DSTM32F412Zx \
|
||||
-DUSE_HAL_DRIVER \
|
||||
-DSTM32F412Zx
|
||||
|
||||
# C defines
|
||||
#C_DEFS = \
|
||||
@ -144,8 +144,25 @@ CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_STM32F4 -DCFG_TUD_CDC_RX_BUFSIZE=1024 -DCFG_TUD
|
||||
SRC_STM32 = \
|
||||
boards/$(BOARD)/stm32f4xx_it.c \
|
||||
boards/$(BOARD)/stm32f4xx_hal_msp.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_gpio.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fsmc.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_i2c.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2s.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2s_ex.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_qspi.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_sdmmc.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sd.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usart.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_rcc.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_utils.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_exti.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \
|
||||
stm32cube/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \
|
||||
@ -169,6 +186,7 @@ SRC_C += \
|
||||
mphalport.c \
|
||||
tick.c \
|
||||
boards/$(BOARD)/board.c \
|
||||
boards/$(BOARD)/pins.c \
|
||||
lib/libc/string0.c \
|
||||
lib/mp-readline/readline.c \
|
||||
lib/oofatfs/ff.c \
|
||||
@ -180,6 +198,7 @@ SRC_C += \
|
||||
lib/utils/pyexec.c \
|
||||
lib/utils/stdout_helpers.c \
|
||||
lib/utils/sys_stdio_mphal.c \
|
||||
peripherals/stm32f4/stm32f412zg/pins.c \
|
||||
supervisor/shared/memory.c \
|
||||
#lib/tinyusb/src/portable/st/stm32f4/dcd_stm32f4.c
|
||||
|
||||
|
@ -1,208 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
"""Creates the pin file for the nRF5."""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
import csv
|
||||
|
||||
|
||||
def parse_port_pin(name_str):
|
||||
"""Parses a string and returns a (port-num, pin-num) tuple."""
|
||||
if len(name_str) < 4:
|
||||
raise ValueError("Expecting pin name to be at least 5 charcters.")
|
||||
if name_str[0] != 'P':
|
||||
raise ValueError("Expecting pin name to start with P")
|
||||
if name_str[1] not in ('0', '1'):
|
||||
raise ValueError("Expecting pin port to be in 0 or 1")
|
||||
port = ord(name_str[1]) - ord('0')
|
||||
pin_str = name_str[3:]
|
||||
if not pin_str.isdigit():
|
||||
raise ValueError("Expecting numeric pin number.")
|
||||
return (port, int(pin_str))
|
||||
|
||||
|
||||
class Pin(object):
|
||||
"""Holds the information associated with a pin."""
|
||||
|
||||
def __init__(self, port, pin):
|
||||
self.port = port
|
||||
self.pin = pin
|
||||
self.adc_channel = '0'
|
||||
self.board_pin = False
|
||||
|
||||
def cpu_pin_name(self):
|
||||
return 'P{:d}_{:02d}'.format(self.port, self.pin)
|
||||
|
||||
def is_board_pin(self):
|
||||
return self.board_pin
|
||||
|
||||
def set_is_board_pin(self):
|
||||
self.board_pin = True
|
||||
|
||||
def parse_adc(self, adc_str):
|
||||
if (adc_str[:3] != 'AIN'):
|
||||
return
|
||||
self.adc_channel = 'SAADC_CH_PSELP_PSELP_AnalogInput%d' % int(adc_str[3])
|
||||
|
||||
def print(self):
|
||||
print('const pin_obj_t pin_{:s} = PIN({:s}, {:d}, {:d}, {:s});'.format(
|
||||
self.cpu_pin_name(), self.cpu_pin_name(),
|
||||
self.port, self.pin, self.adc_channel))
|
||||
|
||||
def print_header(self, hdr_file):
|
||||
hdr_file.write('extern const pin_obj_t pin_{:s};\n'.
|
||||
format(self.cpu_pin_name()))
|
||||
|
||||
|
||||
class NamedPin(object):
|
||||
|
||||
def __init__(self, name, pin):
|
||||
self._name = name
|
||||
self._pin = pin
|
||||
|
||||
def pin(self):
|
||||
return self._pin
|
||||
|
||||
def name(self):
|
||||
return self._name
|
||||
|
||||
|
||||
class Pins(object):
|
||||
|
||||
def __init__(self):
|
||||
self.cpu_pins = [] # list of NamedPin objects
|
||||
self.board_pins = [] # list of NamedPin objects
|
||||
|
||||
def find_pin(self, port_num, pin_num):
|
||||
for named_pin in self.cpu_pins:
|
||||
pin = named_pin.pin()
|
||||
if pin.port == port_num and pin.pin == pin_num:
|
||||
return pin
|
||||
|
||||
def parse_af_file(self, filename):
|
||||
with open(filename, 'r') as csvfile:
|
||||
rows = csv.reader(csvfile)
|
||||
for row in rows:
|
||||
try:
|
||||
(port_num, pin_num) = parse_port_pin(row[0])
|
||||
except:
|
||||
continue
|
||||
pin = Pin(port_num, pin_num)
|
||||
if len(row) > 1:
|
||||
pin.parse_adc(row[1])
|
||||
self.cpu_pins.append(NamedPin(pin.cpu_pin_name(), pin))
|
||||
|
||||
def parse_board_file(self, filename):
|
||||
with open(filename, 'r') as csvfile:
|
||||
rows = csv.reader(csvfile)
|
||||
for row in rows:
|
||||
try:
|
||||
(port_num, pin_num) = parse_port_pin(row[1])
|
||||
except:
|
||||
continue
|
||||
pin = self.find_pin(port_num, pin_num)
|
||||
if pin:
|
||||
pin.set_is_board_pin()
|
||||
self.board_pins.append(NamedPin(row[0], pin))
|
||||
|
||||
def print_named(self, label, named_pins):
|
||||
print('')
|
||||
print('STATIC const mp_rom_map_elem_t {:s}_table[] = {{'.format(label))
|
||||
for named_pin in named_pins:
|
||||
pin = named_pin.pin()
|
||||
if pin.is_board_pin():
|
||||
print(' {{ MP_ROM_QSTR(MP_QSTR_{:s}), MP_ROM_PTR(&pin_{:s}) }},'.format(named_pin.name(), pin.cpu_pin_name()))
|
||||
print('};')
|
||||
print('MP_DEFINE_CONST_DICT({:s}, {:s}_table);'.format(label, label))
|
||||
|
||||
def print(self):
|
||||
for named_pin in self.cpu_pins:
|
||||
pin = named_pin.pin()
|
||||
if pin.is_board_pin():
|
||||
pin.print()
|
||||
self.print_named('mcu_pin_globals', self.cpu_pins)
|
||||
self.print_named('board_module_globals', self.board_pins)
|
||||
|
||||
def print_header(self, hdr_filename):
|
||||
with open(hdr_filename, 'wt') as hdr_file:
|
||||
for named_pin in self.cpu_pins:
|
||||
pin = named_pin.pin()
|
||||
if pin.is_board_pin():
|
||||
pin.print_header(hdr_file)
|
||||
|
||||
def print_qstr(self, qstr_filename):
|
||||
with open(qstr_filename, 'wt') as qstr_file:
|
||||
qstr_set = set([])
|
||||
for named_pin in self.cpu_pins:
|
||||
pin = named_pin.pin()
|
||||
if pin.is_board_pin():
|
||||
qstr_set |= set([named_pin.name()])
|
||||
for named_pin in self.board_pins:
|
||||
qstr_set |= set([named_pin.name()])
|
||||
for qstr in sorted(qstr_set):
|
||||
print('Q({})'.format(qstr), file=qstr_file)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="make-pins.py",
|
||||
usage="%(prog)s [options] [command]",
|
||||
description="Generate board specific pin file"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-a", "--af",
|
||||
dest="af_filename",
|
||||
help="Specifies the alternate function file for the chip",
|
||||
default="nrf_af.csv"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b", "--board",
|
||||
dest="board_filename",
|
||||
help="Specifies the board file",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-p", "--prefix",
|
||||
dest="prefix_filename",
|
||||
help="Specifies beginning portion of generated pins file",
|
||||
default="nrf52_prefix.c"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-q", "--qstr",
|
||||
dest="qstr_filename",
|
||||
help="Specifies name of generated qstr header file",
|
||||
default="build/pins_qstr.h"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-r", "--hdr",
|
||||
dest="hdr_filename",
|
||||
help="Specifies name of generated pin header file",
|
||||
default="build/pins.h"
|
||||
)
|
||||
args = parser.parse_args(sys.argv[1:])
|
||||
|
||||
pins = Pins()
|
||||
|
||||
print('// This file was automatically generated by make-pins.py')
|
||||
print('//')
|
||||
if args.af_filename:
|
||||
print('// --af {:s}'.format(args.af_filename))
|
||||
pins.parse_af_file(args.af_filename)
|
||||
|
||||
if args.board_filename:
|
||||
print('// --board {:s}'.format(args.board_filename))
|
||||
pins.parse_board_file(args.board_filename)
|
||||
|
||||
if args.prefix_filename:
|
||||
print('// --prefix {:s}'.format(args.prefix_filename))
|
||||
print('')
|
||||
with open(args.prefix_filename, 'r') as prefix_file:
|
||||
print(prefix_file.read())
|
||||
pins.print()
|
||||
pins.print_header(args.hdr_filename)
|
||||
pins.print_qstr(args.qstr_filename)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
90
ports/stm32f4/boards/stm32f412g_disco/pins.c
Normal file
90
ports/stm32f4/boards/stm32f412g_disco/pins.c
Normal file
@ -0,0 +1,90 @@
|
||||
#include "shared-bindings/board/__init__.h"
|
||||
|
||||
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE02), MP_ROM_PTR(&pin_PE02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE03), MP_ROM_PTR(&pin_PE03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE04), MP_ROM_PTR(&pin_PE04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE05), MP_ROM_PTR(&pin_PE05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE06), MP_ROM_PTR(&pin_PE06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC13), MP_ROM_PTR(&pin_PC13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF02), MP_ROM_PTR(&pin_PF02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF03), MP_ROM_PTR(&pin_PF03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF10), MP_ROM_PTR(&pin_PF10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC00), MP_ROM_PTR(&pin_PC00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC01), MP_ROM_PTR(&pin_PC01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC02), MP_ROM_PTR(&pin_PC02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC03), MP_ROM_PTR(&pin_PC03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA01), MP_ROM_PTR(&pin_PA01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA02), MP_ROM_PTR(&pin_PA02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA03), MP_ROM_PTR(&pin_PA03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA04), MP_ROM_PTR(&pin_PA04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA05), MP_ROM_PTR(&pin_PA05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA06), MP_ROM_PTR(&pin_PA06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA07), MP_ROM_PTR(&pin_PA07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC04), MP_ROM_PTR(&pin_PC04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC05), MP_ROM_PTR(&pin_PC05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB00), MP_ROM_PTR(&pin_PB00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB01), MP_ROM_PTR(&pin_PB01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF11), MP_ROM_PTR(&pin_PF11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF13), MP_ROM_PTR(&pin_PF13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB10), MP_ROM_PTR(&pin_PB10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB11), MP_ROM_PTR(&pin_PB11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB12), MP_ROM_PTR(&pin_PB12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB13), MP_ROM_PTR(&pin_PB13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB14), MP_ROM_PTR(&pin_PB14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB15), MP_ROM_PTR(&pin_PB15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD12), MP_ROM_PTR(&pin_PD12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD13), MP_ROM_PTR(&pin_PD13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG02), MP_ROM_PTR(&pin_PG02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC06), MP_ROM_PTR(&pin_PC06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC07), MP_ROM_PTR(&pin_PC07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC09), MP_ROM_PTR(&pin_PC09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA08), MP_ROM_PTR(&pin_PA08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA10), MP_ROM_PTR(&pin_PA10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA13), MP_ROM_PTR(&pin_PA13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA14), MP_ROM_PTR(&pin_PA14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA15), MP_ROM_PTR(&pin_PA15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD06), MP_ROM_PTR(&pin_PD06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG09), MP_ROM_PTR(&pin_PG09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG10), MP_ROM_PTR(&pin_PG10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG11), MP_ROM_PTR(&pin_PG11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG12), MP_ROM_PTR(&pin_PG12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG13), MP_ROM_PTR(&pin_PG13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG14), MP_ROM_PTR(&pin_PG14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB03), MP_ROM_PTR(&pin_PB03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB04), MP_ROM_PTR(&pin_PB04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB05), MP_ROM_PTR(&pin_PB05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB06), MP_ROM_PTR(&pin_PB06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB07), MP_ROM_PTR(&pin_PB07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB08), MP_ROM_PTR(&pin_PB08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB09), MP_ROM_PTR(&pin_PB09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE00), MP_ROM_PTR(&pin_PE00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE01), MP_ROM_PTR(&pin_PE01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_PB10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PB09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PB08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PG10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PG11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PF03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PF10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PG12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PF04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PG13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PG14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PG09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PC01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PC03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PC04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PC05) }, //alt PB09, see F401ZG-DISCO manual
|
||||
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PB00) }, //alt PB10, see F401ZG-DISCO manual
|
||||
{ MP_ROM_QSTR(MP_QSTR_LED1), MP_ROM_PTR(&pin_PE00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_LED2), MP_ROM_PTR(&pin_PE01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_LED3), MP_ROM_PTR(&pin_PE02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_LED4), MP_ROM_PTR(&pin_PE03) },
|
||||
};
|
||||
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|
@ -205,7 +205,7 @@ void PendSV_Handler(void)
|
||||
// /* USER CODE BEGIN OTG_FS_IRQn 0 */
|
||||
|
||||
// /* USER CODE END OTG_FS_IRQn 0 */
|
||||
// HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
|
||||
// // HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
|
||||
// /* USER CODE BEGIN OTG_FS_IRQn 1 */
|
||||
|
||||
// /* USER CODE END OTG_FS_IRQn 1 */
|
||||
|
@ -27,134 +27,131 @@
|
||||
#include "shared-bindings/digitalio/DigitalInOut.h"
|
||||
#include "py/runtime.h"
|
||||
#include "supervisor/shared/translate.h"
|
||||
|
||||
//#include "nrf_gpio.h"
|
||||
#include "stm32f4xx_hal.h"
|
||||
#include "stm32f4xx_ll_gpio.h"
|
||||
|
||||
void common_hal_digitalio_digitalinout_never_reset(
|
||||
// digitalio_digitalinout_obj_t *self) {
|
||||
// never_reset_pin_number(self->pin->number);
|
||||
digitalio_digitalinout_obj_t *self) {
|
||||
never_reset_pin_number(self->pin->port_number, self->pin->number);
|
||||
}
|
||||
|
||||
digitalinout_result_t common_hal_digitalio_digitalinout_construct(
|
||||
// digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) {
|
||||
// claim_pin(pin);
|
||||
// self->pin = pin;
|
||||
digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) {
|
||||
|
||||
// nrf_gpio_cfg_input(pin->number, NRF_GPIO_PIN_NOPULL);
|
||||
claim_pin(pin);
|
||||
self->pin = pin;
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
GPIO_InitStruct.Pin = (1 << pin->number);
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(pin->port, &GPIO_InitStruct);
|
||||
|
||||
return DIGITALINOUT_OK;
|
||||
}
|
||||
|
||||
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) {
|
||||
// return self->pin == mp_const_none;
|
||||
return false;
|
||||
return self->pin == mp_const_none;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self) {
|
||||
// if (common_hal_digitalio_digitalinout_deinited(self)) {
|
||||
// return;
|
||||
// }
|
||||
// nrf_gpio_cfg_default(self->pin->number);
|
||||
if (common_hal_digitalio_digitalinout_deinited(self)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// reset_pin_number(self->pin->number);
|
||||
// self->pin = mp_const_none;
|
||||
reset_pin_number(self->pin->port_number, self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_switch_to_input(
|
||||
digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
|
||||
nrf_gpio_cfg_input(self->pin->number, NRF_GPIO_PIN_NOPULL);
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
GPIO_InitStruct.Pin = (1 << self->pin->number);
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(self->pin->port, &GPIO_InitStruct);
|
||||
|
||||
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_switch_to_output(
|
||||
// digitalio_digitalinout_obj_t *self, bool value,
|
||||
// digitalio_drive_mode_t drive_mode) {
|
||||
digitalio_digitalinout_obj_t *self, bool value,
|
||||
digitalio_drive_mode_t drive_mode) {
|
||||
|
||||
// common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
|
||||
// common_hal_digitalio_digitalinout_set_value(self, value);
|
||||
common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
|
||||
common_hal_digitalio_digitalinout_set_value(self, value);
|
||||
}
|
||||
|
||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
||||
// digitalio_digitalinout_obj_t *self) {
|
||||
digitalio_digitalinout_obj_t *self) {
|
||||
|
||||
// return (nrf_gpio_pin_dir_get(self->pin->number) == NRF_GPIO_PIN_DIR_INPUT)
|
||||
// ? DIRECTION_INPUT : DIRECTION_OUTPUT;
|
||||
return DIRECTION_OUTPUT;
|
||||
return (LL_GPIO_GetPinMode(self->pin->port, (1 << self->pin->number))
|
||||
== LL_GPIO_MODE_INPUT) ? DIRECTION_INPUT : DIRECTION_OUTPUT;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_set_value(
|
||||
// digitalio_digitalinout_obj_t *self, bool value) {
|
||||
// nrf_gpio_pin_write(self->pin->number, value);
|
||||
digitalio_digitalinout_obj_t *self, bool value) {
|
||||
HAL_GPIO_WritePin(self->pin->port, 1 << self->pin->number, value);
|
||||
}
|
||||
|
||||
bool common_hal_digitalio_digitalinout_get_value(
|
||||
// digitalio_digitalinout_obj_t *self) {
|
||||
// return (nrf_gpio_pin_dir_get(self->pin->number) == NRF_GPIO_PIN_DIR_INPUT)
|
||||
// ? nrf_gpio_pin_read(self->pin->number)
|
||||
// : nrf_gpio_pin_out_read(self->pin->number);
|
||||
return false;
|
||||
digitalio_digitalinout_obj_t *self) {
|
||||
return (LL_GPIO_GetPinMode(self->pin->port, (1 << self->pin->number)) == LL_GPIO_MODE_INPUT)
|
||||
? HAL_GPIO_ReadPin(self->pin->port, (1 << self->pin->number))
|
||||
: LL_GPIO_IsOutputPinSet(self->pin->port, (1 << self->pin->number));
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_set_drive_mode(
|
||||
// digitalio_digitalinout_obj_t *self,
|
||||
// digitalio_drive_mode_t drive_mode) {
|
||||
// nrf_gpio_cfg(self->pin->number,
|
||||
// NRF_GPIO_PIN_DIR_OUTPUT,
|
||||
// NRF_GPIO_PIN_INPUT_DISCONNECT,
|
||||
// NRF_GPIO_PIN_NOPULL,
|
||||
// drive_mode == DRIVE_MODE_OPEN_DRAIN ? NRF_GPIO_PIN_H0D1 : NRF_GPIO_PIN_H0H1,
|
||||
// NRF_GPIO_PIN_NOSENSE);
|
||||
digitalio_digitalinout_obj_t *self,
|
||||
digitalio_drive_mode_t drive_mode) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
GPIO_InitStruct.Pin = (1 << self->pin->number);
|
||||
GPIO_InitStruct.Mode = (drive_mode == DRIVE_MODE_OPEN_DRAIN ?
|
||||
GPIO_MODE_OUTPUT_OD : GPIO_MODE_OUTPUT_PP);
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(self->pin->port, &GPIO_InitStruct);
|
||||
}
|
||||
|
||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
||||
// digitalio_digitalinout_obj_t *self) {
|
||||
// uint32_t pin = self->pin->number;
|
||||
// // Changes pin to be a relative pin number in port.
|
||||
// NRF_GPIO_Type *reg = nrf_gpio_pin_port_decode(&pin);
|
||||
digitalio_digitalinout_obj_t *self) {
|
||||
|
||||
// switch ((reg->PIN_CNF[pin] & GPIO_PIN_CNF_DRIVE_Msk) >> GPIO_PIN_CNF_DRIVE_Pos) {
|
||||
// case NRF_GPIO_PIN_S0D1:
|
||||
// case NRF_GPIO_PIN_H0D1:
|
||||
// return DRIVE_MODE_OPEN_DRAIN;
|
||||
// default:
|
||||
// return DRIVE_MODE_PUSH_PULL;
|
||||
// }
|
||||
return LL_GPIO_GetPinOutputType(self->pin->port, (1 << self->pin->port_number))
|
||||
== LL_GPIO_OUTPUT_OPENDRAIN ? DRIVE_MODE_OPEN_DRAIN : DRIVE_MODE_PUSH_PULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_set_pull(
|
||||
// digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
|
||||
// nrf_gpio_pin_pull_t hal_pull = NRF_GPIO_PIN_NOPULL;
|
||||
digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
|
||||
|
||||
// switch (pull) {
|
||||
// case PULL_UP:
|
||||
// hal_pull = NRF_GPIO_PIN_PULLUP;
|
||||
// break;
|
||||
// case PULL_DOWN:
|
||||
// hal_pull = NRF_GPIO_PIN_PULLDOWN;
|
||||
// break;
|
||||
// case PULL_NONE:
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
|
||||
// nrf_gpio_cfg_input(self->pin->number, hal_pull);
|
||||
switch (pull) {
|
||||
case PULL_UP:
|
||||
LL_GPIO_SetPinPull(self->pin->port,(1 << self->pin->number),LL_GPIO_PULL_UP);
|
||||
break;
|
||||
case PULL_DOWN:
|
||||
LL_GPIO_SetPinPull(self->pin->port,(1 << self->pin->number),LL_GPIO_PULL_DOWN);
|
||||
break;
|
||||
case PULL_NONE:
|
||||
LL_GPIO_SetPinPull(self->pin->port,(1 << self->pin->number),LL_GPIO_PULL_NO);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(
|
||||
digitalio_digitalinout_obj_t *self) {
|
||||
uint32_t pin = self->pin->number;
|
||||
// Changes pin to be a relative pin number in port.
|
||||
NRF_GPIO_Type *reg = nrf_gpio_pin_port_decode(&pin);
|
||||
|
||||
|
||||
if (nrf_gpio_pin_dir_get(self->pin->number) == NRF_GPIO_PIN_DIR_OUTPUT) {
|
||||
mp_raise_AttributeError(translate("Cannot get pull while in output mode"));
|
||||
}
|
||||
|
||||
switch ((reg->PIN_CNF[pin] & GPIO_PIN_CNF_PULL_Msk) >> GPIO_PIN_CNF_PULL_Pos) {
|
||||
case NRF_GPIO_PIN_PULLUP:
|
||||
switch (LL_GPIO_GetPinPull(self->pin->port,(1 << self->pin->number))) {
|
||||
case LL_GPIO_PULL_UP:
|
||||
return PULL_UP;
|
||||
case NRF_GPIO_PIN_PULLDOWN:
|
||||
case LL_GPIO_PULL_DOWN:
|
||||
return PULL_DOWN;
|
||||
case LL_GPIO_PULL_NO:
|
||||
return PULL_NONE;
|
||||
default:
|
||||
return PULL_NONE;
|
||||
}
|
||||
|
@ -26,157 +26,55 @@
|
||||
|
||||
#include "shared-bindings/microcontroller/Pin.h"
|
||||
|
||||
//#include "nrf_gpio.h"
|
||||
#include "py/mphal.h"
|
||||
#include "stm32f4/pins.h"
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
#include "stm32/pins.h"
|
||||
#include "supervisor/shared/rgb_led_status.h"
|
||||
#define GPIO_PORT_COUNT 5
|
||||
|
||||
#ifdef MICROPY_HW_NEOPIXEL
|
||||
bool neopixel_in_use;
|
||||
#endif
|
||||
#ifdef MICROPY_HW_APA102_MOSI
|
||||
bool apa102_sck_in_use;
|
||||
bool apa102_mosi_in_use;
|
||||
#endif
|
||||
#ifdef SPEAKER_ENABLE_PIN
|
||||
bool speaker_enable_in_use;
|
||||
#endif
|
||||
|
||||
// Bit mask of claimed pins on each of up to two ports. nrf52832 has one port; nrf52840 has two.
|
||||
STATIC uint32_t claimed_pins[GPIO_COUNT];
|
||||
STATIC uint32_t never_reset_pins[GPIO_COUNT];
|
||||
STATIC uint16_t claimed_pins[GPIO_PORT_COUNT];
|
||||
STATIC uint16_t never_reset_pins[GPIO_PORT_COUNT];
|
||||
GPIO_TypeDef * ports[GPIO_PORT_COUNT] = {GPIOA, GPIOB, GPIOC, GPIOD, GPIOE};
|
||||
|
||||
void reset_all_pins(void) {
|
||||
for (size_t i = 0; i < GPIO_COUNT; i++) {
|
||||
// Reset claimed pins
|
||||
for (uint8_t i = 0; i < GPIO_PORT_COUNT; i++) {
|
||||
claimed_pins[i] = never_reset_pins[i];
|
||||
}
|
||||
|
||||
for (uint32_t pin = 0; pin < NUMBER_OF_PINS; ++pin) {
|
||||
if ((never_reset_pins[nrf_pin_port(pin)] & (1 << nrf_relative_pin_number(pin))) != 0) {
|
||||
continue;
|
||||
}
|
||||
nrf_gpio_cfg_default(pin);
|
||||
for (uint8_t i = 0; i < GPIO_PORT_COUNT; i++) {
|
||||
HAL_GPIO_DeInit(ports[i], ~never_reset_pins[i]);
|
||||
}
|
||||
|
||||
#ifdef MICROPY_HW_NEOPIXEL
|
||||
neopixel_in_use = false;
|
||||
#endif
|
||||
#ifdef MICROPY_HW_APA102_MOSI
|
||||
apa102_sck_in_use = false;
|
||||
apa102_mosi_in_use = false;
|
||||
#endif
|
||||
|
||||
// After configuring SWD because it may be shared.
|
||||
#ifdef SPEAKER_ENABLE_PIN
|
||||
speaker_enable_in_use = false;
|
||||
// TODO set pin to out and turn off.
|
||||
#endif
|
||||
}
|
||||
|
||||
// Mark pin as free and return it to a quiescent state.
|
||||
void reset_pin_number(uint8_t pin_number) {
|
||||
void reset_pin_number(uint8_t pin_port, uint8_t pin_number) {
|
||||
if (pin_number == NO_PIN) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Clear claimed bit.
|
||||
claimed_pins[nrf_pin_port(pin_number)] &= ~(1 << nrf_relative_pin_number(pin_number));
|
||||
|
||||
#ifdef MICROPY_HW_NEOPIXEL
|
||||
if (pin_number == MICROPY_HW_NEOPIXEL->number) {
|
||||
neopixel_in_use = false;
|
||||
rgb_led_status_init();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#ifdef MICROPY_HW_APA102_MOSI
|
||||
if (pin == MICROPY_HW_APA102_MOSI->number ||
|
||||
pin == MICROPY_HW_APA102_SCK->number) {
|
||||
apa102_mosi_in_use = apa102_mosi_in_use && pin_number != MICROPY_HW_APA102_MOSI->number;
|
||||
apa102_sck_in_use = apa102_sck_in_use && pin_number != MICROPY_HW_APA102_SCK->number;
|
||||
if (!apa102_sck_in_use && !apa102_mosi_in_use) {
|
||||
rgb_led_status_init();
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SPEAKER_ENABLE_PIN
|
||||
if (pin_number == SPEAKER_ENABLE_PIN->number) {
|
||||
speaker_enable_in_use = false;
|
||||
common_hal_digitalio_digitalinout_switch_to_output(
|
||||
nrf_gpio_pin_dir_set(pin_number, NRF_GPIO_PIN_DIR_OUTPUT);
|
||||
nrf_gpio_pin_write(pin_number, false);
|
||||
}
|
||||
#endif
|
||||
claimed_pins[pin_port] &= ~(1 << pin_number);
|
||||
// Reset the pin
|
||||
HAL_GPIO_DeInit(ports[pin_port], (1 << pin_number));
|
||||
}
|
||||
|
||||
|
||||
void never_reset_pin_number(uint8_t pin_number) {
|
||||
never_reset_pins[nrf_pin_port(pin_number)] |= 1 << nrf_relative_pin_number(pin_number);
|
||||
void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number) {
|
||||
never_reset_pins[pin_port] |= 1 << pin_number;
|
||||
}
|
||||
|
||||
void claim_pin(const mcu_pin_obj_t* pin) {
|
||||
// Set bit in claimed_pins bitmask.
|
||||
claimed_pins[nrf_pin_port(pin->number)] |= 1 << nrf_relative_pin_number(pin->number);
|
||||
|
||||
#ifdef MICROPY_HW_NEOPIXEL
|
||||
if (pin == MICROPY_HW_NEOPIXEL) {
|
||||
neopixel_in_use = true;
|
||||
}
|
||||
#endif
|
||||
#ifdef MICROPY_HW_APA102_MOSI
|
||||
if (pin == MICROPY_HW_APA102_MOSI) {
|
||||
apa102_mosi_in_use = true;
|
||||
}
|
||||
if (pin == MICROPY_HW_APA102_SCK) {
|
||||
apa102_sck_in_use = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SPEAKER_ENABLE_PIN
|
||||
if (pin == SPEAKER_ENABLE_PIN) {
|
||||
speaker_enable_in_use = true;
|
||||
}
|
||||
#endif
|
||||
claimed_pins[pin->port_number] |= 1 << pin->number;
|
||||
}
|
||||
|
||||
|
||||
bool pin_number_is_free(uint8_t pin_number) {
|
||||
return !(claimed_pins[nrf_pin_port(pin_number)] & (1 << nrf_relative_pin_number(pin_number)));
|
||||
bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number) {
|
||||
return !(claimed_pins[pin_port] & (1 << pin_number));
|
||||
}
|
||||
|
||||
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
|
||||
#ifdef MICROPY_HW_NEOPIXEL
|
||||
if (pin == MICROPY_HW_NEOPIXEL) {
|
||||
return !neopixel_in_use;
|
||||
}
|
||||
#endif
|
||||
#ifdef MICROPY_HW_APA102_MOSI
|
||||
if (pin == MICROPY_HW_APA102_MOSI) {
|
||||
return !apa102_mosi_in_use;
|
||||
}
|
||||
if (pin == MICROPY_HW_APA102_SCK) {
|
||||
return !apa102_sck_in_use;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SPEAKER_ENABLE_PIN
|
||||
if (pin == SPEAKER_ENABLE_PIN) {
|
||||
return !speaker_enable_in_use;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NRF52840
|
||||
// If NFC pins are enabled for NFC, don't allow them to be used for GPIO.
|
||||
if (((NRF_UICR->NFCPINS & UICR_NFCPINS_PROTECT_Msk) ==
|
||||
(UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos)) &&
|
||||
(pin->number == 9 || pin->number == 10)) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
return pin_number_is_free(pin->number);
|
||||
return pin_number_is_free(pin->port_number, pin->number);
|
||||
|
||||
}
|
||||
|
@ -24,38 +24,19 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef MICROPY_INCLUDED_NRF_COMMON_HAL_MICROCONTROLLER_PIN_H
|
||||
#define MICROPY_INCLUDED_NRF_COMMON_HAL_MICROCONTROLLER_PIN_H
|
||||
#ifndef MICROPY_INCLUDED_STM34F4_COMMON_HAL_MICROCONTROLLER_PIN_H
|
||||
#define MICROPY_INCLUDED_STM34F4_COMMON_HAL_MICROCONTROLLER_PIN_H
|
||||
|
||||
#include "py/mphal.h"
|
||||
|
||||
#include "peripherals/stm32/pins.h"
|
||||
|
||||
#ifdef MICROPY_HW_NEOPIXEL
|
||||
extern bool neopixel_in_use;
|
||||
#endif
|
||||
#ifdef MICROPY_HW_APA102_MOSI
|
||||
extern bool apa102_sck_in_use;
|
||||
extern bool apa102_mosi_in_use;
|
||||
#endif
|
||||
#include "peripherals/stm32f4/pins.h"
|
||||
|
||||
void reset_all_pins(void);
|
||||
// reset_pin_number takes the pin number instead of the pointer so that objects don't
|
||||
// need to store a full pointer.
|
||||
void reset_pin_number(uint8_t pin);
|
||||
void reset_pin_number(uint8_t pin_port, uint8_t pin);
|
||||
void claim_pin(const mcu_pin_obj_t* pin);
|
||||
bool pin_number_is_free(uint8_t pin_number);
|
||||
void never_reset_pin_number(uint8_t pin_number);
|
||||
bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number);
|
||||
void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number);
|
||||
|
||||
// Lower 5 bits of a pin number are the pin number in a port.
|
||||
// upper bits (just one bit for current chips) is port number.
|
||||
|
||||
static inline uint8_t nrf_pin_port(uint8_t absolute_pin) {
|
||||
return absolute_pin >> 5;
|
||||
}
|
||||
|
||||
static inline uint8_t nrf_relative_pin_number(uint8_t absolute_pin) {
|
||||
return absolute_pin & 0x1f;
|
||||
}
|
||||
|
||||
#endif // MICROPY_INCLUDED_NRF_COMMON_HAL_MICROCONTROLLER_PIN_H
|
||||
#endif // MICROPY_INCLUDED_STM34F4_COMMON_HAL_MICROCONTROLLER_PIN_H
|
||||
|
@ -37,12 +37,11 @@
|
||||
#include "shared-bindings/microcontroller/Processor.h"
|
||||
|
||||
#include "supervisor/filesystem.h"
|
||||
#include "nrfx_glue.h"
|
||||
|
||||
// This routine should work even when interrupts are disabled. Used by OneWire
|
||||
// for precise timing.
|
||||
void common_hal_mcu_delay_us(uint32_t delay) {
|
||||
NRFX_DELAY_US(delay);
|
||||
//NRFX_DELAY_US(delay);
|
||||
}
|
||||
|
||||
void common_hal_mcu_disable_interrupts() {
|
||||
@ -56,8 +55,8 @@ void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
|
||||
}
|
||||
|
||||
void common_hal_mcu_reset(void) {
|
||||
filesystem_flush();
|
||||
NVIC_SystemReset();
|
||||
// filesystem_flush();
|
||||
// NVIC_SystemReset();
|
||||
}
|
||||
|
||||
// The singleton microcontroller.Processor object, bound to microcontroller.cpu
|
||||
@ -78,55 +77,115 @@ const nvm_bytearray_obj_t common_hal_mcu_nvm_obj = {
|
||||
#endif
|
||||
|
||||
STATIC const mp_rom_map_elem_t mcu_pin_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_00), MP_ROM_PTR(&pin_P0_00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_01), MP_ROM_PTR(&pin_P0_01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_02), MP_ROM_PTR(&pin_P0_02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_03), MP_ROM_PTR(&pin_P0_03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_04), MP_ROM_PTR(&pin_P0_04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_05), MP_ROM_PTR(&pin_P0_05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_06), MP_ROM_PTR(&pin_P0_06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_07), MP_ROM_PTR(&pin_P0_07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_08), MP_ROM_PTR(&pin_P0_08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_09), MP_ROM_PTR(&pin_P0_09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_10), MP_ROM_PTR(&pin_P0_10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_11), MP_ROM_PTR(&pin_P0_11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_12), MP_ROM_PTR(&pin_P0_12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_13), MP_ROM_PTR(&pin_P0_13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_14), MP_ROM_PTR(&pin_P0_14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_15), MP_ROM_PTR(&pin_P0_15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_16), MP_ROM_PTR(&pin_P0_16) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_17), MP_ROM_PTR(&pin_P0_17) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_18), MP_ROM_PTR(&pin_P0_18) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_19), MP_ROM_PTR(&pin_P0_19) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_20), MP_ROM_PTR(&pin_P0_20) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_21), MP_ROM_PTR(&pin_P0_21) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_22), MP_ROM_PTR(&pin_P0_22) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_23), MP_ROM_PTR(&pin_P0_23) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_24), MP_ROM_PTR(&pin_P0_24) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_25), MP_ROM_PTR(&pin_P0_25) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_26), MP_ROM_PTR(&pin_P0_26) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_27), MP_ROM_PTR(&pin_P0_27) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_28), MP_ROM_PTR(&pin_P0_28) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_29), MP_ROM_PTR(&pin_P0_29) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_30), MP_ROM_PTR(&pin_P0_30) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P0_31), MP_ROM_PTR(&pin_P0_31) },
|
||||
#ifdef NRF52840
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_00), MP_ROM_PTR(&pin_P1_00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_01), MP_ROM_PTR(&pin_P1_01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_02), MP_ROM_PTR(&pin_P1_02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_03), MP_ROM_PTR(&pin_P1_03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_04), MP_ROM_PTR(&pin_P1_04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_05), MP_ROM_PTR(&pin_P1_05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_06), MP_ROM_PTR(&pin_P1_06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_07), MP_ROM_PTR(&pin_P1_07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_08), MP_ROM_PTR(&pin_P1_08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_09), MP_ROM_PTR(&pin_P1_09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_10), MP_ROM_PTR(&pin_P1_10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_11), MP_ROM_PTR(&pin_P1_11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_12), MP_ROM_PTR(&pin_P1_12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_13), MP_ROM_PTR(&pin_P1_13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_14), MP_ROM_PTR(&pin_P1_14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_P1_15), MP_ROM_PTR(&pin_P1_15) },
|
||||
#endif
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE02), MP_ROM_PTR(&pin_PE02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE03), MP_ROM_PTR(&pin_PE03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE04), MP_ROM_PTR(&pin_PE04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE05), MP_ROM_PTR(&pin_PE05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE06), MP_ROM_PTR(&pin_PE06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC13), MP_ROM_PTR(&pin_PC13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF00), MP_ROM_PTR(&pin_PF00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF01), MP_ROM_PTR(&pin_PF01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF02), MP_ROM_PTR(&pin_PF02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF03), MP_ROM_PTR(&pin_PF03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF04), MP_ROM_PTR(&pin_PF04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF05), MP_ROM_PTR(&pin_PF05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF06), MP_ROM_PTR(&pin_PF06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF07), MP_ROM_PTR(&pin_PF07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF08), MP_ROM_PTR(&pin_PF08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF09), MP_ROM_PTR(&pin_PF09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF10), MP_ROM_PTR(&pin_PF10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC00), MP_ROM_PTR(&pin_PC00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC01), MP_ROM_PTR(&pin_PC01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC02), MP_ROM_PTR(&pin_PC02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC03), MP_ROM_PTR(&pin_PC03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA00), MP_ROM_PTR(&pin_PA00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA01), MP_ROM_PTR(&pin_PA01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA02), MP_ROM_PTR(&pin_PA02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA03), MP_ROM_PTR(&pin_PA03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA04), MP_ROM_PTR(&pin_PA04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA05), MP_ROM_PTR(&pin_PA05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA06), MP_ROM_PTR(&pin_PA06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA07), MP_ROM_PTR(&pin_PA07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC04), MP_ROM_PTR(&pin_PC04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC05), MP_ROM_PTR(&pin_PC05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB00), MP_ROM_PTR(&pin_PB00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB01), MP_ROM_PTR(&pin_PB01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB02), MP_ROM_PTR(&pin_PB02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF11), MP_ROM_PTR(&pin_PF11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF12), MP_ROM_PTR(&pin_PF12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF13), MP_ROM_PTR(&pin_PF13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF14), MP_ROM_PTR(&pin_PF14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PF15), MP_ROM_PTR(&pin_PF15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG00), MP_ROM_PTR(&pin_PG00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG01), MP_ROM_PTR(&pin_PG01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE07), MP_ROM_PTR(&pin_PE07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE08), MP_ROM_PTR(&pin_PE08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE09), MP_ROM_PTR(&pin_PE09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE10), MP_ROM_PTR(&pin_PE10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE11), MP_ROM_PTR(&pin_PE11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE12), MP_ROM_PTR(&pin_PE12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE13), MP_ROM_PTR(&pin_PE13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE14), MP_ROM_PTR(&pin_PE14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE15), MP_ROM_PTR(&pin_PE15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB10), MP_ROM_PTR(&pin_PB10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB11), MP_ROM_PTR(&pin_PB11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB12), MP_ROM_PTR(&pin_PB12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB13), MP_ROM_PTR(&pin_PB13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB14), MP_ROM_PTR(&pin_PB14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB15), MP_ROM_PTR(&pin_PB15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD08), MP_ROM_PTR(&pin_PD08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD09), MP_ROM_PTR(&pin_PD09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD10), MP_ROM_PTR(&pin_PD10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD11), MP_ROM_PTR(&pin_PD11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD12), MP_ROM_PTR(&pin_PD12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD13), MP_ROM_PTR(&pin_PD13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD14), MP_ROM_PTR(&pin_PD14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD15), MP_ROM_PTR(&pin_PD15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG02), MP_ROM_PTR(&pin_PG02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG03), MP_ROM_PTR(&pin_PG03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG04), MP_ROM_PTR(&pin_PG04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG05), MP_ROM_PTR(&pin_PG05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG06), MP_ROM_PTR(&pin_PG06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG07), MP_ROM_PTR(&pin_PG07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG08), MP_ROM_PTR(&pin_PG08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC06), MP_ROM_PTR(&pin_PC06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC07), MP_ROM_PTR(&pin_PC07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC08), MP_ROM_PTR(&pin_PC08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC09), MP_ROM_PTR(&pin_PC09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA08), MP_ROM_PTR(&pin_PA08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA09), MP_ROM_PTR(&pin_PA09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA10), MP_ROM_PTR(&pin_PA10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA11), MP_ROM_PTR(&pin_PA11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA12), MP_ROM_PTR(&pin_PA12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA13), MP_ROM_PTR(&pin_PA13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA14), MP_ROM_PTR(&pin_PA14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PA15), MP_ROM_PTR(&pin_PA15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC10), MP_ROM_PTR(&pin_PC10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC11), MP_ROM_PTR(&pin_PC11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PC12), MP_ROM_PTR(&pin_PC12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD00), MP_ROM_PTR(&pin_PD00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD01), MP_ROM_PTR(&pin_PD01) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD02), MP_ROM_PTR(&pin_PD02) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD03), MP_ROM_PTR(&pin_PD03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD04), MP_ROM_PTR(&pin_PD04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD05), MP_ROM_PTR(&pin_PD05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD06), MP_ROM_PTR(&pin_PD06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PD07), MP_ROM_PTR(&pin_PD07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG09), MP_ROM_PTR(&pin_PG09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG10), MP_ROM_PTR(&pin_PG10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG11), MP_ROM_PTR(&pin_PG11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG12), MP_ROM_PTR(&pin_PG12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG13), MP_ROM_PTR(&pin_PG13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG14), MP_ROM_PTR(&pin_PG14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PG15), MP_ROM_PTR(&pin_PG15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB03), MP_ROM_PTR(&pin_PB03) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB04), MP_ROM_PTR(&pin_PB04) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB05), MP_ROM_PTR(&pin_PB05) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB06), MP_ROM_PTR(&pin_PB06) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB07), MP_ROM_PTR(&pin_PB07) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB08), MP_ROM_PTR(&pin_PB08) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PB09), MP_ROM_PTR(&pin_PB09) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE00), MP_ROM_PTR(&pin_PE00) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_PE01), MP_ROM_PTR(&pin_PE01) },
|
||||
};
|
||||
MP_DEFINE_CONST_DICT(mcu_pin_globals, mcu_pin_globals_table);
|
||||
|
@ -34,16 +34,16 @@ CIRCUITPY_AUDIOBUSIO = 0
|
||||
CIRCUITPY_AUDIOIO = 0
|
||||
CIRCUITPY_BITBANGIO = 0
|
||||
CIRCUITPY_BLEIO = 0
|
||||
CIRCUITPY_BOARD = 0
|
||||
CIRCUITPY_BOARD = 1
|
||||
CIRCUITPY_BUSIO = 0
|
||||
CIRCUITPY_DIGITALIO = 0
|
||||
CIRCUITPY_DIGITALIO = 1
|
||||
CIRCUITPY_DISPLAYIO = 0
|
||||
CIRCUITPY_FREQUENCYIO = 0
|
||||
CIRCUITPY_GAMEPAD = 0
|
||||
CIRCUITPY_GAMEPADSHIFT = 0
|
||||
CIRCUITPY_I2CSLAVE = 0
|
||||
CIRCUITPY_MATH = 0
|
||||
CIRCUITPY_MICROCONTROLLER = 0
|
||||
CIRCUITPY_MICROCONTROLLER = 1
|
||||
CIRCUITPY_NEOPIXEL_WRITE = 0
|
||||
CIRCUITPY_NETWORK = 0
|
||||
CIRCUITPY_NVM = 0
|
||||
|
@ -1,78 +0,0 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2018 Dan Halbert for Adafruit Industries
|
||||
*
|
||||
* 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/obj.h"
|
||||
#include "py/mphal.h"
|
||||
#include "stm32/pins.h"
|
||||
|
||||
const mcu_pin_obj_t pin_P0_00 = PIN(P0_00, 0, 0, 0);
|
||||
const mcu_pin_obj_t pin_P0_01 = PIN(P0_01, 0, 1, 0);
|
||||
const mcu_pin_obj_t pin_P0_02 = PIN(P0_02, 0, 2, 0);
|
||||
const mcu_pin_obj_t pin_P0_03 = PIN(P0_03, 0, 3, 0);
|
||||
const mcu_pin_obj_t pin_P0_04 = PIN(P0_04, 0, 4, 0);
|
||||
const mcu_pin_obj_t pin_P0_05 = PIN(P0_05, 0, 5, 0);
|
||||
const mcu_pin_obj_t pin_P0_06 = PIN(P0_06, 0, 6, 0);
|
||||
const mcu_pin_obj_t pin_P0_07 = PIN(P0_07, 0, 7, 0);
|
||||
const mcu_pin_obj_t pin_P0_08 = PIN(P0_08, 0, 8, 0);
|
||||
const mcu_pin_obj_t pin_P0_09 = PIN(P0_09, 0, 9, 0);
|
||||
const mcu_pin_obj_t pin_P0_10 = PIN(P0_10, 0, 10, 0);
|
||||
const mcu_pin_obj_t pin_P0_11 = PIN(P0_11, 0, 11, 0);
|
||||
const mcu_pin_obj_t pin_P0_12 = PIN(P0_12, 0, 12, 0);
|
||||
const mcu_pin_obj_t pin_P0_13 = PIN(P0_13, 0, 13, 0);
|
||||
const mcu_pin_obj_t pin_P0_14 = PIN(P0_14, 0, 14, 0);
|
||||
const mcu_pin_obj_t pin_P0_15 = PIN(P0_15, 0, 15, 0);
|
||||
const mcu_pin_obj_t pin_P0_16 = PIN(P0_16, 0, 16, 0);
|
||||
const mcu_pin_obj_t pin_P0_17 = PIN(P0_17, 0, 17, 0);
|
||||
const mcu_pin_obj_t pin_P0_18 = PIN(P0_18, 0, 18, 0);
|
||||
const mcu_pin_obj_t pin_P0_19 = PIN(P0_19, 0, 19, 0);
|
||||
const mcu_pin_obj_t pin_P0_20 = PIN(P0_20, 0, 20, 0);
|
||||
const mcu_pin_obj_t pin_P0_21 = PIN(P0_21, 0, 21, 0);
|
||||
const mcu_pin_obj_t pin_P0_22 = PIN(P0_22, 0, 22, 0);
|
||||
const mcu_pin_obj_t pin_P0_23 = PIN(P0_23, 0, 23, 0);
|
||||
const mcu_pin_obj_t pin_P0_24 = PIN(P0_24, 0, 24, 0);
|
||||
const mcu_pin_obj_t pin_P0_25 = PIN(P0_25, 0, 25, 0);
|
||||
const mcu_pin_obj_t pin_P0_26 = PIN(P0_26, 0, 26, 0);
|
||||
const mcu_pin_obj_t pin_P0_27 = PIN(P0_27, 0, 27, 0);
|
||||
const mcu_pin_obj_t pin_P0_28 = PIN(P0_28, 0, 28, 0);
|
||||
const mcu_pin_obj_t pin_P0_29 = PIN(P0_29, 0, 29, 0);
|
||||
const mcu_pin_obj_t pin_P0_30 = PIN(P0_30, 0, 30, 0);
|
||||
const mcu_pin_obj_t pin_P0_31 = PIN(P0_31, 0, 31, 0);
|
||||
const mcu_pin_obj_t pin_P1_00 = PIN(P1_00, 1, 0, 0);
|
||||
const mcu_pin_obj_t pin_P1_01 = PIN(P1_01, 1, 1, 0);
|
||||
const mcu_pin_obj_t pin_P1_02 = PIN(P1_02, 1, 2, 0);
|
||||
const mcu_pin_obj_t pin_P1_03 = PIN(P1_03, 1, 3, 0);
|
||||
const mcu_pin_obj_t pin_P1_04 = PIN(P1_04, 1, 4, 0);
|
||||
const mcu_pin_obj_t pin_P1_05 = PIN(P1_05, 1, 5, 0);
|
||||
const mcu_pin_obj_t pin_P1_06 = PIN(P1_06, 1, 6, 0);
|
||||
const mcu_pin_obj_t pin_P1_07 = PIN(P1_07, 1, 7, 0);
|
||||
const mcu_pin_obj_t pin_P1_08 = PIN(P1_08, 1, 8, 0);
|
||||
const mcu_pin_obj_t pin_P1_09 = PIN(P1_09, 1, 9, 0);
|
||||
const mcu_pin_obj_t pin_P1_10 = PIN(P1_10, 1, 10, 0);
|
||||
const mcu_pin_obj_t pin_P1_11 = PIN(P1_11, 1, 11, 0);
|
||||
const mcu_pin_obj_t pin_P1_12 = PIN(P1_12, 1, 12, 0);
|
||||
const mcu_pin_obj_t pin_P1_13 = PIN(P1_13, 1, 13, 0);
|
||||
const mcu_pin_obj_t pin_P1_14 = PIN(P1_14, 1, 14, 0);
|
||||
const mcu_pin_obj_t pin_P1_15 = PIN(P1_15, 1, 15, 0);
|
@ -1,79 +0,0 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2018 by Dan Halbert for Adafruit Industries
|
||||
*
|
||||
* 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_NRF_PERIPHERALS_NRF52840_PINS_H
|
||||
#define MICROPY_INCLUDED_NRF_PERIPHERALS_NRF52840_PINS_H
|
||||
|
||||
extern const mcu_pin_obj_t pin_P0_00;
|
||||
extern const mcu_pin_obj_t pin_P0_01;
|
||||
extern const mcu_pin_obj_t pin_P0_02;
|
||||
extern const mcu_pin_obj_t pin_P0_03;
|
||||
extern const mcu_pin_obj_t pin_P0_04;
|
||||
extern const mcu_pin_obj_t pin_P0_05;
|
||||
extern const mcu_pin_obj_t pin_P0_06;
|
||||
extern const mcu_pin_obj_t pin_P0_07;
|
||||
extern const mcu_pin_obj_t pin_P0_08;
|
||||
extern const mcu_pin_obj_t pin_P0_09;
|
||||
extern const mcu_pin_obj_t pin_P0_10;
|
||||
extern const mcu_pin_obj_t pin_P0_11;
|
||||
extern const mcu_pin_obj_t pin_P0_12;
|
||||
extern const mcu_pin_obj_t pin_P0_13;
|
||||
extern const mcu_pin_obj_t pin_P0_14;
|
||||
extern const mcu_pin_obj_t pin_P0_15;
|
||||
extern const mcu_pin_obj_t pin_P0_16;
|
||||
extern const mcu_pin_obj_t pin_P0_17;
|
||||
extern const mcu_pin_obj_t pin_P0_18;
|
||||
extern const mcu_pin_obj_t pin_P0_19;
|
||||
extern const mcu_pin_obj_t pin_P0_20;
|
||||
extern const mcu_pin_obj_t pin_P0_21;
|
||||
extern const mcu_pin_obj_t pin_P0_22;
|
||||
extern const mcu_pin_obj_t pin_P0_23;
|
||||
extern const mcu_pin_obj_t pin_P0_24;
|
||||
extern const mcu_pin_obj_t pin_P0_25;
|
||||
extern const mcu_pin_obj_t pin_P0_26;
|
||||
extern const mcu_pin_obj_t pin_P0_27;
|
||||
extern const mcu_pin_obj_t pin_P0_28;
|
||||
extern const mcu_pin_obj_t pin_P0_29;
|
||||
extern const mcu_pin_obj_t pin_P0_30;
|
||||
extern const mcu_pin_obj_t pin_P0_31;
|
||||
extern const mcu_pin_obj_t pin_P1_00;
|
||||
extern const mcu_pin_obj_t pin_P1_01;
|
||||
extern const mcu_pin_obj_t pin_P1_02;
|
||||
extern const mcu_pin_obj_t pin_P1_03;
|
||||
extern const mcu_pin_obj_t pin_P1_04;
|
||||
extern const mcu_pin_obj_t pin_P1_05;
|
||||
extern const mcu_pin_obj_t pin_P1_06;
|
||||
extern const mcu_pin_obj_t pin_P1_07;
|
||||
extern const mcu_pin_obj_t pin_P1_08;
|
||||
extern const mcu_pin_obj_t pin_P1_09;
|
||||
extern const mcu_pin_obj_t pin_P1_10;
|
||||
extern const mcu_pin_obj_t pin_P1_11;
|
||||
extern const mcu_pin_obj_t pin_P1_12;
|
||||
extern const mcu_pin_obj_t pin_P1_13;
|
||||
extern const mcu_pin_obj_t pin_P1_14;
|
||||
extern const mcu_pin_obj_t pin_P1_15;
|
||||
|
||||
#endif // MICROPY_INCLUDED_NRF_PERIPHERALS_NRF52840_PINS_H
|
@ -27,38 +27,46 @@
|
||||
// DO NOT include this file directly. Use shared-bindings/microcontroller/Pin.h instead to ensure
|
||||
// that all necessary includes are already included.
|
||||
|
||||
#ifndef __MICROPY_INCLUDED_NRF_PERIPHERALS_PINS_H__
|
||||
#define __MICROPY_INCLUDED_NRF_PERIPHERALS_PINS_H__
|
||||
#ifndef __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
|
||||
#define __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
//#include "nrf_gpio.h"
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
typedef struct {
|
||||
mp_obj_base_t base;
|
||||
// These could be squeezed to fewer bits if more fields are needed.
|
||||
uint8_t number; // port << 5 | pin number in port (0-31): 6 bits needed
|
||||
uint8_t adc_channel; // 0 is no ADC, ADC channel from 1 to 8:
|
||||
// 4 bits needed here; 5 bits used in periph registers
|
||||
//uint8_t number; //(3)port,(5)pin
|
||||
uint8_t port_number;
|
||||
GPIO_TypeDef * port;
|
||||
uint8_t number;
|
||||
} mcu_pin_obj_t;
|
||||
|
||||
// extern GPIO_TypeDef *port_lookup_table[];
|
||||
|
||||
// static inline GPIO_TypeDef * get_GPIO_ptr(const mcu_pin_obj_t *p)
|
||||
// {
|
||||
// return port_lookup_table[0x7&( (p->number) >> 5)];
|
||||
// }
|
||||
|
||||
extern const mp_obj_type_t mcu_pin_type;
|
||||
|
||||
// Used in device-specific pins.c
|
||||
#define PIN(p_name, p_port, p_pin, p_adc_channel) \
|
||||
#define PIN(p_port_num, p_port, p_number) \
|
||||
{ \
|
||||
{ &mcu_pin_type }, \
|
||||
.number = NRF_GPIO_PIN_MAP(p_port, p_pin), \
|
||||
.adc_channel = (p_adc_channel), \
|
||||
.port_number = (p_port_num), \
|
||||
.port = (p_port), \
|
||||
.number = (p_number), \
|
||||
}
|
||||
|
||||
// Use illegal pin value to mark unassigned pins.
|
||||
#define NO_PIN 0xff
|
||||
|
||||
// Choose based on chip, but not specifically revision (e.g., not NRF52840_XXAA)
|
||||
#ifdef NRF52840
|
||||
#include "nrf52840/pins.h"
|
||||
#endif
|
||||
// Choose based on chip
|
||||
//#ifdef STM32F412ZG
|
||||
#include "stm32f412zg/pins.h"
|
||||
//#endif
|
||||
|
||||
#endif // __MICROPY_INCLUDED_NRF_PERIPHERALS_PINS_H__
|
||||
#endif // __MICROPY_INCLUDED_STM32F4_PERIPHERALS_PINS_H__
|
159
ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c
Normal file
159
ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c
Normal file
@ -0,0 +1,159 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2018 Dan Halbert for Adafruit Industries
|
||||
*
|
||||
* 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/obj.h"
|
||||
#include "py/mphal.h"
|
||||
#include "stm32f4/pins.h"
|
||||
|
||||
const mcu_pin_obj_t pin_PE02 = PIN(4, GPIOE, 2);
|
||||
const mcu_pin_obj_t pin_PE03 = PIN(4, GPIOE, 3);
|
||||
const mcu_pin_obj_t pin_PE04 = PIN(4, GPIOE, 4);
|
||||
const mcu_pin_obj_t pin_PE05 = PIN(4, GPIOE, 5);
|
||||
const mcu_pin_obj_t pin_PE06 = PIN(4, GPIOE, 6);
|
||||
|
||||
const mcu_pin_obj_t pin_PC13 = PIN(2, GPIOC, 13);
|
||||
|
||||
const mcu_pin_obj_t pin_PF00 = PIN(5, GPIOF, 0); // 144 only
|
||||
const mcu_pin_obj_t pin_PF01 = PIN(5, GPIOF, 1); // 144 only
|
||||
const mcu_pin_obj_t pin_PF02 = PIN(5, GPIOF, 2); // 144 only
|
||||
const mcu_pin_obj_t pin_PF03 = PIN(5, GPIOF, 3); // 144 only
|
||||
const mcu_pin_obj_t pin_PF04 = PIN(5, GPIOF, 4); // 144 only
|
||||
const mcu_pin_obj_t pin_PF05 = PIN(5, GPIOF, 5); // 144 only
|
||||
const mcu_pin_obj_t pin_PF06 = PIN(5, GPIOF, 6); // 144 only
|
||||
const mcu_pin_obj_t pin_PF07 = PIN(5, GPIOF, 7); // 144 only
|
||||
const mcu_pin_obj_t pin_PF08 = PIN(5, GPIOF, 8); // 144 only
|
||||
const mcu_pin_obj_t pin_PF09 = PIN(5, GPIOF, 9); // 144 only
|
||||
const mcu_pin_obj_t pin_PF10 = PIN(5, GPIOF, 10); // 144 only
|
||||
|
||||
const mcu_pin_obj_t pin_PC00 = PIN(2, GPIOC, 0);
|
||||
const mcu_pin_obj_t pin_PC01 = PIN(2, GPIOC, 1);
|
||||
const mcu_pin_obj_t pin_PC02 = PIN(2, GPIOC, 2);
|
||||
const mcu_pin_obj_t pin_PC03 = PIN(2, GPIOC, 3);
|
||||
|
||||
const mcu_pin_obj_t pin_PA00 = PIN(0, GPIOA, 0);
|
||||
const mcu_pin_obj_t pin_PA01 = PIN(0, GPIOA, 1);
|
||||
const mcu_pin_obj_t pin_PA02 = PIN(0, GPIOA, 2);
|
||||
const mcu_pin_obj_t pin_PA03 = PIN(0, GPIOA, 3);
|
||||
const mcu_pin_obj_t pin_PA04 = PIN(0, GPIOA, 4);
|
||||
const mcu_pin_obj_t pin_PA05 = PIN(0, GPIOA, 5);
|
||||
const mcu_pin_obj_t pin_PA06 = PIN(0, GPIOA, 6);
|
||||
const mcu_pin_obj_t pin_PA07 = PIN(0, GPIOA, 7);
|
||||
|
||||
const mcu_pin_obj_t pin_PC04 = PIN(2, GPIOC, 4);
|
||||
const mcu_pin_obj_t pin_PC05 = PIN(2, GPIOC, 5);
|
||||
|
||||
const mcu_pin_obj_t pin_PB00 = PIN(1, GPIOB, 0);
|
||||
const mcu_pin_obj_t pin_PB01 = PIN(1, GPIOB, 1);
|
||||
const mcu_pin_obj_t pin_PB02 = PIN(1, GPIOB, 2);
|
||||
|
||||
const mcu_pin_obj_t pin_PF11 = PIN(5, GPIOF, 11); // 144 only
|
||||
const mcu_pin_obj_t pin_PF12 = PIN(5, GPIOF, 12); // 144 only
|
||||
const mcu_pin_obj_t pin_PF13 = PIN(5, GPIOF, 13); // 144 only
|
||||
const mcu_pin_obj_t pin_PF14 = PIN(5, GPIOF, 14); // 144 only
|
||||
const mcu_pin_obj_t pin_PF15 = PIN(5, GPIOF, 15); // 144 only
|
||||
|
||||
const mcu_pin_obj_t pin_PG00 = PIN(6, GPIOG, 0); // 144 only
|
||||
const mcu_pin_obj_t pin_PG01 = PIN(6, GPIOG, 1); // 144 only
|
||||
|
||||
const mcu_pin_obj_t pin_PE07 = PIN(4, GPIOE, 7);
|
||||
const mcu_pin_obj_t pin_PE08 = PIN(4, GPIOE, 8);
|
||||
const mcu_pin_obj_t pin_PE09 = PIN(4, GPIOE, 9);
|
||||
const mcu_pin_obj_t pin_PE10 = PIN(4, GPIOE, 10);
|
||||
const mcu_pin_obj_t pin_PE11 = PIN(4, GPIOE, 11);
|
||||
const mcu_pin_obj_t pin_PE12 = PIN(4, GPIOE, 12);
|
||||
const mcu_pin_obj_t pin_PE13 = PIN(4, GPIOE, 13);
|
||||
const mcu_pin_obj_t pin_PE14 = PIN(4, GPIOE, 14);
|
||||
const mcu_pin_obj_t pin_PE15 = PIN(4, GPIOE, 15);
|
||||
|
||||
const mcu_pin_obj_t pin_PB10 = PIN(1, GPIOB, 10);
|
||||
const mcu_pin_obj_t pin_PB12 = PIN(1, GPIOB, 12);
|
||||
const mcu_pin_obj_t pin_PB11 = PIN(1, GPIOB, 11); // 144 only
|
||||
const mcu_pin_obj_t pin_PB13 = PIN(1, GPIOB, 13);
|
||||
const mcu_pin_obj_t pin_PB14 = PIN(1, GPIOB, 14);
|
||||
const mcu_pin_obj_t pin_PB15 = PIN(1, GPIOB, 15);
|
||||
|
||||
const mcu_pin_obj_t pin_PD08 = PIN(3, GPIOD, 8);
|
||||
const mcu_pin_obj_t pin_PD09 = PIN(3, GPIOD, 9);
|
||||
const mcu_pin_obj_t pin_PD10 = PIN(3, GPIOD, 10);
|
||||
const mcu_pin_obj_t pin_PD11 = PIN(3, GPIOD, 11);
|
||||
const mcu_pin_obj_t pin_PD12 = PIN(3, GPIOD, 12);
|
||||
const mcu_pin_obj_t pin_PD13 = PIN(3, GPIOD, 13);
|
||||
const mcu_pin_obj_t pin_PD14 = PIN(3, GPIOD, 14);
|
||||
const mcu_pin_obj_t pin_PD15 = PIN(3, GPIOD, 15);
|
||||
|
||||
const mcu_pin_obj_t pin_PG02 = PIN(6, GPIOG, 2); // 144 only
|
||||
const mcu_pin_obj_t pin_PG03 = PIN(6, GPIOG, 3); // 144 only
|
||||
const mcu_pin_obj_t pin_PG04 = PIN(6, GPIOG, 4); // 144 only
|
||||
const mcu_pin_obj_t pin_PG05 = PIN(6, GPIOG, 5); // 144 only
|
||||
const mcu_pin_obj_t pin_PG06 = PIN(6, GPIOG, 6); // 144 only
|
||||
const mcu_pin_obj_t pin_PG07 = PIN(6, GPIOG, 7); // 144 only
|
||||
const mcu_pin_obj_t pin_PG08 = PIN(6, GPIOG, 8); // 144 only
|
||||
|
||||
const mcu_pin_obj_t pin_PC06 = PIN(2, GPIOC, 6);
|
||||
const mcu_pin_obj_t pin_PC07 = PIN(2, GPIOC, 7);
|
||||
const mcu_pin_obj_t pin_PC08 = PIN(2, GPIOC, 8);
|
||||
const mcu_pin_obj_t pin_PC09 = PIN(2, GPIOC, 9);
|
||||
|
||||
const mcu_pin_obj_t pin_PA08 = PIN(0, GPIOA, 8);
|
||||
const mcu_pin_obj_t pin_PA09 = PIN(0, GPIOA, 9);
|
||||
const mcu_pin_obj_t pin_PA10 = PIN(0, GPIOA, 10);
|
||||
const mcu_pin_obj_t pin_PA11 = PIN(0, GPIOA, 11);
|
||||
const mcu_pin_obj_t pin_PA12 = PIN(0, GPIOA, 12);
|
||||
const mcu_pin_obj_t pin_PA13 = PIN(0, GPIOA, 13);
|
||||
const mcu_pin_obj_t pin_PA14 = PIN(0, GPIOA, 14);
|
||||
const mcu_pin_obj_t pin_PA15 = PIN(0, GPIOA, 15);
|
||||
|
||||
const mcu_pin_obj_t pin_PC10 = PIN(2, GPIOC, 10);
|
||||
const mcu_pin_obj_t pin_PC11 = PIN(2, GPIOC, 11);
|
||||
const mcu_pin_obj_t pin_PC12 = PIN(2, GPIOC, 12);
|
||||
|
||||
const mcu_pin_obj_t pin_PD00 = PIN(3, GPIOD, 0);
|
||||
const mcu_pin_obj_t pin_PD01 = PIN(3, GPIOD, 1);
|
||||
const mcu_pin_obj_t pin_PD02 = PIN(3, GPIOD, 2);
|
||||
const mcu_pin_obj_t pin_PD03 = PIN(3, GPIOD, 3);
|
||||
const mcu_pin_obj_t pin_PD04 = PIN(3, GPIOD, 4);
|
||||
const mcu_pin_obj_t pin_PD05 = PIN(3, GPIOD, 5);
|
||||
const mcu_pin_obj_t pin_PD06 = PIN(3, GPIOD, 6);
|
||||
const mcu_pin_obj_t pin_PD07 = PIN(3, GPIOD, 7);
|
||||
|
||||
const mcu_pin_obj_t pin_PG09 = PIN(6, GPIOG, 9); // 144 only
|
||||
const mcu_pin_obj_t pin_PG10 = PIN(6, GPIOG, 10); // 144 only
|
||||
const mcu_pin_obj_t pin_PG11 = PIN(6, GPIOG, 11); // 144 only
|
||||
const mcu_pin_obj_t pin_PG12 = PIN(6, GPIOG, 12); // 144 only
|
||||
const mcu_pin_obj_t pin_PG13 = PIN(6, GPIOG, 13); // 144 only
|
||||
const mcu_pin_obj_t pin_PG14 = PIN(6, GPIOG, 14); // 144 only
|
||||
const mcu_pin_obj_t pin_PG15 = PIN(6, GPIOG, 15); // 144 only
|
||||
|
||||
const mcu_pin_obj_t pin_PB03 = PIN(1, GPIOB, 3);
|
||||
const mcu_pin_obj_t pin_PB04 = PIN(1, GPIOB, 4);
|
||||
const mcu_pin_obj_t pin_PB05 = PIN(1, GPIOB, 5);
|
||||
const mcu_pin_obj_t pin_PB06 = PIN(1, GPIOB, 6);
|
||||
const mcu_pin_obj_t pin_PB07 = PIN(1, GPIOB, 7);
|
||||
const mcu_pin_obj_t pin_PB08 = PIN(1, GPIOB, 8);
|
||||
const mcu_pin_obj_t pin_PB09 = PIN(1, GPIOB, 9);
|
||||
|
||||
const mcu_pin_obj_t pin_PE00 = PIN(4, GPIOE, 0);
|
||||
const mcu_pin_obj_t pin_PE01 = PIN(4, GPIOE, 1);
|
156
ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h
Normal file
156
ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h
Normal file
@ -0,0 +1,156 @@
|
||||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2018 by Dan Halbert for Adafruit Industries
|
||||
*
|
||||
* 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_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
|
||||
#define MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
|
||||
|
||||
//Pins in datasheet order: DocID028087 Rev 7 page 50. LQFP100 only
|
||||
//pg 50
|
||||
extern const mcu_pin_obj_t pin_PE02;
|
||||
extern const mcu_pin_obj_t pin_PE03;
|
||||
extern const mcu_pin_obj_t pin_PE04;
|
||||
extern const mcu_pin_obj_t pin_PE05;
|
||||
extern const mcu_pin_obj_t pin_PE06;
|
||||
extern const mcu_pin_obj_t pin_PC13;
|
||||
//pg 51
|
||||
extern const mcu_pin_obj_t pin_PF00; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF01; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF02; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF03; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF04; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF05; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF06; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF07; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF08; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF09; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF10; // 144 only
|
||||
//pg 52
|
||||
extern const mcu_pin_obj_t pin_PC00;
|
||||
extern const mcu_pin_obj_t pin_PC01;
|
||||
extern const mcu_pin_obj_t pin_PC02;
|
||||
extern const mcu_pin_obj_t pin_PC03;
|
||||
extern const mcu_pin_obj_t pin_PA00;
|
||||
extern const mcu_pin_obj_t pin_PA01;
|
||||
extern const mcu_pin_obj_t pin_PA02;
|
||||
//pg 53
|
||||
extern const mcu_pin_obj_t pin_PA03;
|
||||
extern const mcu_pin_obj_t pin_PA04;
|
||||
extern const mcu_pin_obj_t pin_PA05;
|
||||
extern const mcu_pin_obj_t pin_PA06;
|
||||
extern const mcu_pin_obj_t pin_PA07;
|
||||
extern const mcu_pin_obj_t pin_PC04;
|
||||
//pg 54
|
||||
extern const mcu_pin_obj_t pin_PC05;
|
||||
extern const mcu_pin_obj_t pin_PB00;
|
||||
extern const mcu_pin_obj_t pin_PB01;
|
||||
extern const mcu_pin_obj_t pin_PB02;
|
||||
extern const mcu_pin_obj_t pin_PF11; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF12; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF13; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF14; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PF15; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG00; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG01; // 144 only
|
||||
//pg 55
|
||||
extern const mcu_pin_obj_t pin_PE07;
|
||||
extern const mcu_pin_obj_t pin_PE08;
|
||||
extern const mcu_pin_obj_t pin_PE09;
|
||||
extern const mcu_pin_obj_t pin_PE10;
|
||||
extern const mcu_pin_obj_t pin_PE11;
|
||||
extern const mcu_pin_obj_t pin_PE12;
|
||||
extern const mcu_pin_obj_t pin_PE13;
|
||||
extern const mcu_pin_obj_t pin_PE14;
|
||||
//pg 56
|
||||
extern const mcu_pin_obj_t pin_PE15;
|
||||
extern const mcu_pin_obj_t pin_PB10;
|
||||
extern const mcu_pin_obj_t pin_PB11; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PB12;
|
||||
extern const mcu_pin_obj_t pin_PB13;
|
||||
//pg 57
|
||||
extern const mcu_pin_obj_t pin_PB14;
|
||||
extern const mcu_pin_obj_t pin_PB15;
|
||||
extern const mcu_pin_obj_t pin_PD08;
|
||||
extern const mcu_pin_obj_t pin_PD09;
|
||||
extern const mcu_pin_obj_t pin_PD10;
|
||||
extern const mcu_pin_obj_t pin_PD11;
|
||||
extern const mcu_pin_obj_t pin_PD12;
|
||||
//pg 58
|
||||
extern const mcu_pin_obj_t pin_PD13;
|
||||
extern const mcu_pin_obj_t pin_PD14;
|
||||
extern const mcu_pin_obj_t pin_PD15;
|
||||
extern const mcu_pin_obj_t pin_PG02; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG03; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG04; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG05; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG06; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG07; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG08; // 144 only
|
||||
//pg 59
|
||||
extern const mcu_pin_obj_t pin_PC06;
|
||||
extern const mcu_pin_obj_t pin_PC07;
|
||||
extern const mcu_pin_obj_t pin_PC08;
|
||||
extern const mcu_pin_obj_t pin_PC09;
|
||||
extern const mcu_pin_obj_t pin_PA08;
|
||||
extern const mcu_pin_obj_t pin_PA09;
|
||||
extern const mcu_pin_obj_t pin_PA10;
|
||||
//pg 60
|
||||
extern const mcu_pin_obj_t pin_PA11;
|
||||
extern const mcu_pin_obj_t pin_PA12;
|
||||
extern const mcu_pin_obj_t pin_PA13;
|
||||
extern const mcu_pin_obj_t pin_PA14;
|
||||
extern const mcu_pin_obj_t pin_PA15;
|
||||
extern const mcu_pin_obj_t pin_PC10;
|
||||
extern const mcu_pin_obj_t pin_PC11;
|
||||
//pg 61
|
||||
extern const mcu_pin_obj_t pin_PC12;
|
||||
extern const mcu_pin_obj_t pin_PD00;
|
||||
extern const mcu_pin_obj_t pin_PD01;
|
||||
extern const mcu_pin_obj_t pin_PD02;
|
||||
extern const mcu_pin_obj_t pin_PD03;
|
||||
extern const mcu_pin_obj_t pin_PD04;
|
||||
extern const mcu_pin_obj_t pin_PD05;
|
||||
extern const mcu_pin_obj_t pin_PD06;
|
||||
extern const mcu_pin_obj_t pin_PD07;
|
||||
//pg 62
|
||||
extern const mcu_pin_obj_t pin_PG09; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG10; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG11; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG12; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG13; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG14; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PG15; // 144 only
|
||||
extern const mcu_pin_obj_t pin_PB03;
|
||||
extern const mcu_pin_obj_t pin_PB04;
|
||||
//pg 63
|
||||
extern const mcu_pin_obj_t pin_PB05;
|
||||
extern const mcu_pin_obj_t pin_PB06;
|
||||
extern const mcu_pin_obj_t pin_PB07;
|
||||
extern const mcu_pin_obj_t pin_PB08;
|
||||
extern const mcu_pin_obj_t pin_PB09;
|
||||
extern const mcu_pin_obj_t pin_PE00;
|
||||
extern const mcu_pin_obj_t pin_PE01;
|
||||
|
||||
#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F412ZG_PINS_H
|
@ -24,17 +24,17 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "nrfx.h"
|
||||
#include "nrf_nvmc.h"
|
||||
// #include "nrfx.h"
|
||||
// #include "nrf_nvmc.h"
|
||||
|
||||
void nrf_peripherals_power_init(void) {
|
||||
// Set GPIO reference voltage to 3.3V if it isn't already. REGOUT0 will get reset to 0xfffffff
|
||||
// if flash is erased, which sets the default to 1.8V
|
||||
// This matters only when "high voltage mode" is enabled, which is true on the PCA10059,
|
||||
// and might be true on other boards.
|
||||
if (NRF_UICR->REGOUT0 == 0xffffffff) {
|
||||
nrf_nvmc_write_word((uint32_t) &NRF_UICR->REGOUT0, UICR_REGOUT0_VOUT_3V3 << UICR_REGOUT0_VOUT_Pos);
|
||||
// Must reset to make enable change.
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
// if (NRF_UICR->REGOUT0 == 0xffffffff) {
|
||||
// nrf_nvmc_write_word((uint32_t) &NRF_UICR->REGOUT0, UICR_REGOUT0_VOUT_3V3 << UICR_REGOUT0_VOUT_Pos);
|
||||
// // Must reset to make enable change.
|
||||
// NVIC_SystemReset();
|
||||
// }
|
||||
}
|
@ -33,7 +33,7 @@ UART_HandleTypeDef huart2;
|
||||
|
||||
void serial_init(void) {
|
||||
huart2.Instance = USART2;
|
||||
huart2.Init.BaudRate = 115200;
|
||||
huart2.Init.BaudRate = 9600;
|
||||
huart2.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
huart2.Init.StopBits = UART_STOPBITS_1;
|
||||
huart2.Init.Parity = UART_PARITY_NONE;
|
||||
@ -44,7 +44,7 @@ void serial_init(void) {
|
||||
{
|
||||
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);
|
||||
}
|
||||
HAL_UART_Transmit(&huart2, (uint8_t*)"helloworld", 10, 5000);
|
||||
//HAL_UART_Transmit(&huart2, (uint8_t*)"Serial On", 9, 5000);
|
||||
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_2, GPIO_PIN_RESET);
|
||||
}
|
||||
|
||||
@ -60,7 +60,6 @@ char serial_read(void) {
|
||||
|
||||
bool serial_bytes_available(void) {
|
||||
return __HAL_UART_GET_FLAG(&huart2, UART_FLAG_RXNE);
|
||||
|
||||
}
|
||||
|
||||
void serial_write(const char* text) {
|
||||
|
@ -29,57 +29,37 @@
|
||||
#include "supervisor/usb.h"
|
||||
#include "lib/utils/interrupt_char.h"
|
||||
#include "lib/mp-readline/readline.h"
|
||||
#include "stm32f4xx.h"
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
#define USB_OTGFS_VBUS_Pin GPIO_PIN_9
|
||||
#define USB_OTGFS_VBUS_GPIO_Port GPIOA
|
||||
#define USB_OTGFS_ID_Pin GPIO_PIN_10
|
||||
#define USB_OTGFS_ID_GPIO_Port GPIOA
|
||||
#define USB_OTGFS_DM_Pin GPIO_PIN_11
|
||||
#define USB_OTGFS_DM_GPIO_Port GPIOA
|
||||
#define USB_OTGFS_DP_Pin GPIO_PIN_12
|
||||
#define USB_OTGFS_DP_GPIO_Port GPIOA
|
||||
|
||||
|
||||
void init_usb_hardware(void) {
|
||||
// Init the LED on PD14
|
||||
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
|
||||
GPIOD->MODER |= GPIO_MODER_MODE14_0;
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
/**USB_OTG_FS GPIO Configuration
|
||||
PA10 ------> USB_OTG_FS_ID
|
||||
PA11 ------> USB_OTG_FS_DM
|
||||
PA12 ------> USB_OTG_FS_DP
|
||||
*/
|
||||
GPIO_InitStruct.Pin = USB_OTGFS_ID_Pin|USB_OTGFS_DM_Pin|USB_OTGFS_DP_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
// USB Clock init
|
||||
// PLL input- 8 MHz (External oscillator clock; HSI clock tolerance isn't
|
||||
// tight enough- 1%, need 0.25%)
|
||||
// VCO input- 1 to 2 MHz (2 MHz, M = 4)
|
||||
// VCO output- 100 to 432 MHz (144 MHz, N = 72)
|
||||
// Main PLL out- <= 180 MHz (18 MHz, P = 3- divides by 8)
|
||||
// USB PLL out- 48 MHz (Q = 3)
|
||||
RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSE | (3 << RCC_PLLCFGR_PLLQ_Pos) | \
|
||||
(3 << RCC_PLLCFGR_PLLP_Pos) | (72 << RCC_PLLCFGR_PLLN_Pos) | \
|
||||
(4 << RCC_PLLCFGR_PLLM_Pos);
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_USB_OTG_FS_CLK_ENABLE();
|
||||
|
||||
// Wait for external clock to become ready
|
||||
RCC->CR |= RCC_CR_HSEON;
|
||||
while(!(RCC->CR & RCC_CR_HSERDY_Msk));
|
||||
|
||||
// Wait for PLL to become ready
|
||||
RCC->CR |= RCC_CR_PLLON;
|
||||
while(!(RCC->CR & RCC_CR_PLLRDY_Msk));
|
||||
|
||||
// Switch clocks!
|
||||
RCC->CFGR |= RCC_CFGR_SW_1;
|
||||
|
||||
// Notify runtime of frequency change.
|
||||
SystemCoreClockUpdate();
|
||||
|
||||
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||
// 1ms tick timer
|
||||
SysTick_Config(SystemCoreClock / 1000);
|
||||
#endif
|
||||
|
||||
RCC->AHB2ENR |= RCC_AHB2ENR_OTGFSEN;
|
||||
|
||||
// USB Pin Init
|
||||
// PA9- VUSB, PA10- ID, PA11- DM, PA12- DP
|
||||
// PC0- Power on
|
||||
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
|
||||
GPIOA->MODER |= GPIO_MODER_MODE9_1 | GPIO_MODER_MODE10_1 | \
|
||||
GPIO_MODER_MODE11_1 | GPIO_MODER_MODE12_1;
|
||||
GPIOA->AFR[1] |= (10 << GPIO_AFRH_AFSEL9_Pos) | \
|
||||
(10 << GPIO_AFRH_AFSEL10_Pos) | (10 << GPIO_AFRH_AFSEL11_Pos) | \
|
||||
(10 << GPIO_AFRH_AFSEL12_Pos);
|
||||
|
||||
// Pullup required on ID, despite the manual claiming there's an
|
||||
// internal pullup already (page 1245, Rev 17)
|
||||
GPIOA->PUPDR |= GPIO_PUPDR_PUPD10_0;
|
||||
/* Peripheral interrupt init */
|
||||
HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(OTG_FS_IRQn);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user