summaryrefslogtreecommitdiff
path: root/stmhal
diff options
context:
space:
mode:
authorTony DiCola <tony@tonydicola.com>2016-10-20 23:01:13 +0000
committerTony DiCola <tony@tonydicola.com>2016-10-20 23:01:13 +0000
commit00a44fa36cd1e35a438c4b89b5cef0bc82787c7a (patch)
tree4800a6984902e043e3fc437adcdfcd665f83e220 /stmhal
parent1f13f870b8f6554d9cd5570de221a6886e065b64 (diff)
parent3967ca7390ff8257728ef6237b93977b63bde41d (diff)
Merge remote-tracking branch 'micropython/master'
Conflicts: README.md - Kept Adafruit README.md intact. py/emitglue.c - Added xtensa architecture as an OR of the define. zephyr/README.md - Fixed spelling mistake.
Diffstat (limited to 'stmhal')
-rw-r--r--stmhal/Makefile11
-rw-r--r--stmhal/accel.c14
-rw-r--r--stmhal/boards/ESPRUINO_PICO/mpconfigboard.h5
-rw-r--r--stmhal/boards/HYDRABUS/mpconfigboard.h5
-rw-r--r--stmhal/boards/LIMIFROG/mpconfigboard.h5
-rw-r--r--stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h5
-rw-r--r--stmhal/boards/NUCLEO_F401RE/mpconfigboard.h5
-rw-r--r--stmhal/boards/NUCLEO_F411RE/mpconfigboard.h5
-rw-r--r--stmhal/boards/OLIMEX_E407/mpconfigboard.h5
-rw-r--r--stmhal/boards/PYBLITEV10/mpconfigboard.h5
-rw-r--r--stmhal/boards/PYBV10/mpconfigboard.h5
-rw-r--r--stmhal/boards/PYBV11/mpconfigboard.h5
-rw-r--r--stmhal/boards/PYBV3/mpconfigboard.h5
-rw-r--r--stmhal/boards/PYBV4/mpconfigboard.h5
-rw-r--r--stmhal/boards/STM32F411DISC/mpconfigboard.h5
-rw-r--r--stmhal/boards/STM32F429DISC/mpconfigboard.h5
-rw-r--r--stmhal/boards/STM32F4DISC/mpconfigboard.h5
-rw-r--r--stmhal/boards/STM32F7DISC/mpconfigboard.h5
-rw-r--r--stmhal/boards/STM32L476DISC/mpconfigboard.h5
-rw-r--r--stmhal/i2c.c4
-rw-r--r--stmhal/lcd.c44
-rw-r--r--stmhal/led.c11
-rw-r--r--stmhal/modmachine.c8
-rw-r--r--stmhal/modnwwiznet5k.c22
-rw-r--r--stmhal/modpyb.c5
-rw-r--r--stmhal/modutime.c80
-rw-r--r--stmhal/mpconfigport.h5
-rw-r--r--stmhal/mphalport.c17
-rw-r--r--stmhal/mphalport.h56
-rw-r--r--stmhal/pin.c18
-rw-r--r--stmhal/pybstdio.c2
-rw-r--r--stmhal/spi.c2
32 files changed, 144 insertions, 240 deletions
diff --git a/stmhal/Makefile b/stmhal/Makefile
index 7be0f28fe..e2e1dc6a1 100644
--- a/stmhal/Makefile
+++ b/stmhal/Makefile
@@ -274,16 +274,9 @@ $(PY_BUILD)/mpprint.o: COPT += -Os
all: $(BUILD)/firmware.dfu $(BUILD)/firmware.hex
ifneq ($(FROZEN_DIR),)
+# To use frozen source modules, put your .py files in a subdirectory (eg scripts/)
+# and then invoke make with FROZEN_DIR=scripts (be sure to build from scratch).
CFLAGS += -DMICROPY_MODULE_FROZEN_STR
-OBJ += $(BUILD)/frozen-files.o
-MAKE_FROZEN = ../tools/make-frozen.py
-
-$(BUILD)/frozen-files.o: $(BUILD)/frozen-files.c
- $(call compile_c)
-
-$(BUILD)/frozen-files.c: $(shell find $(FROZEN_DIR) -type f)
- @$(ECHO) "Creating $@"
- $(Q)$(PYTHON) $(MAKE_FROZEN) $(FROZEN_DIR) > $@
endif
ifneq ($(FROZEN_MPY_DIR),)
diff --git a/stmhal/accel.c b/stmhal/accel.c
index e75f1c994..827aa46e7 100644
--- a/stmhal/accel.c
+++ b/stmhal/accel.c
@@ -57,15 +57,9 @@
#define MMA_AXIS_SIGNED_VALUE(i) (((i) & 0x3f) | ((i) & 0x20 ? (~0x1f) : 0))
void accel_init(void) {
- GPIO_InitTypeDef GPIO_InitStructure;
-
// PB5 is connected to AVDD; pull high to enable MMA accel device
- GPIO_clear_pin(MICROPY_HW_MMA_AVDD_PIN.gpio, MICROPY_HW_MMA_AVDD_PIN.pin_mask); // turn off AVDD
- GPIO_InitStructure.Pin = MICROPY_HW_MMA_AVDD_PIN.pin_mask;
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
- GPIO_InitStructure.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(MICROPY_HW_MMA_AVDD_PIN.gpio, &GPIO_InitStructure);
+ mp_hal_pin_low(&MICROPY_HW_MMA_AVDD_PIN); // turn off AVDD
+ mp_hal_pin_output(&MICROPY_HW_MMA_AVDD_PIN);
}
STATIC void accel_start(void) {
@@ -81,9 +75,9 @@ STATIC void accel_start(void) {
i2c_init(&I2CHandle1);
// turn off AVDD, wait 30ms, turn on AVDD, wait 30ms again
- GPIO_clear_pin(MICROPY_HW_MMA_AVDD_PIN.gpio, MICROPY_HW_MMA_AVDD_PIN.pin_mask); // turn off
+ mp_hal_pin_low(&MICROPY_HW_MMA_AVDD_PIN); // turn off
HAL_Delay(30);
- GPIO_set_pin(MICROPY_HW_MMA_AVDD_PIN.gpio, MICROPY_HW_MMA_AVDD_PIN.pin_mask); // turn on
+ mp_hal_pin_high(&MICROPY_HW_MMA_AVDD_PIN); // turn on
HAL_Delay(30);
HAL_StatusTypeDef status;
diff --git a/stmhal/boards/ESPRUINO_PICO/mpconfigboard.h b/stmhal/boards/ESPRUINO_PICO/mpconfigboard.h
index 885cedc89..d18abb908 100644
--- a/stmhal/boards/ESPRUINO_PICO/mpconfigboard.h
+++ b/stmhal/boards/ESPRUINO_PICO/mpconfigboard.h
@@ -66,6 +66,5 @@
#define MICROPY_HW_LED2 (pin_B12) // green
#define MICROPY_HW_LED3 (pin_B12) // green
#define MICROPY_HW_LED4 (pin_B12) // green
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
diff --git a/stmhal/boards/HYDRABUS/mpconfigboard.h b/stmhal/boards/HYDRABUS/mpconfigboard.h
index 4fe0874d7..06d169236 100644
--- a/stmhal/boards/HYDRABUS/mpconfigboard.h
+++ b/stmhal/boards/HYDRABUS/mpconfigboard.h
@@ -69,9 +69,8 @@
#define MICROPY_HW_LED2 (pin_A4) // same as LED1
#define MICROPY_HW_LED3 (pin_A4) // same as LED1
#define MICROPY_HW_LED4 (pin_A4) // same as LED1
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// SD card detect switch (not used, always on)
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_A8)
diff --git a/stmhal/boards/LIMIFROG/mpconfigboard.h b/stmhal/boards/LIMIFROG/mpconfigboard.h
index 782c9c90f..47b892233 100644
--- a/stmhal/boards/LIMIFROG/mpconfigboard.h
+++ b/stmhal/boards/LIMIFROG/mpconfigboard.h
@@ -63,9 +63,8 @@ void LIMIFROG_board_early_init(void);
// LEDs
#define MICROPY_HW_LED1 (pin_C3) // red
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRR = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRR = pin->pin_mask<<16)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// USB config
// #define MICROPY_HW_USB_OTG_ID_PIN (pin_C12) // This is not the official ID Pin which should be PA10
diff --git a/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h b/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
index 8ec8df645..3155b6309 100644
--- a/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
+++ b/stmhal/boards/NETDUINO_PLUS_2/mpconfigboard.h
@@ -64,9 +64,8 @@ void NETDUINO_PLUS_2_board_early_init(void);
#define MICROPY_HW_LED2 (pin_C13) // White LED (aka Power)
#define MICROPY_HW_LED3 (pin_A10) // Same as Led(1)
#define MICROPY_HW_LED4 (pin_C13) // Same as Led(2)
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// USB VBUS detect pin
#define MICROPY_HW_USB_VBUS_DETECT_PIN (pin_A9)
diff --git a/stmhal/boards/NUCLEO_F401RE/mpconfigboard.h b/stmhal/boards/NUCLEO_F401RE/mpconfigboard.h
index 780eaf8fc..518f65824 100644
--- a/stmhal/boards/NUCLEO_F401RE/mpconfigboard.h
+++ b/stmhal/boards/NUCLEO_F401RE/mpconfigboard.h
@@ -54,6 +54,5 @@
// LEDs
#define MICROPY_HW_LED1 (pin_A5) // Green LD2 LED on Nucleo
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
diff --git a/stmhal/boards/NUCLEO_F411RE/mpconfigboard.h b/stmhal/boards/NUCLEO_F411RE/mpconfigboard.h
index e7ffd8510..4dac80493 100644
--- a/stmhal/boards/NUCLEO_F411RE/mpconfigboard.h
+++ b/stmhal/boards/NUCLEO_F411RE/mpconfigboard.h
@@ -65,6 +65,5 @@
// LEDs
#define MICROPY_HW_LED1 (pin_A5) // Green LD2 LED on Nucleo
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
diff --git a/stmhal/boards/OLIMEX_E407/mpconfigboard.h b/stmhal/boards/OLIMEX_E407/mpconfigboard.h
index c9241fe63..63ddcfb5d 100644
--- a/stmhal/boards/OLIMEX_E407/mpconfigboard.h
+++ b/stmhal/boards/OLIMEX_E407/mpconfigboard.h
@@ -71,9 +71,8 @@
// LEDs
#define MICROPY_HW_LED1 (pin_C13)
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRH = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRL = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))
// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_C11)
diff --git a/stmhal/boards/PYBLITEV10/mpconfigboard.h b/stmhal/boards/PYBLITEV10/mpconfigboard.h
index 83dcb938b..3147d2d7a 100644
--- a/stmhal/boards/PYBLITEV10/mpconfigboard.h
+++ b/stmhal/boards/PYBLITEV10/mpconfigboard.h
@@ -73,9 +73,8 @@
#define MICROPY_HW_LED4 (pin_B4) // blue
#define MICROPY_HW_LED3_PWM { TIM2, 2, TIM_CHANNEL_1, GPIO_AF1_TIM2 }
#define MICROPY_HW_LED4_PWM { TIM3, 3, TIM_CHANNEL_1, GPIO_AF2_TIM3 }
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_B5)
diff --git a/stmhal/boards/PYBV10/mpconfigboard.h b/stmhal/boards/PYBV10/mpconfigboard.h
index c654ec9a7..2540cc4eb 100644
--- a/stmhal/boards/PYBV10/mpconfigboard.h
+++ b/stmhal/boards/PYBV10/mpconfigboard.h
@@ -84,9 +84,8 @@
#define MICROPY_HW_LED4 (pin_B4) // blue
#define MICROPY_HW_LED3_PWM { TIM2, 2, TIM_CHANNEL_1, GPIO_AF1_TIM2 }
#define MICROPY_HW_LED4_PWM { TIM3, 3, TIM_CHANNEL_1, GPIO_AF2_TIM3 }
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_A8)
diff --git a/stmhal/boards/PYBV11/mpconfigboard.h b/stmhal/boards/PYBV11/mpconfigboard.h
index 9b5b7de27..881e1ccf0 100644
--- a/stmhal/boards/PYBV11/mpconfigboard.h
+++ b/stmhal/boards/PYBV11/mpconfigboard.h
@@ -84,9 +84,8 @@
#define MICROPY_HW_LED4 (pin_B4) // blue
#define MICROPY_HW_LED3_PWM { TIM2, 2, TIM_CHANNEL_1, GPIO_AF1_TIM2 }
#define MICROPY_HW_LED4_PWM { TIM3, 3, TIM_CHANNEL_1, GPIO_AF2_TIM3 }
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_A8)
diff --git a/stmhal/boards/PYBV3/mpconfigboard.h b/stmhal/boards/PYBV3/mpconfigboard.h
index 44fb22161..48d554925 100644
--- a/stmhal/boards/PYBV3/mpconfigboard.h
+++ b/stmhal/boards/PYBV3/mpconfigboard.h
@@ -73,9 +73,8 @@
#define MICROPY_HW_LED4 (pin_C5) // G2 - green
#define MICROPY_HW_LED1_PWM { TIM1, 1, TIM_CHANNEL_1, GPIO_AF1_TIM1 }
#define MICROPY_HW_LED2_PWM { TIM1, 1, TIM_CHANNEL_3, GPIO_AF1_TIM1 }
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRH = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRL = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_low(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_high(pin))
// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_C13)
diff --git a/stmhal/boards/PYBV4/mpconfigboard.h b/stmhal/boards/PYBV4/mpconfigboard.h
index cc931fb6b..3e8300d15 100644
--- a/stmhal/boards/PYBV4/mpconfigboard.h
+++ b/stmhal/boards/PYBV4/mpconfigboard.h
@@ -81,9 +81,8 @@
#define MICROPY_HW_LED4 (pin_B4) // blue
#define MICROPY_HW_LED3_PWM { TIM2, 2, TIM_CHANNEL_1, GPIO_AF1_TIM2 }
#define MICROPY_HW_LED4_PWM { TIM3, 3, TIM_CHANNEL_1, GPIO_AF2_TIM3 }
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_A8)
diff --git a/stmhal/boards/STM32F411DISC/mpconfigboard.h b/stmhal/boards/STM32F411DISC/mpconfigboard.h
index 3bab1304c..be3589cd9 100644
--- a/stmhal/boards/STM32F411DISC/mpconfigboard.h
+++ b/stmhal/boards/STM32F411DISC/mpconfigboard.h
@@ -63,9 +63,8 @@
#define MICROPY_HW_LED2 (pin_D12) // green
#define MICROPY_HW_LED3 (pin_D13) // orange
#define MICROPY_HW_LED4 (pin_D15) // blue
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// USB config
#define MICROPY_HW_USB_VBUS_DETECT_PIN (pin_A9)
diff --git a/stmhal/boards/STM32F429DISC/mpconfigboard.h b/stmhal/boards/STM32F429DISC/mpconfigboard.h
index f2cf6c142..63f22e02c 100644
--- a/stmhal/boards/STM32F429DISC/mpconfigboard.h
+++ b/stmhal/boards/STM32F429DISC/mpconfigboard.h
@@ -67,9 +67,8 @@
// LEDs
#define MICROPY_HW_LED1 (pin_G14) // red
#define MICROPY_HW_LED2 (pin_G13) // green
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// USB config
#define MICROPY_HW_USB_VBUS_DETECT_PIN (pin_B13)
diff --git a/stmhal/boards/STM32F4DISC/mpconfigboard.h b/stmhal/boards/STM32F4DISC/mpconfigboard.h
index 01202e0c9..841bf7d15 100644
--- a/stmhal/boards/STM32F4DISC/mpconfigboard.h
+++ b/stmhal/boards/STM32F4DISC/mpconfigboard.h
@@ -82,9 +82,8 @@
#define MICROPY_HW_LED2 (pin_D12) // green
#define MICROPY_HW_LED3 (pin_D13) // orange
#define MICROPY_HW_LED4 (pin_D15) // blue
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRRL = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRRH = pin->pin_mask)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// USB config
#define MICROPY_HW_USB_VBUS_DETECT_PIN (pin_A9)
diff --git a/stmhal/boards/STM32F7DISC/mpconfigboard.h b/stmhal/boards/STM32F7DISC/mpconfigboard.h
index a1dbc0f46..acdc4d005 100644
--- a/stmhal/boards/STM32F7DISC/mpconfigboard.h
+++ b/stmhal/boards/STM32F7DISC/mpconfigboard.h
@@ -79,9 +79,8 @@ void STM32F7DISC_board_early_init(void);
// LEDs
#define MICROPY_HW_LED1 (pin_I1) // green
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRR = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRR = (pin->pin_mask << 16))
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// SD card detect switch
#define MICROPY_HW_SDCARD_DETECT_PIN (pin_C13)
diff --git a/stmhal/boards/STM32L476DISC/mpconfigboard.h b/stmhal/boards/STM32L476DISC/mpconfigboard.h
index 07e3ec7fd..55e7c9b56 100644
--- a/stmhal/boards/STM32L476DISC/mpconfigboard.h
+++ b/stmhal/boards/STM32L476DISC/mpconfigboard.h
@@ -61,9 +61,8 @@
// LEDs
#define MICROPY_HW_LED1 (pin_B2) // red
#define MICROPY_HW_LED2 (pin_E8) // green
-#define MICROPY_HW_LED_OTYPE (GPIO_MODE_OUTPUT_PP)
-#define MICROPY_HW_LED_ON(pin) (pin->gpio->BSRR = pin->pin_mask)
-#define MICROPY_HW_LED_OFF(pin) (pin->gpio->BSRR = pin->pin_mask<<16)
+#define MICROPY_HW_LED_ON(pin) (mp_hal_pin_high(pin))
+#define MICROPY_HW_LED_OFF(pin) (mp_hal_pin_low(pin))
// USB config
// #define MICROPY_HW_USB_OTG_ID_PIN (pin_C12) // This is not the official ID Pin which should be PA10
diff --git a/stmhal/i2c.c b/stmhal/i2c.c
index 1909f8160..07269bce5 100644
--- a/stmhal/i2c.c
+++ b/stmhal/i2c.c
@@ -238,8 +238,8 @@ void i2c_init(I2C_HandleTypeDef *i2c) {
}
// init the GPIO lines
- mp_hal_gpio_set_af(scl_pin, &GPIO_InitStructure, AF_FN_I2C, i2c_unit);
- mp_hal_gpio_set_af(sda_pin, &GPIO_InitStructure, AF_FN_I2C, i2c_unit);
+ mp_hal_pin_set_af(scl_pin, &GPIO_InitStructure, AF_FN_I2C, i2c_unit);
+ mp_hal_pin_set_af(sda_pin, &GPIO_InitStructure, AF_FN_I2C, i2c_unit);
// init the I2C device
if (HAL_I2C_Init(i2c) != HAL_OK) {
diff --git a/stmhal/lcd.c b/stmhal/lcd.c
index 92f19b818..c406d6447 100644
--- a/stmhal/lcd.c
+++ b/stmhal/lcd.c
@@ -113,16 +113,16 @@ STATIC void lcd_delay(void) {
STATIC void lcd_out(pyb_lcd_obj_t *lcd, int instr_data, uint8_t i) {
lcd_delay();
- GPIO_clear_pin(lcd->pin_cs1->gpio, lcd->pin_cs1->pin_mask); // CS=0; enable
+ mp_hal_pin_low(lcd->pin_cs1); // CS=0; enable
if (instr_data == LCD_INSTR) {
- GPIO_clear_pin(lcd->pin_a0->gpio, lcd->pin_a0->pin_mask); // A0=0; select instr reg
+ mp_hal_pin_low(lcd->pin_a0); // A0=0; select instr reg
} else {
- GPIO_set_pin(lcd->pin_a0->gpio, lcd->pin_a0->pin_mask); // A0=1; select data reg
+ mp_hal_pin_high(lcd->pin_a0); // A0=1; select data reg
}
lcd_delay();
HAL_SPI_Transmit(lcd->spi, &i, 1, 1000);
lcd_delay();
- GPIO_set_pin(lcd->pin_cs1->gpio, lcd->pin_cs1->pin_mask); // CS=1; disable
+ mp_hal_pin_high(lcd->pin_cs1); // CS=1; disable
}
// write a string to the LCD at the current cursor location
@@ -262,34 +262,22 @@ STATIC mp_obj_t pyb_lcd_make_new(const mp_obj_type_t *type, mp_uint_t n_args, mp
spi_init(lcd->spi, false);
// set the pins to default values
- GPIO_set_pin(lcd->pin_cs1->gpio, lcd->pin_cs1->pin_mask);
- GPIO_set_pin(lcd->pin_rst->gpio, lcd->pin_rst->pin_mask);
- GPIO_set_pin(lcd->pin_a0->gpio, lcd->pin_a0->pin_mask);
- GPIO_clear_pin(lcd->pin_bl->gpio, lcd->pin_bl->pin_mask);
+ mp_hal_pin_high(lcd->pin_cs1);
+ mp_hal_pin_high(lcd->pin_rst);
+ mp_hal_pin_high(lcd->pin_a0);
+ mp_hal_pin_low(lcd->pin_bl);
// init the pins to be push/pull outputs
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
- GPIO_InitStructure.Pull = GPIO_NOPULL;
-
- GPIO_InitStructure.Pin = lcd->pin_cs1->pin_mask;
- HAL_GPIO_Init(lcd->pin_cs1->gpio, &GPIO_InitStructure);
-
- GPIO_InitStructure.Pin = lcd->pin_rst->pin_mask;
- HAL_GPIO_Init(lcd->pin_rst->gpio, &GPIO_InitStructure);
-
- GPIO_InitStructure.Pin = lcd->pin_a0->pin_mask;
- HAL_GPIO_Init(lcd->pin_a0->gpio, &GPIO_InitStructure);
-
- GPIO_InitStructure.Pin = lcd->pin_bl->pin_mask;
- HAL_GPIO_Init(lcd->pin_bl->gpio, &GPIO_InitStructure);
+ mp_hal_pin_output(lcd->pin_cs1);
+ mp_hal_pin_output(lcd->pin_rst);
+ mp_hal_pin_output(lcd->pin_a0);
+ mp_hal_pin_output(lcd->pin_bl);
// init the LCD
HAL_Delay(1); // wait a bit
- GPIO_clear_pin(lcd->pin_rst->gpio, lcd->pin_rst->pin_mask); // RST=0; reset
+ mp_hal_pin_low(lcd->pin_rst); // RST=0; reset
HAL_Delay(1); // wait for reset; 2us min
- GPIO_set_pin(lcd->pin_rst->gpio, lcd->pin_rst->pin_mask); // RST=1; enable
+ mp_hal_pin_high(lcd->pin_rst); // RST=1; enable
HAL_Delay(1); // wait for reset; 2us min
lcd_out(lcd, LCD_INSTR, 0xa0); // ADC select, normal
lcd_out(lcd, LCD_INSTR, 0xc0); // common output mode select, normal (this flips the display)
@@ -372,9 +360,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(pyb_lcd_contrast_obj, pyb_lcd_contrast);
STATIC mp_obj_t pyb_lcd_light(mp_obj_t self_in, mp_obj_t value) {
pyb_lcd_obj_t *self = self_in;
if (mp_obj_is_true(value)) {
- GPIO_set_pin(self->pin_bl->gpio, self->pin_bl->pin_mask); // set pin high to turn backlight on
+ mp_hal_pin_high(self->pin_bl); // set pin high to turn backlight on
} else {
- GPIO_clear_pin(self->pin_bl->gpio, self->pin_bl->pin_mask); // set pin low to turn backlight off
+ mp_hal_pin_low(self->pin_bl); // set pin low to turn backlight off
}
return mp_const_none;
}
diff --git a/stmhal/led.c b/stmhal/led.c
index fdf5b04d8..310efdcda 100644
--- a/stmhal/led.c
+++ b/stmhal/led.c
@@ -67,21 +67,12 @@ STATIC const pyb_led_obj_t pyb_led_obj[] = {
#define NUM_LEDS MP_ARRAY_SIZE(pyb_led_obj)
void led_init(void) {
- /* GPIO structure */
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Configure I/O speed, mode, output type and pull */
- GPIO_InitStructure.Speed = GPIO_SPEED_LOW;
- GPIO_InitStructure.Mode = MICROPY_HW_LED_OTYPE;
- GPIO_InitStructure.Pull = GPIO_NOPULL;
-
/* Turn off LEDs and initialize */
for (int led = 0; led < NUM_LEDS; led++) {
const pin_obj_t *led_pin = pyb_led_obj[led].led_pin;
mp_hal_gpio_clock_enable(led_pin->gpio);
MICROPY_HW_LED_OFF(led_pin);
- GPIO_InitStructure.Pin = led_pin->pin_mask;
- HAL_GPIO_Init(led_pin->gpio, &GPIO_InitStructure);
+ mp_hal_pin_output(led_pin);
}
}
diff --git a/stmhal/modmachine.c b/stmhal/modmachine.c
index 8bd04f3ec..7a337adb6 100644
--- a/stmhal/modmachine.c
+++ b/stmhal/modmachine.c
@@ -33,6 +33,7 @@
#include "extmod/machine_mem.h"
#include "extmod/machine_pulse.h"
#include "extmod/machine_i2c.h"
+#include "lib/utils/pyexec.h"
#include "lib/fatfs/ff.h"
#include "lib/fatfs/diskio.h"
#include "gccollect.h"
@@ -172,6 +173,12 @@ STATIC mp_obj_t machine_reset(void) {
}
MP_DEFINE_CONST_FUN_OBJ_0(machine_reset_obj, machine_reset);
+STATIC mp_obj_t machine_soft_reset(void) {
+ pyexec_system_exit = PYEXEC_FORCED_EXIT;
+ nlr_raise(mp_obj_new_exception(&mp_type_SystemExit));
+}
+MP_DEFINE_CONST_FUN_OBJ_0(machine_soft_reset_obj, machine_soft_reset);
+
// Activate the bootloader without BOOT* pins.
STATIC NORETURN mp_obj_t machine_bootloader(void) {
pyb_usb_dev_deinit();
@@ -502,6 +509,7 @@ STATIC const mp_map_elem_t machine_module_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_info), (mp_obj_t)&machine_info_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_unique_id), (mp_obj_t)&machine_unique_id_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_reset), (mp_obj_t)&machine_reset_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_soft_reset), (mp_obj_t)&machine_soft_reset_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_bootloader), (mp_obj_t)&machine_bootloader_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_freq), (mp_obj_t)&machine_freq_obj },
#if MICROPY_HW_ENABLE_RNG
diff --git a/stmhal/modnwwiznet5k.c b/stmhal/modnwwiznet5k.c
index c8b5d628f..f349e40af 100644
--- a/stmhal/modnwwiznet5k.c
+++ b/stmhal/modnwwiznet5k.c
@@ -65,11 +65,11 @@ STATIC void wiz_cris_exit(void) {
}
STATIC void wiz_cs_select(void) {
- GPIO_clear_pin(wiznet5k_obj.cs->gpio, wiznet5k_obj.cs->pin_mask);
+ mp_hal_pin_low(wiznet5k_obj.cs);
}
STATIC void wiz_cs_deselect(void) {
- GPIO_set_pin(wiznet5k_obj.cs->gpio, wiznet5k_obj.cs->pin_mask);
+ mp_hal_pin_high(wiznet5k_obj.cs);
}
STATIC void wiz_spi_read(uint8_t *buf, uint32_t len) {
@@ -344,22 +344,12 @@ STATIC mp_obj_t wiznet5k_make_new(const mp_obj_type_t *type, mp_uint_t n_args, m
wiznet5k_obj.spi->Init.CRCPolynomial = 7; // unused
spi_init(wiznet5k_obj.spi, false);
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
- GPIO_InitStructure.Pull = GPIO_NOPULL;
- GPIO_InitStructure.Pin = wiznet5k_obj.cs->pin_mask;
- HAL_GPIO_Init(wiznet5k_obj.cs->gpio, &GPIO_InitStructure);
+ mp_hal_pin_output(wiznet5k_obj.cs);
+ mp_hal_pin_output(wiznet5k_obj.rst);
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
- GPIO_InitStructure.Pull = GPIO_NOPULL;
- GPIO_InitStructure.Pin = wiznet5k_obj.rst->pin_mask;
- HAL_GPIO_Init(wiznet5k_obj.rst->gpio, &GPIO_InitStructure);
-
- GPIO_clear_pin(wiznet5k_obj.rst->gpio, wiznet5k_obj.rst->pin_mask);
+ mp_hal_pin_low(wiznet5k_obj.rst);
HAL_Delay(1); // datasheet says 2us
- GPIO_set_pin(wiznet5k_obj.rst->gpio, wiznet5k_obj.rst->pin_mask);
+ mp_hal_pin_high(wiznet5k_obj.rst);
HAL_Delay(160); // datasheet says 150ms
reg_wizchip_cris_cbfunc(wiz_cris_enter, wiz_cris_exit);
diff --git a/stmhal/modpyb.c b/stmhal/modpyb.c
index 17c3411eb..5b2bf7aa9 100644
--- a/stmhal/modpyb.c
+++ b/stmhal/modpyb.c
@@ -62,6 +62,7 @@
#include "portmodules.h"
#include "modmachine.h"
#include "extmod/fsusermount.h"
+#include "extmod/utime_mphal.h"
/// \function millis()
/// Returns the number of milliseconds since the board was last reset.
@@ -162,8 +163,8 @@ STATIC const mp_map_elem_t pyb_module_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_elapsed_millis), (mp_obj_t)&pyb_elapsed_millis_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_micros), (mp_obj_t)&pyb_micros_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_elapsed_micros), (mp_obj_t)&pyb_elapsed_micros_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_delay), (mp_obj_t)&time_sleep_ms_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_udelay), (mp_obj_t)&time_sleep_us_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_delay), (mp_obj_t)&mp_utime_sleep_ms_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_udelay), (mp_obj_t)&mp_utime_sleep_us_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_sync), (mp_obj_t)&mod_os_sync_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_mount), (mp_obj_t)&fsuser_mount_obj },
diff --git a/stmhal/modutime.c b/stmhal/modutime.c
index 60c92d60c..fae360bb0 100644
--- a/stmhal/modutime.c
+++ b/stmhal/modutime.c
@@ -31,6 +31,7 @@
#include "py/nlr.h"
#include "py/smallint.h"
#include "py/obj.h"
+#include "extmod/utime_mphal.h"
#include "systick.h"
#include "timeutils.h"
#include "portmodules.h"
@@ -129,84 +130,19 @@ STATIC mp_obj_t time_time(void) {
}
MP_DEFINE_CONST_FUN_OBJ_0(time_time_obj, time_time);
-/// \function sleep(seconds)
-/// Sleep for the given number of seconds. Seconds can be a floating-point number to
-/// sleep for a fractional number of seconds.
-STATIC mp_obj_t time_sleep(mp_obj_t seconds_o) {
-#if MICROPY_PY_BUILTINS_FLOAT
- if (MP_OBJ_IS_INT(seconds_o)) {
-#endif
- HAL_Delay(1000 * mp_obj_get_int(seconds_o));
-#if MICROPY_PY_BUILTINS_FLOAT
- } else {
- HAL_Delay((uint32_t)(1000 * mp_obj_get_float(seconds_o)));
- }
-#endif
- return mp_const_none;
-}
-MP_DEFINE_CONST_FUN_OBJ_1(time_sleep_obj, time_sleep);
-
-STATIC mp_obj_t time_sleep_ms(mp_obj_t ms_in) {
- mp_int_t ms = mp_obj_get_int(ms_in);
- if (ms > 0) {
- HAL_Delay(ms);
- }
- return mp_const_none;
-}
-MP_DEFINE_CONST_FUN_OBJ_1(time_sleep_ms_obj, time_sleep_ms);
-
-STATIC mp_obj_t time_sleep_us(mp_obj_t usec_in) {
- mp_int_t usec = mp_obj_get_int(usec_in);
- if (usec > 0) {
- sys_tick_udelay(usec);
- }
- return mp_const_none;
-}
-MP_DEFINE_CONST_FUN_OBJ_1(time_sleep_us_obj, time_sleep_us);
-
-STATIC mp_obj_t time_ticks_ms(void) {
- return MP_OBJ_NEW_SMALL_INT(HAL_GetTick() & MP_SMALL_INT_POSITIVE_MASK);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_0(time_ticks_ms_obj, time_ticks_ms);
-
-STATIC mp_obj_t time_ticks_us(void) {
- return MP_OBJ_NEW_SMALL_INT(sys_tick_get_microseconds() & MP_SMALL_INT_POSITIVE_MASK);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_0(time_ticks_us_obj, time_ticks_us);
-
-STATIC mp_obj_t time_ticks_cpu(void) {
- static bool enabled = false;
- if (!enabled) {
- CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
- DWT->CYCCNT = 0;
- DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
- enabled = true;
- }
- return MP_OBJ_NEW_SMALL_INT(DWT->CYCCNT & MP_SMALL_INT_POSITIVE_MASK);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_0(time_ticks_cpu_obj, time_ticks_cpu);
-
-STATIC mp_obj_t time_ticks_diff(mp_obj_t start_in, mp_obj_t end_in) {
- // we assume that the arguments come from ticks_xx so are small ints
- uint32_t start = MP_OBJ_SMALL_INT_VALUE(start_in);
- uint32_t end = MP_OBJ_SMALL_INT_VALUE(end_in);
- return MP_OBJ_NEW_SMALL_INT((end - start) & MP_SMALL_INT_POSITIVE_MASK);
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_2(time_ticks_diff_obj, time_ticks_diff);
-
STATIC const mp_map_elem_t time_module_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_utime) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_localtime), (mp_obj_t)&time_localtime_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_mktime), (mp_obj_t)&time_mktime_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&time_time_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_sleep), (mp_obj_t)&time_sleep_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_sleep_ms), (mp_obj_t)&time_sleep_ms_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_sleep_us), (mp_obj_t)&time_sleep_us_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_ticks_ms), (mp_obj_t)&time_ticks_ms_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_ticks_us), (mp_obj_t)&time_ticks_us_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_ticks_cpu), (mp_obj_t)&time_ticks_cpu_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_ticks_diff), (mp_obj_t)&time_ticks_diff_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_sleep), (mp_obj_t)&mp_utime_sleep_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_sleep_ms), (mp_obj_t)&mp_utime_sleep_ms_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_sleep_us), (mp_obj_t)&mp_utime_sleep_us_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_ticks_ms), (mp_obj_t)&mp_utime_ticks_ms_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_ticks_us), (mp_obj_t)&mp_utime_ticks_us_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_ticks_cpu), (mp_obj_t)&mp_utime_ticks_cpu_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_ticks_diff), (mp_obj_t)&mp_utime_ticks_diff_obj },
};
STATIC MP_DEFINE_CONST_DICT(time_module_globals, time_module_globals_table);
diff --git a/stmhal/mpconfigport.h b/stmhal/mpconfigport.h
index 52fbcad68..264db3029 100644
--- a/stmhal/mpconfigport.h
+++ b/stmhal/mpconfigport.h
@@ -67,10 +67,13 @@
#define MICROPY_USE_INTERNAL_ERRNO (1)
#define MICROPY_PY_FUNCTION_ATTRS (1)
#define MICROPY_PY_BUILTINS_STR_UNICODE (1)
+#define MICROPY_PY_BUILTINS_STR_CENTER (1)
+#define MICROPY_PY_BUILTINS_STR_PARTITION (1)
#define MICROPY_PY_BUILTINS_STR_SPLITLINES (1)
#define MICROPY_PY_BUILTINS_MEMORYVIEW (1)
#define MICROPY_PY_BUILTINS_FROZENSET (1)
#define MICROPY_PY_BUILTINS_EXECFILE (1)
+#define MICROPY_PY_BUILTINS_COMPILE (1)
#define MICROPY_PY_ALL_SPECIAL_METHODS (1)
#define MICROPY_PY_MICROPYTHON_MEM_INFO (1)
#define MICROPY_PY_ARRAY_SLICE_ASSIGN (1)
@@ -94,6 +97,7 @@
#define MICROPY_PY_URE (1)
#define MICROPY_PY_UHEAPQ (1)
#define MICROPY_PY_UHASHLIB (1)
+#define MICROPY_PY_UTIME_MP_HAL (1)
#define MICROPY_PY_MACHINE (1)
#define MICROPY_PY_MACHINE_PULSE (1)
#define MICROPY_PY_MACHINE_I2C (1)
@@ -176,6 +180,7 @@ extern const struct _mp_obj_module_t mp_module_network;
// extra constants
#define MICROPY_PORT_CONSTANTS \
{ MP_OBJ_NEW_QSTR(MP_QSTR_umachine), (mp_obj_t)&machine_module }, \
+ { MP_OBJ_NEW_QSTR(MP_QSTR_machine), (mp_obj_t)&machine_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_pyb), (mp_obj_t)&pyb_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_stm), (mp_obj_t)&stm_module }, \
diff --git a/stmhal/mphalport.c b/stmhal/mphalport.c
index f392550b8..8d6aa1a75 100644
--- a/stmhal/mphalport.c
+++ b/stmhal/mphalport.c
@@ -7,6 +7,8 @@
#include "usb.h"
#include "uart.h"
+bool mp_hal_ticks_cpu_enabled = false;
+
// this table converts from HAL_StatusTypeDef to POSIX errno
const byte mp_hal_status_to_errno_table[4] = {
[HAL_OK] = 0,
@@ -71,6 +73,15 @@ void mp_hal_stdout_tx_strn_cooked(const char *str, size_t len) {
}
}
+void mp_hal_ticks_cpu_enable(void) {
+ if (!mp_hal_ticks_cpu_enabled) {
+ CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
+ DWT->CYCCNT = 0;
+ DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
+ mp_hal_ticks_cpu_enabled = true;
+ }
+}
+
void mp_hal_gpio_clock_enable(GPIO_TypeDef *gpio) {
if (0) {
#ifdef __GPIOA_CLK_ENABLE
@@ -120,7 +131,9 @@ void mp_hal_gpio_clock_enable(GPIO_TypeDef *gpio) {
}
}
-void mp_hal_gpio_config(GPIO_TypeDef *gpio, uint32_t pin, uint32_t mode, uint32_t pull, uint32_t alt) {
+void mp_hal_pin_config(mp_hal_pin_obj_t pin_obj, uint32_t mode, uint32_t pull, uint32_t alt) {
+ GPIO_TypeDef *gpio = pin_obj->gpio;
+ uint32_t pin = pin_obj->pin;
mp_hal_gpio_clock_enable(gpio);
gpio->MODER = (gpio->MODER & ~(3 << (2 * pin))) | ((mode & 3) << (2 * pin));
gpio->OTYPER = (gpio->OTYPER & ~(1 << pin)) | ((mode >> 2) << pin);
@@ -129,7 +142,7 @@ void mp_hal_gpio_config(GPIO_TypeDef *gpio, uint32_t pin, uint32_t mode, uint32_
gpio->AFR[pin >> 3] = (gpio->AFR[pin >> 3] & ~(15 << (4 * (pin & 7)))) | (alt << (4 * (pin & 7)));
}
-bool mp_hal_gpio_set_af(const pin_obj_t *pin, GPIO_InitTypeDef *init, uint8_t fn, uint8_t unit) {
+bool mp_hal_pin_set_af(mp_hal_pin_obj_t pin, GPIO_InitTypeDef *init, uint8_t fn, uint8_t unit) {
mp_hal_gpio_clock_enable(pin->gpio);
const pin_af_obj_t *af = pin_find_af(pin, fn, unit);
diff --git a/stmhal/mphalport.h b/stmhal/mphalport.h
index 29a9fd6c3..e58bb33b5 100644
--- a/stmhal/mphalport.h
+++ b/stmhal/mphalport.h
@@ -14,41 +14,51 @@
#error mphalport.h: Unrecognized MCU_SERIES
#endif
-// Basic GPIO functions
-#define GPIO_read_pin(gpio, pin) (((gpio)->IDR >> (pin)) & 1)
-#if defined(MCU_SERIES_F7) || defined(MCU_SERIES_L4)
-#define GPIO_set_pin(gpio, pin_mask) (((gpio)->BSRR) = (pin_mask))
-#define GPIO_clear_pin(gpio, pin_mask) (((gpio)->BSRR) = ((pin_mask) << 16))
-#else
-#define GPIO_set_pin(gpio, pin_mask) (((gpio)->BSRRL) = (pin_mask))
-#define GPIO_clear_pin(gpio, pin_mask) (((gpio)->BSRRH) = (pin_mask))
-#endif
-#define GPIO_read_output_pin(gpio, pin) (((gpio)->ODR >> (pin)) & 1)
-
-void mp_hal_gpio_clock_enable(GPIO_TypeDef *gpio);
-void mp_hal_gpio_config(GPIO_TypeDef *gpio, uint32_t pin, uint32_t mode, uint32_t pull, uint32_t alt);
-bool mp_hal_gpio_set_af(const pin_obj_t *pin, GPIO_InitTypeDef *init, uint8_t fn, uint8_t unit);
-
extern const unsigned char mp_hal_status_to_errno_table[4];
NORETURN void mp_hal_raise(HAL_StatusTypeDef status);
void mp_hal_set_interrupt_char(int c); // -1 to disable
// timing functions
+
#include "stmhal/systick.h"
+
#define mp_hal_delay_ms HAL_Delay
+#define mp_hal_delay_us(us) sys_tick_udelay(us)
#define mp_hal_delay_us_fast(us) sys_tick_udelay(us)
#define mp_hal_ticks_ms HAL_GetTick
#define mp_hal_ticks_us() sys_tick_get_microseconds()
+extern bool mp_hal_ticks_cpu_enabled;
+void mp_hal_ticks_cpu_enable(void);
+static inline mp_uint_t mp_hal_ticks_cpu(void) {
+ if (!mp_hal_ticks_cpu_enabled) {
+ mp_hal_ticks_cpu_enable();
+ }
+ return DWT->CYCCNT;
+}
+
// C-level pin HAL
+
#include "stmhal/pin.h"
+
#define mp_hal_pin_obj_t const pin_obj_t*
-#define mp_hal_get_pin_obj(o) pin_find(o)
-#define mp_hal_pin_input(p) mp_hal_gpio_config((p)->gpio, (p)->pin, 0, 0, 0)
-#define mp_hal_pin_output(p) mp_hal_gpio_config((p)->gpio, (p)->pin, 1, 0, 0)
-#define mp_hal_pin_open_drain(p) mp_hal_gpio_config((p)->gpio, (p)->pin, 5, 0, 0)
-#define mp_hal_pin_od_low(p) GPIO_clear_pin((p)->gpio, (p)->pin_mask)
-#define mp_hal_pin_od_high(p) GPIO_set_pin((p)->gpio, (p)->pin_mask)
-#define mp_hal_pin_read(p) GPIO_read_pin((p)->gpio, (p)->pin)
-#define mp_hal_pin_write(p, v) do { if (v) { GPIO_set_pin((p)->gpio, (p)->pin_mask); } else { GPIO_clear_pin((p)->gpio, (p)->pin_mask); } } while (0)
+#define mp_hal_get_pin_obj(o) pin_find(o)
+#define mp_hal_pin_input(p) mp_hal_pin_config((p), 0, 0, 0)
+#define mp_hal_pin_output(p) mp_hal_pin_config((p), 1, 0, 0)
+#define mp_hal_pin_open_drain(p) mp_hal_pin_config((p), 5, 0, 0)
+#if defined(MCU_SERIES_F7) || defined(MCU_SERIES_L4)
+#define mp_hal_pin_high(p) (((p)->gpio->BSRR) = (p)->pin_mask)
+#define mp_hal_pin_low(p) (((p)->gpio->BSRR) = ((p)->pin_mask << 16))
+#else
+#define mp_hal_pin_high(p) (((p)->gpio->BSRRL) = (p)->pin_mask)
+#define mp_hal_pin_low(p) (((p)->gpio->BSRRH) = (p)->pin_mask)
+#endif
+#define mp_hal_pin_od_low(p) mp_hal_pin_low(p)
+#define mp_hal_pin_od_high(p) mp_hal_pin_high(p)
+#define mp_hal_pin_read(p) (((p)->gpio->IDR >> (p)->pin) & 1)
+#define mp_hal_pin_write(p, v) do { if (v) { mp_hal_pin_high(p); } else { mp_hal_pin_low(p); } } while (0)
+
+void mp_hal_gpio_clock_enable(GPIO_TypeDef *gpio);
+void mp_hal_pin_config(mp_hal_pin_obj_t pin, uint32_t mode, uint32_t pull, uint32_t alt);
+bool mp_hal_pin_set_af(mp_hal_pin_obj_t pin, GPIO_InitTypeDef *init, uint8_t fn, uint8_t unit);
diff --git a/stmhal/pin.c b/stmhal/pin.c
index 9bd4e7a6d..21012d186 100644
--- a/stmhal/pin.c
+++ b/stmhal/pin.c
@@ -266,14 +266,10 @@ STATIC mp_obj_t pin_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, con
pin_obj_t *self = self_in;
if (n_args == 0) {
// get pin
- return MP_OBJ_NEW_SMALL_INT(GPIO_read_pin(self->gpio, self->pin));
+ return MP_OBJ_NEW_SMALL_INT(mp_hal_pin_read(self));
} else {
// set pin
- if (mp_obj_is_true(args[0])) {
- GPIO_set_pin(self->gpio, self->pin_mask);
- } else {
- GPIO_clear_pin(self->gpio, self->pin_mask);
- }
+ mp_hal_pin_write(self, mp_obj_is_true(args[0]));
return mp_const_none;
}
}
@@ -371,11 +367,7 @@ STATIC mp_obj_t pin_obj_init_helper(const pin_obj_t *self, mp_uint_t n_args, con
// if given, set the pin value before initialising to prevent glitches
if (args[3].u_obj != MP_OBJ_NULL) {
- if (mp_obj_is_true(args[3].u_obj)) {
- GPIO_set_pin(self->gpio, self->pin_mask);
- } else {
- GPIO_clear_pin(self->gpio, self->pin_mask);
- }
+ mp_hal_pin_write(self, mp_obj_is_true(args[3].u_obj));
}
// configure the GPIO as requested
@@ -411,7 +403,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(pin_value_obj, 1, 2, pin_value);
/// Set the pin to a low logic level.
STATIC mp_obj_t pin_low(mp_obj_t self_in) {
pin_obj_t *self = self_in;
- GPIO_clear_pin(self->gpio, self->pin_mask);;
+ mp_hal_pin_low(self);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_low_obj, pin_low);
@@ -420,7 +412,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_low_obj, pin_low);
/// Set the pin to a high logic level.
STATIC mp_obj_t pin_high(mp_obj_t self_in) {
pin_obj_t *self = self_in;
- GPIO_set_pin(self->gpio, self->pin_mask);;
+ mp_hal_pin_high(self);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pin_high_obj, pin_high);
diff --git a/stmhal/pybstdio.c b/stmhal/pybstdio.c
index cf31f53ac..9cc787ce2 100644
--- a/stmhal/pybstdio.c
+++ b/stmhal/pybstdio.c
@@ -85,7 +85,7 @@ STATIC mp_uint_t stdio_write(mp_obj_t self_in, const void *buf, mp_uint_t size,
}
}
-STATIC mp_obj_t stdio_obj___exit__(mp_uint_t n_args, const mp_obj_t *args) {
+STATIC mp_obj_t stdio_obj___exit__(size_t n_args, const mp_obj_t *args) {
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(stdio_obj___exit___obj, 4, 4, stdio_obj___exit__);
diff --git a/stmhal/spi.c b/stmhal/spi.c
index 7f805709d..e72810d28 100644
--- a/stmhal/spi.c
+++ b/stmhal/spi.c
@@ -332,7 +332,7 @@ void spi_init(SPI_HandleTypeDef *spi, bool enable_nss_pin) {
}
for (uint i = (enable_nss_pin && pins[0] ? 0 : 1); i < 4; i++) {
- mp_hal_gpio_set_af(pins[i], &GPIO_InitStructure, AF_FN_SPI, (self - &pyb_spi_obj[0]) + 1);
+ mp_hal_pin_set_af(pins[i], &GPIO_InitStructure, AF_FN_SPI, (self - &pyb_spi_obj[0]) + 1);
}
// init the SPI device