From 1a810e53eccdf11613fb77e110db1d8f17cb1ffa Mon Sep 17 00:00:00 2001 From: hathach Date: Thu, 2 Feb 2023 21:13:51 +0700 Subject: [PATCH] update metro m7 --- ports/mimxrt10xx/boards.c | 40 ++++++------- ports/mimxrt10xx/boards/metro_m7_1011/board.h | 58 +++++++++---------- src/board_api.h | 5 ++ src/main.c | 1 + 4 files changed, 53 insertions(+), 51 deletions(-) diff --git a/ports/mimxrt10xx/boards.c b/ports/mimxrt10xx/boards.c index 2bdc3b0..773ef95 100644 --- a/ports/mimxrt10xx/boards.c +++ b/ports/mimxrt10xx/boards.c @@ -61,7 +61,7 @@ void board_init(void) SNVS->LPCR |= SNVS_LPCR_GPR_Z_DIS_MASK; #ifdef LED_PINMUX - IOMUXC_SetPinMux(LED_PINMUX, 0U); + IOMUXC_SetPinMux(LED_PINMUX, 0); IOMUXC_SetPinConfig(LED_PINMUX, 0x10B0U); gpio_pin_config_t led_config = { kGPIO_DigitalOutput, 0, kGPIO_NoIntmode }; @@ -69,15 +69,15 @@ void board_init(void) #endif #if NEOPIXEL_NUMBER - IOMUXC_SetPinMux( NEOPIXEL_PINMUX, 0U); - IOMUXC_SetPinConfig( NEOPIXEL_PINMUX, 0x10B0U); + IOMUXC_SetPinMux(NEOPIXEL_PINMUX, 0); + IOMUXC_SetPinConfig(NEOPIXEL_PINMUX, 0x10B0U); gpio_pin_config_t neopixel_config = { kGPIO_DigitalOutput, 0, kGPIO_NoIntmode }; GPIO_PinInit(NEOPIXEL_PORT, NEOPIXEL_PIN, &neopixel_config); #endif #ifdef BUTTON_PIN - IOMUXC_SetPinMux(BUTTON_PINMUX, 0U); + IOMUXC_SetPinMux(BUTTON_PINMUX, 0); gpio_pin_config_t button_config = { kGPIO_DigitalInput, 0, kGPIO_IntRisingEdge, }; GPIO_PinInit(BUTTON_PORT, BUTTON_PIN, &button_config); #endif @@ -87,6 +87,14 @@ void board_init(void) #endif } +void board_teardown(void) +{ + // no GPIO deinit for GPIO: LED, Neopixel, Button +#if TUF2_LOG + LPUART_Deinit(UART_DEV); +#endif +} + void board_usb_init(void) { // Clock @@ -123,7 +131,7 @@ void board_dfu_init(void) _dfu_mode = true; #ifdef LED_PWM_PINMUX - IOMUXC_SetPinMux(LED_PWM_PINMUX, 0U); + IOMUXC_SetPinMux(LED_PWM_PINMUX, 0); IOMUXC_SetPinConfig(LED_PWM_PINMUX, 0x10B0U); CLOCK_SetDiv(kCLOCK_AhbDiv, 0x2); /* Set AHB PODF to 2, divide by 3 */ @@ -348,10 +356,11 @@ void board_uart_init(uint32_t baud_rate) { #ifdef UART_DEV // Enable UART when debug log is on - IOMUXC_SetPinMux(UART_TX_PINMUX, 0U); - IOMUXC_SetPinMux(UART_RX_PINMUX, 0U); - IOMUXC_SetPinConfig(UART_TX_PINMUX, 0x10B0u); + IOMUXC_SetPinMux(UART_RX_PINMUX, 0); + IOMUXC_SetPinMux(UART_TX_PINMUX, 0); + IOMUXC_SetPinConfig(UART_RX_PINMUX, 0x10B0u); + IOMUXC_SetPinConfig(UART_TX_PINMUX, 0x10B0u); lpuart_config_t uart_config; LPUART_GetDefaultConfig(&uart_config); @@ -376,22 +385,9 @@ void board_uart_init(uint32_t baud_rate) int board_uart_write(void const * buf, int len) { #ifdef UART_DEV - uint8_t const* buf8 = (uint8_t const*) buf; - int count = 0; - - while(count < len) - { - if (LPUART_GetStatusFlags(UART_DEV) & kLPUART_TxDataRegEmptyFlag) - { - LPUART_WriteByte(UART_DEV, *buf8++); - count++; - } - } - + LPUART_WriteBlocking(UART_DEV, (uint8_t const*) buf, (size_t) len); return len; - #else - (void) buf; (void) len; return 0; #endif diff --git a/ports/mimxrt10xx/boards/metro_m7_1011/board.h b/ports/mimxrt10xx/boards/metro_m7_1011/board.h index a499f1f..6ab004b 100644 --- a/ports/mimxrt10xx/boards/metro_m7_1011/board.h +++ b/ports/mimxrt10xx/boards/metro_m7_1011/board.h @@ -35,25 +35,25 @@ // LED //--------------------------------------------------------------------+ -#define LED_PINMUX IOMUXC_GPIO_03_GPIOMUX_IO03 -#define LED_PORT GPIO1 -#define LED_PIN 3 -#define LED_STATE_ON 1 +#define LED_PINMUX IOMUXC_GPIO_03_GPIOMUX_IO03 +#define LED_PORT GPIO1 +#define LED_PIN 3 +#define LED_STATE_ON 1 -#define LED_PWM_PINMUX IOMUXC_GPIO_03_FLEXPWM1_PWM1_B -#define LED_PWM_BASE PWM1 -#define LED_PWM_MODULE kPWM_Module_1 -#define LED_PWM_CHANNEL kPWM_PwmB +#define LED_PWM_PINMUX IOMUXC_GPIO_03_FLEXPWM1_PWM1_B +#define LED_PWM_BASE PWM1 +#define LED_PWM_MODULE kPWM_Module_1 +#define LED_PWM_CHANNEL kPWM_PwmB //--------------------------------------------------------------------+ // Neopixel //--------------------------------------------------------------------+ // Number of neopixels -#define NEOPIXEL_NUMBER 1 -#define NEOPIXEL_PINMUX IOMUXC_GPIO_00_GPIOMUX_IO00 -#define NEOPIXEL_PORT GPIO1 -#define NEOPIXEL_PIN 0 +#define NEOPIXEL_NUMBER 1 +#define NEOPIXEL_PINMUX IOMUXC_GPIO_00_GPIOMUX_IO00 +#define NEOPIXEL_PORT GPIO1 +#define NEOPIXEL_PIN 0 //--------------------------------------------------------------------+ // Button @@ -69,34 +69,34 @@ // USB UF2 //--------------------------------------------------------------------+ -#define USB_VID 0x239A -#define USB_PID 0x00E1 -#define USB_MANUFACTURER "Adafruit" -#define USB_PRODUCT "Metro M7 iMX RT1011" +#define USB_VID 0x239A +#define USB_PID 0x00E1 +#define USB_MANUFACTURER "Adafruit" +#define USB_PRODUCT "Metro M7 iMX RT1011" -#define UF2_PRODUCT_NAME USB_MANUFACTURER " " USB_PRODUCT -#define UF2_BOARD_ID "MIMXRT1011-Metro-revA" -#define UF2_VOLUME_LABEL "METROM7BOOT" -#define UF2_INDEX_URL "https://www.adafruit.com/product/4950" +#define UF2_PRODUCT_NAME USB_MANUFACTURER " " USB_PRODUCT +#define UF2_BOARD_ID "MIMXRT1011-Metro-revA" +#define UF2_VOLUME_LABEL "METROM7BOOT" +#define UF2_INDEX_URL "https://www.adafruit.com/product/4950" //--------------------------------------------------------------------+ // UART //--------------------------------------------------------------------+ -#define UART_DEV LPUART1 -#define UART_RX_PINMUX IOMUXC_GPIO_09_LPUART1_RXD -#define UART_TX_PINMUX IOMUXC_GPIO_10_LPUART1_TXD +#define UART_DEV LPUART1 +#define UART_RX_PINMUX IOMUXC_GPIO_09_LPUART1_RXD +#define UART_TX_PINMUX IOMUXC_GPIO_10_LPUART1_TXD //--------------------------------------------------------------------+ // ESP32 Co-Processors //--------------------------------------------------------------------+ -#define ESP32_GPIO0_PINMUX IOMUXC_GPIO_SD_05_GPIO2_IO05 -#define ESP32_GPIO0_PORT GPIO2 -#define ESP32_GPIO0_PIN 5 +#define ESP32_GPIO0_PINMUX IOMUXC_GPIO_SD_05_GPIO2_IO05 +#define ESP32_GPIO0_PORT GPIO2 +#define ESP32_GPIO0_PIN 5 -#define ESP32_RESET_PINMUX IOMUXC_GPIO_AD_07_GPIOMUX_IO21 -#define ESP32_RESET_PORT GPIO1 -#define ESP32_RESET_PIN 21 +#define ESP32_RESET_PINMUX IOMUXC_GPIO_AD_07_GPIOMUX_IO21 +#define ESP32_RESET_PORT GPIO1 +#define ESP32_RESET_PIN 21 #endif /* BOARD_H_ */ diff --git a/src/board_api.h b/src/board_api.h index c073aeb..5180eca 100644 --- a/src/board_api.h +++ b/src/board_api.h @@ -78,8 +78,13 @@ #define BOARD_UART_BAUDRATE 115200 // Init basic peripherals such as clock, led indicator control (gpio, pwm etc ..) +// This API does not init usb which is only init if DFU is entered void board_init(void); +// opposite to board_init(), reset all board peripherals. Is called before jumping to application +// TODO force this API in the future +void board_teardown(void) __attribute__ ((weak)); + // Reset board, not return void board_reset(void); diff --git a/src/main.c b/src/main.c index 1863c4e..39b04b6 100644 --- a/src/main.c +++ b/src/main.c @@ -73,6 +73,7 @@ int main(void) if ( !check_dfu_mode() ) { TU_LOG1("Jump to application\r\n"); + if (board_teardown) board_teardown(); board_app_jump(); while(1) {} }