From c588cc6db01586a51d4698806a776bcd79468845 Mon Sep 17 00:00:00 2001 From: Hierophect Date: Wed, 17 Jul 2019 14:07:33 -0400 Subject: [PATCH] first pass of DigitalIO --- ports/stm32f4/Makefile | 23 +- ports/stm32f4/boards/make-pins.py | 208 ------------------ ports/stm32f4/boards/stm32f412g_disco/pins.c | 90 ++++++++ .../boards/stm32f412g_disco/stm32f4xx_it.c | 2 +- .../common-hal/digitalio/DigitalInOut.c | 149 ++++++------- .../stm32f4/common-hal/microcontroller/Pin.c | 142 ++---------- .../stm32f4/common-hal/microcontroller/Pin.h | 33 +-- .../common-hal/microcontroller/__init__.c | 167 +++++++++----- ports/stm32f4/mpconfigport.mk | 6 +- .../peripherals/stm32/stm32f411re/pins.c | 78 ------- .../peripherals/stm32/stm32f411re/pins.h | 79 ------- .../peripherals/{stm32 => stm32f4}/cache.c | 0 .../peripherals/{stm32 => stm32f4}/cache.h | 0 .../peripherals/{stm32 => stm32f4}/clocks.c | 0 .../peripherals/{stm32 => stm32f4}/clocks.h | 0 .../peripherals/{stm32 => stm32f4}/nvm.c | 0 .../peripherals/{stm32 => stm32f4}/nvm.h | 0 .../peripherals/{stm32 => stm32f4}/pins.h | 38 ++-- .../peripherals/{stm32 => stm32f4}/power.h | 0 .../peripherals/stm32f4/stm32f412zg/pins.c | 159 +++++++++++++ .../peripherals/stm32f4/stm32f412zg/pins.h | 156 +++++++++++++ .../stm32f412zg}/power.c | 14 +- .../peripherals/{stm32 => stm32f4}/timers.c | 0 .../peripherals/{stm32 => stm32f4}/timers.h | 0 ports/stm32f4/supervisor/serial.c | 5 +- ports/stm32f4/supervisor/usb.c | 76 +++---- 26 files changed, 703 insertions(+), 722 deletions(-) delete mode 100644 ports/stm32f4/boards/make-pins.py create mode 100644 ports/stm32f4/boards/stm32f412g_disco/pins.c delete mode 100644 ports/stm32f4/peripherals/stm32/stm32f411re/pins.c delete mode 100644 ports/stm32f4/peripherals/stm32/stm32f411re/pins.h rename ports/stm32f4/peripherals/{stm32 => stm32f4}/cache.c (100%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/cache.h (100%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/clocks.c (100%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/clocks.h (100%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/nvm.c (100%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/nvm.h (100%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/pins.h (68%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/power.h (100%) create mode 100644 ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c create mode 100644 ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h rename ports/stm32f4/peripherals/{stm32/stm32f411re => stm32f4/stm32f412zg}/power.c (84%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/timers.c (100%) rename ports/stm32f4/peripherals/{stm32 => stm32f4}/timers.h (100%) diff --git a/ports/stm32f4/Makefile b/ports/stm32f4/Makefile index f5701dd784..c41c277e64 100755 --- a/ports/stm32f4/Makefile +++ b/ports/stm32f4/Makefile @@ -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 diff --git a/ports/stm32f4/boards/make-pins.py b/ports/stm32f4/boards/make-pins.py deleted file mode 100644 index d1cfd5b706..0000000000 --- a/ports/stm32f4/boards/make-pins.py +++ /dev/null @@ -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() diff --git a/ports/stm32f4/boards/stm32f412g_disco/pins.c b/ports/stm32f4/boards/stm32f412g_disco/pins.c new file mode 100644 index 0000000000..e3a4b5ed60 --- /dev/null +++ b/ports/stm32f4/boards/stm32f412g_disco/pins.c @@ -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); diff --git a/ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c b/ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c index d44ec593d2..032a554722 100644 --- a/ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c +++ b/ports/stm32f4/boards/stm32f412g_disco/stm32f4xx_it.c @@ -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 */ diff --git a/ports/stm32f4/common-hal/digitalio/DigitalInOut.c b/ports/stm32f4/common-hal/digitalio/DigitalInOut.c index 452144d7e1..d50caee2b7 100644 --- a/ports/stm32f4/common-hal/digitalio/DigitalInOut.c +++ b/ports/stm32f4/common-hal/digitalio/DigitalInOut.c @@ -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; } diff --git a/ports/stm32f4/common-hal/microcontroller/Pin.c b/ports/stm32f4/common-hal/microcontroller/Pin.c index ade0c952cd..38e73cb66b 100644 --- a/ports/stm32f4/common-hal/microcontroller/Pin.c +++ b/ports/stm32f4/common-hal/microcontroller/Pin.c @@ -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); } diff --git a/ports/stm32f4/common-hal/microcontroller/Pin.h b/ports/stm32f4/common-hal/microcontroller/Pin.h index 1e88cf20f8..e5b1b9ceb0 100644 --- a/ports/stm32f4/common-hal/microcontroller/Pin.h +++ b/ports/stm32f4/common-hal/microcontroller/Pin.h @@ -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 diff --git a/ports/stm32f4/common-hal/microcontroller/__init__.c b/ports/stm32f4/common-hal/microcontroller/__init__.c index ab7b5d5d68..871caa018b 100644 --- a/ports/stm32f4/common-hal/microcontroller/__init__.c +++ b/ports/stm32f4/common-hal/microcontroller/__init__.c @@ -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); diff --git a/ports/stm32f4/mpconfigport.mk b/ports/stm32f4/mpconfigport.mk index aec0996be5..de8cec321e 100644 --- a/ports/stm32f4/mpconfigport.mk +++ b/ports/stm32f4/mpconfigport.mk @@ -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 diff --git a/ports/stm32f4/peripherals/stm32/stm32f411re/pins.c b/ports/stm32f4/peripherals/stm32/stm32f411re/pins.c deleted file mode 100644 index 070758a79f..0000000000 --- a/ports/stm32f4/peripherals/stm32/stm32f411re/pins.c +++ /dev/null @@ -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); diff --git a/ports/stm32f4/peripherals/stm32/stm32f411re/pins.h b/ports/stm32f4/peripherals/stm32/stm32f411re/pins.h deleted file mode 100644 index 3ad72ff632..0000000000 --- a/ports/stm32f4/peripherals/stm32/stm32f411re/pins.h +++ /dev/null @@ -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 diff --git a/ports/stm32f4/peripherals/stm32/cache.c b/ports/stm32f4/peripherals/stm32f4/cache.c similarity index 100% rename from ports/stm32f4/peripherals/stm32/cache.c rename to ports/stm32f4/peripherals/stm32f4/cache.c diff --git a/ports/stm32f4/peripherals/stm32/cache.h b/ports/stm32f4/peripherals/stm32f4/cache.h similarity index 100% rename from ports/stm32f4/peripherals/stm32/cache.h rename to ports/stm32f4/peripherals/stm32f4/cache.h diff --git a/ports/stm32f4/peripherals/stm32/clocks.c b/ports/stm32f4/peripherals/stm32f4/clocks.c similarity index 100% rename from ports/stm32f4/peripherals/stm32/clocks.c rename to ports/stm32f4/peripherals/stm32f4/clocks.c diff --git a/ports/stm32f4/peripherals/stm32/clocks.h b/ports/stm32f4/peripherals/stm32f4/clocks.h similarity index 100% rename from ports/stm32f4/peripherals/stm32/clocks.h rename to ports/stm32f4/peripherals/stm32f4/clocks.h diff --git a/ports/stm32f4/peripherals/stm32/nvm.c b/ports/stm32f4/peripherals/stm32f4/nvm.c similarity index 100% rename from ports/stm32f4/peripherals/stm32/nvm.c rename to ports/stm32f4/peripherals/stm32f4/nvm.c diff --git a/ports/stm32f4/peripherals/stm32/nvm.h b/ports/stm32f4/peripherals/stm32f4/nvm.h similarity index 100% rename from ports/stm32f4/peripherals/stm32/nvm.h rename to ports/stm32f4/peripherals/stm32f4/nvm.h diff --git a/ports/stm32f4/peripherals/stm32/pins.h b/ports/stm32f4/peripherals/stm32f4/pins.h similarity index 68% rename from ports/stm32f4/peripherals/stm32/pins.h rename to ports/stm32f4/peripherals/stm32f4/pins.h index db63b54ecd..0a8a0c3dc4 100644 --- a/ports/stm32f4/peripherals/stm32/pins.h +++ b/ports/stm32f4/peripherals/stm32f4/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 #include -//#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__ diff --git a/ports/stm32f4/peripherals/stm32/power.h b/ports/stm32f4/peripherals/stm32f4/power.h similarity index 100% rename from ports/stm32f4/peripherals/stm32/power.h rename to ports/stm32f4/peripherals/stm32f4/power.h diff --git a/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c new file mode 100644 index 0000000000..0a30845cf5 --- /dev/null +++ b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.c @@ -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); \ No newline at end of file diff --git a/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h new file mode 100644 index 0000000000..d526f0863a --- /dev/null +++ b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/pins.h @@ -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 diff --git a/ports/stm32f4/peripherals/stm32/stm32f411re/power.c b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/power.c similarity index 84% rename from ports/stm32f4/peripherals/stm32/stm32f411re/power.c rename to ports/stm32f4/peripherals/stm32f4/stm32f412zg/power.c index 9f7a9fa17a..634a7f0236 100644 --- a/ports/stm32f4/peripherals/stm32/stm32f411re/power.c +++ b/ports/stm32f4/peripherals/stm32f4/stm32f412zg/power.c @@ -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(); + // } } diff --git a/ports/stm32f4/peripherals/stm32/timers.c b/ports/stm32f4/peripherals/stm32f4/timers.c similarity index 100% rename from ports/stm32f4/peripherals/stm32/timers.c rename to ports/stm32f4/peripherals/stm32f4/timers.c diff --git a/ports/stm32f4/peripherals/stm32/timers.h b/ports/stm32f4/peripherals/stm32f4/timers.h similarity index 100% rename from ports/stm32f4/peripherals/stm32/timers.h rename to ports/stm32f4/peripherals/stm32f4/timers.h diff --git a/ports/stm32f4/supervisor/serial.c b/ports/stm32f4/supervisor/serial.c index 94dbf9c131..54977a4df2 100644 --- a/ports/stm32f4/supervisor/serial.c +++ b/ports/stm32f4/supervisor/serial.c @@ -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) { diff --git a/ports/stm32f4/supervisor/usb.c b/ports/stm32f4/supervisor/usb.c index 4128f6cebc..09429a15b2 100644 --- a/ports/stm32f4/supervisor/usb.c +++ b/ports/stm32f4/supervisor/usb.c @@ -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); }