summaryrefslogtreecommitdiff
path: root/ports/esp32s2/supervisor
diff options
context:
space:
mode:
authorfoamyguy <foamyguy@gmail.com>2020-11-08 18:32:15 -0600
committerGitHub <noreply@github.com>2020-11-08 18:32:15 -0600
commitcf21c4da601e00a614efd8ade774a0c8e5444c64 (patch)
tree118a157edbc1884f502de8e9e26f79d178ed8c9a /ports/esp32s2/supervisor
parent7611e71a1bc49bcb426e0854519d5143eb262a17 (diff)
parenteec9821fdc19ca81c2d0811a6b6c5909a54b8c81 (diff)
Merge pull request #1 from adafruit/main
merge from adafruit
Diffstat (limited to 'ports/esp32s2/supervisor')
-rw-r--r--ports/esp32s2/supervisor/internal_flash.c2
-rw-r--r--ports/esp32s2/supervisor/port.c19
-rw-r--r--ports/esp32s2/supervisor/usb.c42
3 files changed, 52 insertions, 11 deletions
diff --git a/ports/esp32s2/supervisor/internal_flash.c b/ports/esp32s2/supervisor/internal_flash.c
index 4b216a095..de69a49f9 100644
--- a/ports/esp32s2/supervisor/internal_flash.c
+++ b/ports/esp32s2/supervisor/internal_flash.c
@@ -37,7 +37,7 @@
#include "py/runtime.h"
#include "lib/oofatfs/ff.h"
-#include "esp-idf/components/spi_flash/include/esp_partition.h"
+#include "components/spi_flash/include/esp_partition.h"
#include "supervisor/usb.h"
diff --git a/ports/esp32s2/supervisor/port.c b/ports/esp32s2/supervisor/port.c
index e52b7f376..0b9c03f74 100644
--- a/ports/esp32s2/supervisor/port.c
+++ b/ports/esp32s2/supervisor/port.c
@@ -35,6 +35,7 @@
#include "freertos/task.h"
#include "common-hal/microcontroller/Pin.h"
+#include "common-hal/analogio/AnalogOut.h"
#include "common-hal/busio/I2C.h"
#include "common-hal/busio/SPI.h"
#include "common-hal/busio/UART.h"
@@ -43,10 +44,11 @@
#include "common-hal/wifi/__init__.h"
#include "supervisor/memory.h"
#include "supervisor/shared/tick.h"
+#include "shared-bindings/rtc/__init__.h"
#include "peripherals/rmt.h"
-#include "esp-idf/components/heap/include/esp_heap_caps.h"
-#include "esp-idf/components/soc/soc/esp32s2/include/soc/cache_memory.h"
+#include "components/heap/include/esp_heap_caps.h"
+#include "components/soc/soc/esp32s2/include/soc/cache_memory.h"
#define HEAP_SIZE (48 * 1024)
@@ -55,6 +57,8 @@ uint32_t heap_size;
STATIC esp_timer_handle_t _tick_timer;
+extern void esp_restart(void) NORETURN;
+
void tick_timer_cb(void* arg) {
supervisor_tick();
}
@@ -92,6 +96,10 @@ void reset_port(void) {
// A larger delay so the idle task can run and do any IDF cleanup needed.
vTaskDelay(4);
+#if CIRCUITPY_ANALOGIO
+ analogout_reset();
+#endif
+
#if CIRCUITPY_PULSEIO
esp32s2_peripherals_rmt_reset();
pulsein_reset();
@@ -106,15 +114,22 @@ void reset_port(void) {
spi_reset();
uart_reset();
#endif
+
+#if CIRCUITPY_RTC
+ rtc_reset();
+#endif
+
#if CIRCUITPY_WIFI
wifi_reset();
#endif
}
void reset_to_bootloader(void) {
+ esp_restart();
}
void reset_cpu(void) {
+ esp_restart();
}
uint32_t *port_heap_get_bottom(void) {
diff --git a/ports/esp32s2/supervisor/usb.c b/ports/esp32s2/supervisor/usb.c
index 39eb8204f..1ad6af047 100644
--- a/ports/esp32s2/supervisor/usb.c
+++ b/ports/esp32s2/supervisor/usb.c
@@ -29,10 +29,12 @@
#include "lib/utils/interrupt_char.h"
#include "lib/mp-readline/readline.h"
-#include "esp-idf/components/soc/soc/esp32s2/include/soc/usb_periph.h"
-#include "esp-idf/components/driver/include/driver/periph_ctrl.h"
-#include "esp-idf/components/driver/include/driver/gpio.h"
-#include "esp-idf/components/esp_rom/include/esp32s2/rom/gpio.h"
+#include "components/soc/soc/esp32s2/include/soc/usb_periph.h"
+#include "components/driver/include/driver/periph_ctrl.h"
+#include "components/driver/include/driver/gpio.h"
+#include "components/esp_rom/include/esp32s2/rom/gpio.h"
+#include "components/esp_rom/include/esp_rom_gpio.h"
+#include "components/hal/esp32s2/include/hal/gpio_ll.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
@@ -68,6 +70,33 @@ void usb_device_task(void* param)
}
}
+static void configure_pins (usb_hal_context_t *usb)
+{
+ /* usb_periph_iopins currently configures USB_OTG as USB Device.
+ * Introduce additional parameters in usb_hal_context_t when adding support
+ * for USB Host.
+ */
+ for ( const usb_iopin_dsc_t *iopin = usb_periph_iopins; iopin->pin != -1; ++iopin ) {
+ if ( (usb->use_external_phy) || (iopin->ext_phy_only == 0) ) {
+ esp_rom_gpio_pad_select_gpio(iopin->pin);
+ if ( iopin->is_output ) {
+ esp_rom_gpio_connect_out_signal(iopin->pin, iopin->func, false, false);
+ }
+ else {
+ esp_rom_gpio_connect_in_signal(iopin->pin, iopin->func, false);
+ if ( (iopin->pin != GPIO_FUNC_IN_LOW) && (iopin->pin != GPIO_FUNC_IN_HIGH) ) {
+ gpio_ll_input_enable(&GPIO, iopin->pin);
+ }
+ }
+ esp_rom_gpio_pad_unhold(iopin->pin);
+ }
+ }
+ if ( !usb->use_external_phy ) {
+ gpio_set_drive_capability(USBPHY_DM_NUM, GPIO_DRIVE_CAP_3);
+ gpio_set_drive_capability(USBPHY_DP_NUM, GPIO_DRIVE_CAP_3);
+ }
+}
+
void init_usb_hardware(void) {
periph_module_reset(PERIPH_USB_MODULE);
periph_module_enable(PERIPH_USB_MODULE);
@@ -75,10 +104,7 @@ void init_usb_hardware(void) {
.use_external_phy = false // use built-in PHY
};
usb_hal_init(&hal);
-
- // Initialize the pin drive strength.
- gpio_set_drive_capability(USBPHY_DM_NUM, GPIO_DRIVE_CAP_3);
- gpio_set_drive_capability(USBPHY_DP_NUM, GPIO_DRIVE_CAP_3);
+ configure_pins(&hal);
(void) xTaskCreateStatic(usb_device_task,
"usbd",