From 3e4ceb8afecb44ca43be4566b193ad0604d47ae5 Mon Sep 17 00:00:00 2001 From: KY-zhang-X Date: Thu, 29 Sep 2022 12:15:02 +0800 Subject: [PATCH] add micropython demo on bearpi board --- .../BSP/Src/stm32l4xx_it_mpy.c | 360 ++ board/BearPi_STM32L431RC/BSP/Src/usart.c | 18 +- .../BearPi_STM32L31RC.uvoptx | 2923 ++++++++++++++ .../BearPi_STM32L31RC.uvprojx | 1532 +++++++ .../KEIL/micropython_basic_demo/README.md | 379 ++ .../board/hal/mp_tos_hal_pin.c | 273 ++ .../board/hal/mp_tos_hal_pin.h | 45 + .../board/hal/mp_tos_hal_spi.c | 80 + .../board/hal/mp_tos_hal_spi.h | 22 + .../board/hal/mp_tos_hal_uart.c | 26 + .../board/hal/mp_tos_hal_uart.h | 8 + .../board/mpconfigboard.h | 10 + .../board/mpconfigboard.mk | 0 .../micropython_basic_demo/board/mphalboard.c | 109 + .../micropython_basic_demo/board/mphalboard.h | 11 + .../genhdr/moduledefs.h | 65 + .../micropython_basic_demo/genhdr/mpversion.h | 4 + .../genhdr/qstrdefs.generated.h | 436 ++ .../imgs/before_build_command.png | Bin 0 -> 34303 bytes .../imgs/external_flash_1.png | Bin 0 -> 27049 bytes .../imgs/external_flash_2.png | Bin 0 -> 40052 bytes .../imgs/external_flash_3.png | Bin 0 -> 23907 bytes .../imgs/help('modules').png | Bin 0 -> 7510 bytes .../micropython_basic_demo/imgs/help().png | Bin 0 -> 24304 bytes .../imgs/include_paths.png | Bin 0 -> 18193 bytes .../imgs/other_configuration.png | Bin 0 -> 36346 bytes .../imgs/paste_mode_pin_py.png | Bin 0 -> 36521 bytes .../KEIL/micropython_basic_demo/scripts/os.py | 40 + .../micropython_basic_demo/scripts/pin.py | 28 + .../micropython_basic_demo/scripts/thread.py | 19 + .../startup_stm32l431xx.s | 404 ++ .../BearPi_STM32L31RC.uvoptx | 3519 +++++++++++++++++ .../BearPi_STM32L31RC.uvprojx | 2137 ++++++++++ .../BearPi_W25Q64JV.FLM | Bin 0 -> 917608 bytes .../board/hal/mp_tos_hal_pin.c | 273 ++ .../board/hal/mp_tos_hal_pin.h | 45 + .../board/hal/mp_tos_hal_spi.c | 80 + .../board/hal/mp_tos_hal_spi.h | 22 + .../board/hal/mp_tos_hal_uart.c | 26 + .../board/hal/mp_tos_hal_uart.h | 8 + .../board/mpconfigboard.h | 16 + .../board/mpconfigboard.mk | 0 .../micropython_extra_demo/board/mphalboard.c | 109 + .../micropython_extra_demo/board/mphalboard.h | 11 + .../genhdr/moduledefs.h | 150 + .../micropython_extra_demo/genhdr/mpversion.h | 4 + .../genhdr/qstrdefs.generated.h | 752 ++++ .../startup_stm32l431xx.s | 404 ++ examples/micropython_demo/micropython_demo.c | 53 + 49 files changed, 14399 insertions(+), 2 deletions(-) create mode 100644 board/BearPi_STM32L431RC/BSP/Src/stm32l4xx_it_mpy.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/BearPi_STM32L31RC.uvoptx create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/BearPi_STM32L31RC.uvprojx create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/README.md create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_pin.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_pin.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_spi.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_spi.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_uart.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_uart.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mpconfigboard.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mpconfigboard.mk create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mphalboard.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mphalboard.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/moduledefs.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/mpversion.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/qstrdefs.generated.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/before_build_command.png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/external_flash_1.png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/external_flash_2.png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/external_flash_3.png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/help('modules').png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/help().png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/include_paths.png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/other_configuration.png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/paste_mode_pin_py.png create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/os.py create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/pin.py create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/thread.py create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/startup_stm32l431xx.s create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_STM32L31RC.uvoptx create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_STM32L31RC.uvprojx create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_W25Q64JV.FLM create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_pin.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_pin.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_spi.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_spi.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_uart.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_uart.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mpconfigboard.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mpconfigboard.mk create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mphalboard.c create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mphalboard.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/moduledefs.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/mpversion.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/qstrdefs.generated.h create mode 100644 board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/startup_stm32l431xx.s create mode 100644 examples/micropython_demo/micropython_demo.c diff --git a/board/BearPi_STM32L431RC/BSP/Src/stm32l4xx_it_mpy.c b/board/BearPi_STM32L431RC/BSP/Src/stm32l4xx_it_mpy.c new file mode 100644 index 00000000..78cb75af --- /dev/null +++ b/board/BearPi_STM32L431RC/BSP/Src/stm32l4xx_it_mpy.c @@ -0,0 +1,360 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32l4xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2019 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32l4xx_it.h" +#include "tos_k.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "machine_uart.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ +extern UART_HandleTypeDef hlpuart1; +extern UART_HandleTypeDef huart2; +extern UART_HandleTypeDef huart3; +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M4 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Prefetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +__weak void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + if (tos_knl_is_running()) + { + tos_knl_irq_enter(); + tos_tick_handler(); + tos_knl_irq_leave(); + } + //HAL_SYSTICK_IRQHandler(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32L4xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32l4xx.s). */ +/******************************************************************************/ + +/** + * @brief This function handles EXTI line1 interrupt. + */ +void EXTI1_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI1_IRQn 0 */ + + /* USER CODE END EXTI1_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); + /* USER CODE BEGIN EXTI1_IRQn 1 */ + + /* USER CODE END EXTI1_IRQn 1 */ +} + +/** + * @brief This function handles EXTI line2 interrupt. + */ +void EXTI2_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI2_IRQn 0 */ + + /* USER CODE END EXTI2_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2); + /* USER CODE BEGIN EXTI2_IRQn 1 */ + + /* USER CODE END EXTI2_IRQn 1 */ +} + +/** + * @brief This function handles EXTI line3 interrupt. + */ +void EXTI3_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI3_IRQn 0 */ + + /* USER CODE END EXTI3_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3); + /* USER CODE BEGIN EXTI3_IRQn 1 */ + + /* USER CODE END EXTI3_IRQn 1 */ +} + +/** + * @brief This function handles EXTI line4 interrupt. + */ +void EXTI4_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI4_IRQn 0 */ + + /* USER CODE END EXTI4_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4); + /* USER CODE BEGIN EXTI4_IRQn 1 */ + + /* USER CODE END EXTI4_IRQn 1 */ +} + +/** + * @brief This function handles EXTI line[9:5] interrupts. + */ +void EXTI9_5_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI9_5_IRQn 0 */ + + /* USER CODE END EXTI9_5_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9); + /* USER CODE BEGIN EXTI9_5_IRQn 1 */ + + /* USER CODE END EXTI9_5_IRQn 1 */ +} + +/** + * @brief This function handles EXTI line[15:10] interrupts. + */ +void EXTI15_10_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI15_10_IRQn 0 */ + + /* USER CODE END EXTI15_10_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14); + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15); + /* USER CODE BEGIN EXTI15_10_IRQn 1 */ + + /* USER CODE END EXTI15_10_IRQn 1 */ +} + +/** + * @brief This function handles USART2 global interrupt. + */ +void USART2_IRQHandler(void) +{ + /* USER CODE BEGIN USART2_IRQn 0 */ + + /* USER CODE END USART2_IRQn 0 */ + HAL_UART_IRQHandler(&huart2); + /* USER CODE BEGIN USART2_IRQn 1 */ + + /* USER CODE END USART2_IRQn 1 */ +} + +/** + * @brief This function handles USART3 global interrupt. + */ +void USART3_IRQHandler(void) +{ + /* USER CODE BEGIN USART3_IRQn 0 */ + + /* USER CODE END USART3_IRQn 0 */ + HAL_UART_IRQHandler(&huart3); + /* USER CODE BEGIN USART3_IRQn 1 */ + + /* USER CODE END USART3_IRQn 1 */ +} + +/** + * @brief This function handles LPUART1 global interrupt. + */ +void LPUART1_IRQHandler(void) +{ + /* USER CODE BEGIN LPUART1_IRQn 0 */ + + /* USER CODE END LPUART1_IRQn 0 */ + HAL_UART_IRQHandler(&hlpuart1); + /* USER CODE BEGIN LPUART1_IRQn 1 */ + + /* USER CODE END LPUART1_IRQn 1 */ +} + +/* USER CODE BEGIN 1 */ +void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +{ + if (huart->Instance == LPUART1) { + mp_hal_uart_irq_handler(0); + } else if (huart->Instance == USART1) { + mp_hal_uart_irq_handler(1); + } else if (huart->Instance == USART2) { + mp_hal_uart_irq_handler(2); + } else if (huart->Instance == USART3) { + mp_hal_uart_irq_handler(3); + } +} +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/board/BearPi_STM32L431RC/BSP/Src/usart.c b/board/BearPi_STM32L431RC/BSP/Src/usart.c index c6353adf..794e1dcc 100644 --- a/board/BearPi_STM32L431RC/BSP/Src/usart.c +++ b/board/BearPi_STM32L431RC/BSP/Src/usart.c @@ -24,6 +24,7 @@ /* USER CODE BEGIN 0 */ uint8_t data; uint8_t shell_data; +extern void mp_hal_uart_rx_start(uint32_t uart_id); /* USER CODE END 0 */ UART_HandleTypeDef hlpuart1; @@ -49,10 +50,14 @@ void MX_LPUART1_UART_Init(void) { Error_Handler(); } - HAL_UART_Receive_IT(&hlpuart1, &data, 1); +#ifdef USE_MICROPYTHON + mp_hal_uart_rx_start(0); +#else + HAL_UART_Receive_IT(&hlpuart1, &data, 1); #if AT_INPUT_TYPE_FRAME_EN __HAL_UART_ENABLE_IT(&hlpuart1, UART_IT_IDLE); #endif +#endif } /* USART1 init function */ @@ -73,6 +78,9 @@ void MX_USART1_UART_Init(void) { Error_Handler(); } +#ifdef USE_MICROPYTHON + mp_hal_uart_rx_start(1); +#endif } /* USART2 init function */ @@ -93,7 +101,11 @@ void MX_USART2_UART_Init(void) { Error_Handler(); } +#ifdef USE_MICROPYTHON + mp_hal_uart_rx_start(2); +#else HAL_UART_Receive_IT(&huart2, &shell_data, 1); +#endif } /* USART3 init function */ @@ -114,7 +126,9 @@ void MX_USART3_UART_Init(void) { Error_Handler(); } - +#ifdef USE_MICROPYTHON + mp_hal_uart_rx_start(3); +#endif } void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/BearPi_STM32L31RC.uvoptx b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/BearPi_STM32L31RC.uvoptx new file mode 100644 index 00000000..61b73046 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/BearPi_STM32L31RC.uvoptx @@ -0,0 +1,2923 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + TencentOS_tiny + 0x4 + ARM-ADS + + 80000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\list\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L431RCTx$CMSIS\Flash\STM32L4xx_256.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U303030303030303030303031 -O10446 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32L431RCTx$CMSIS\Flash\STM32L4xx_256.FLM) + + + + + + 0 + 1 + tos_next_task + + + 1 + 1 + tos_rdyq.highest_prio + + + 2 + 1 + task_list + + + 3 + 1 + 0x20000280 + + + 4 + 1 + tos_rdyq.highest_prio + + + 5 + 1 + owner + + + 6 + 1 + tos_curr_task + + + 7 + 1 + highest_pending_prio + + + 8 + 1 + task + + + + + 1 + 0 + 0x200016F4 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Application/MDK-ARM + 0 + 0 + 0 + 0 + + 1 + 1 + 2 + 0 + 0 + 0 + startup_stm32l431xx.s + startup_stm32l431xx.s + 0 + 0 + + + + + Application/User + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\gpio.c + gpio.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\mcu_init.c + mcu_init.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\stm32l4xx_hal_msp.c + stm32l4xx_hal_msp.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\stm32l4xx_it_mpy.c + stm32l4xx_it_mpy.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\usart.c + usart.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\adc.c + adc.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\i2c.c + i2c.c + 0 + 0 + + + 2 + 10 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\spi.c + spi.c + 0 + 0 + + + + + examples + 0 + 0 + 0 + 0 + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\..\examples\micropython_demo\micropython_demo.c + micropython_demo.c + 0 + 0 + + + + + Drivers/STM32L4xx_HAL_Driver + 0 + 0 + 0 + 0 + + 4 + 12 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim.c + stm32l4xx_hal_tim.c + 0 + 0 + + + 4 + 13 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim_ex.c + stm32l4xx_hal_tim_ex.c + 0 + 0 + + + 4 + 14 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + stm32l4xx_hal_uart.c + 0 + 0 + + + 4 + 15 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + stm32l4xx_hal_uart_ex.c + 0 + 0 + + + 4 + 16 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + stm32l4xx_hal.c + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c.c + stm32l4xx_hal_i2c.c + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c_ex.c + stm32l4xx_hal_i2c_ex.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + stm32l4xx_hal_rcc.c + 0 + 0 + + + 4 + 20 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + stm32l4xx_hal_rcc_ex.c + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash.c + stm32l4xx_hal_flash.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ex.c + stm32l4xx_hal_flash_ex.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ramfunc.c + stm32l4xx_hal_flash_ramfunc.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + stm32l4xx_hal_gpio.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + stm32l4xx_hal_dma.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + stm32l4xx_hal_dma_ex.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + stm32l4xx_hal_pwr.c + 0 + 0 + + + 4 + 28 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + stm32l4xx_hal_pwr_ex.c + 0 + 0 + + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + stm32l4xx_hal_cortex.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc_ex.c + stm32l4xx_hal_adc_ex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc.c + stm32l4xx_hal_adc.c + 0 + 0 + + + 4 + 32 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac.c + stm32l4xx_hal_dac.c + 0 + 0 + + + 4 + 33 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac_ex.c + stm32l4xx_hal_dac_ex.c + 0 + 0 + + + 4 + 34 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi.c + stm32l4xx_hal_spi.c + 0 + 0 + + + 4 + 35 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi_ex.c + stm32l4xx_hal_spi_ex.c + 0 + 0 + + + + + Drivers/CMSIS + 0 + 0 + 0 + 0 + + 5 + 36 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\system_stm32l4xx.c + system_stm32l4xx.c + 0 + 0 + + + + + Hardware + 0 + 0 + 0 + 0 + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\BSP\Hardware\BH1750\BH1750.c + BH1750.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\BSP\Hardware\LCD_ST7789\lcd_spi2_drv.c + lcd_spi2_drv.c + 0 + 0 + + + + + kernel + 0 + 0 + 0 + 0 + + 7 + 39 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_mmblk.c + tos_mmblk.c + 0 + 0 + + + 7 + 40 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_mmheap.c + tos_mmheap.c + 0 + 0 + + + 7 + 41 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_mutex.c + tos_mutex.c + 0 + 0 + + + 7 + 42 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_sched.c + tos_sched.c + 0 + 0 + + + 7 + 43 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_sem.c + tos_sem.c + 0 + 0 + + + 7 + 44 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_sys.c + tos_sys.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_task.c + tos_task.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_tick.c + tos_tick.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_time.c + tos_time.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_timer.c + tos_timer.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_event.c + tos_event.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_global.c + tos_global.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_pend.c + tos_pend.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_robin.c + tos_robin.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_binary_heap.c + tos_binary_heap.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_char_fifo.c + tos_char_fifo.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_completion.c + tos_completion.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_countdownlatch.c + tos_countdownlatch.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_mail_queue.c + tos_mail_queue.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_message_queue.c + tos_message_queue.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_priority_mail_queue.c + tos_priority_mail_queue.c + 0 + 0 + + + 7 + 60 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_priority_message_queue.c + tos_priority_message_queue.c + 0 + 0 + + + 7 + 61 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_priority_queue.c + tos_priority_queue.c + 0 + 0 + + + 7 + 62 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_ring_queue.c + tos_ring_queue.c + 0 + 0 + + + + + hal + 0 + 0 + 0 + 0 + + 8 + 63 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\hal\st\stm32l4xx\src\tos_hal_uart.c + tos_hal_uart.c + 0 + 0 + + + 8 + 64 + 1 + 0 + 0 + 0 + .\board\hal\mp_tos_hal_pin.c + mp_tos_hal_pin.c + 0 + 0 + + + 8 + 65 + 1 + 0 + 0 + 0 + .\board\hal\mp_tos_hal_spi.c + mp_tos_hal_spi.c + 0 + 0 + + + 8 + 66 + 1 + 0 + 0 + 0 + .\board\hal\mp_tos_hal_uart.c + mp_tos_hal_uart.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 9 + 67 + 2 + 0 + 0 + 0 + ..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_s.S + port_s.S + 0 + 0 + + + 9 + 68 + 1 + 0 + 0 + 0 + ..\..\..\..\arch\arm\arm-v7m\common\tos_cpu.c + tos_cpu.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + ..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_c.c + port_c.c + 0 + 0 + + + + + config + 0 + 0 + 0 + 0 + + 10 + 70 + 5 + 0 + 0 + 0 + ..\..\TOS-CONFIG\tos_config.h + tos_config.h + 0 + 0 + + + + + micropython/py + 0 + 0 + 0 + 0 + + 11 + 71 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\argcheck.c + argcheck.c + 0 + 0 + + + 11 + 72 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmarm.c + asmarm.c + 0 + 0 + + + 11 + 73 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmbase.c + asmbase.c + 0 + 0 + + + 11 + 74 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmthumb.c + asmthumb.c + 0 + 0 + + + 11 + 75 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmx64.c + asmx64.c + 0 + 0 + + + 11 + 76 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmx86.c + asmx86.c + 0 + 0 + + + 11 + 77 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmxtensa.c + asmxtensa.c + 0 + 0 + + + 11 + 78 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\bc.c + bc.c + 0 + 0 + + + 11 + 79 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\binary.c + binary.c + 0 + 0 + + + 11 + 80 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\builtinevex.c + builtinevex.c + 0 + 0 + + + 11 + 81 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\builtinhelp.c + builtinhelp.c + 0 + 0 + + + 11 + 82 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\builtinimport.c + builtinimport.c + 0 + 0 + + + 11 + 83 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\compile.c + compile.c + 0 + 0 + + + 11 + 84 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitbc.c + emitbc.c + 0 + 0 + + + 11 + 85 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitcommon.c + emitcommon.c + 0 + 0 + + + 11 + 86 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitglue.c + emitglue.c + 0 + 0 + + + 11 + 87 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitinlinethumb.c + emitinlinethumb.c + 0 + 0 + + + 11 + 88 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitinlinextensa.c + emitinlinextensa.c + 0 + 0 + + + 11 + 89 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnarm.c + emitnarm.c + 0 + 0 + + + 11 + 90 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnative.c + emitnative.c + 0 + 0 + + + 11 + 91 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnthumb.c + emitnthumb.c + 0 + 0 + + + 11 + 92 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnx64.c + emitnx64.c + 0 + 0 + + + 11 + 93 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnx86.c + emitnx86.c + 0 + 0 + + + 11 + 94 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnxtensa.c + emitnxtensa.c + 0 + 0 + + + 11 + 95 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnxtensawin.c + emitnxtensawin.c + 0 + 0 + + + 11 + 96 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\formatfloat.c + formatfloat.c + 0 + 0 + + + 11 + 97 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\frozenmod.c + frozenmod.c + 0 + 0 + + + 11 + 98 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\gc.c + gc.c + 0 + 0 + + + 11 + 99 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\lexer.c + lexer.c + 0 + 0 + + + 11 + 100 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\malloc.c + malloc.c + 0 + 0 + + + 11 + 101 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\map.c + map.c + 0 + 0 + + + 11 + 102 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modarray.c + modarray.c + 0 + 0 + + + 11 + 103 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modbuiltins.c + modbuiltins.c + 0 + 0 + + + 11 + 104 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modcmath.c + modcmath.c + 0 + 0 + + + 11 + 105 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modcollections.c + modcollections.c + 0 + 0 + + + 11 + 106 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modgc.c + modgc.c + 0 + 0 + + + 11 + 107 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modio.c + modio.c + 0 + 0 + + + 11 + 108 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modmath.c + modmath.c + 0 + 0 + + + 11 + 109 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modmicropython.c + modmicropython.c + 0 + 0 + + + 11 + 110 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modstruct.c + modstruct.c + 0 + 0 + + + 11 + 111 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modsys.c + modsys.c + 0 + 0 + + + 11 + 112 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modthread.c + modthread.c + 0 + 0 + + + 11 + 113 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\moduerrno.c + moduerrno.c + 0 + 0 + + + 11 + 114 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\mpprint.c + mpprint.c + 0 + 0 + + + 11 + 115 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\mpstate.c + mpstate.c + 0 + 0 + + + 11 + 116 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\mpz.c + mpz.c + 0 + 0 + + + 11 + 117 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nativeglue.c + nativeglue.c + 0 + 0 + + + 11 + 118 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlr.c + nlr.c + 0 + 0 + + + 11 + 119 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlraarch64.c + nlraarch64.c + 0 + 0 + + + 11 + 120 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrpowerpc.c + nlrpowerpc.c + 0 + 0 + + + 11 + 121 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrsetjmp.c + nlrsetjmp.c + 0 + 0 + + + 11 + 122 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrthumb.c + nlrthumb.c + 0 + 0 + + + 11 + 123 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrx64.c + nlrx64.c + 0 + 0 + + + 11 + 124 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrx86.c + nlrx86.c + 0 + 0 + + + 11 + 125 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrxtensa.c + nlrxtensa.c + 0 + 0 + + + 11 + 126 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\obj.c + obj.c + 0 + 0 + + + 11 + 127 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objarray.c + objarray.c + 0 + 0 + + + 11 + 128 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objattrtuple.c + objattrtuple.c + 0 + 0 + + + 11 + 129 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objbool.c + objbool.c + 0 + 0 + + + 11 + 130 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objboundmeth.c + objboundmeth.c + 0 + 0 + + + 11 + 131 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objcell.c + objcell.c + 0 + 0 + + + 11 + 132 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objclosure.c + objclosure.c + 0 + 0 + + + 11 + 133 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objcomplex.c + objcomplex.c + 0 + 0 + + + 11 + 134 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objdeque.c + objdeque.c + 0 + 0 + + + 11 + 135 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objdict.c + objdict.c + 0 + 0 + + + 11 + 136 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objenumerate.c + objenumerate.c + 0 + 0 + + + 11 + 137 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objexcept.c + objexcept.c + 0 + 0 + + + 11 + 138 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objfilter.c + objfilter.c + 0 + 0 + + + 11 + 139 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objfloat.c + objfloat.c + 0 + 0 + + + 11 + 140 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objfun.c + objfun.c + 0 + 0 + + + 11 + 141 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objgenerator.c + objgenerator.c + 0 + 0 + + + 11 + 142 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objgetitemiter.c + objgetitemiter.c + 0 + 0 + + + 11 + 143 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objint.c + objint.c + 0 + 0 + + + 11 + 144 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objint_longlong.c + objint_longlong.c + 0 + 0 + + + 11 + 145 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objint_mpz.c + objint_mpz.c + 0 + 0 + + + 11 + 146 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objlist.c + objlist.c + 0 + 0 + + + 11 + 147 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objmap.c + objmap.c + 0 + 0 + + + 11 + 148 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objmodule.c + objmodule.c + 0 + 0 + + + 11 + 149 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objnamedtuple.c + objnamedtuple.c + 0 + 0 + + + 11 + 150 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objnone.c + objnone.c + 0 + 0 + + + 11 + 151 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objobject.c + objobject.c + 0 + 0 + + + 11 + 152 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objpolyiter.c + objpolyiter.c + 0 + 0 + + + 11 + 153 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objproperty.c + objproperty.c + 0 + 0 + + + 11 + 154 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objrange.c + objrange.c + 0 + 0 + + + 11 + 155 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objreversed.c + objreversed.c + 0 + 0 + + + 11 + 156 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objset.c + objset.c + 0 + 0 + + + 11 + 157 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objsingleton.c + objsingleton.c + 0 + 0 + + + 11 + 158 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objslice.c + objslice.c + 0 + 0 + + + 11 + 159 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objstr.c + objstr.c + 0 + 0 + + + 11 + 160 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objstringio.c + objstringio.c + 0 + 0 + + + 11 + 161 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objstrunicode.c + objstrunicode.c + 0 + 0 + + + 11 + 162 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objtuple.c + objtuple.c + 0 + 0 + + + 11 + 163 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objtype.c + objtype.c + 0 + 0 + + + 11 + 164 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objzip.c + objzip.c + 0 + 0 + + + 11 + 165 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\opmethods.c + opmethods.c + 0 + 0 + + + 11 + 166 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\pairheap.c + pairheap.c + 0 + 0 + + + 11 + 167 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\parse.c + parse.c + 0 + 0 + + + 11 + 168 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\parsenum.c + parsenum.c + 0 + 0 + + + 11 + 169 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\parsenumbase.c + parsenumbase.c + 0 + 0 + + + 11 + 170 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\persistentcode.c + persistentcode.c + 0 + 0 + + + 11 + 171 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\profile.c + profile.c + 0 + 0 + + + 11 + 172 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\pystack.c + pystack.c + 0 + 0 + + + 11 + 173 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\qstr.c + qstr.c + 0 + 0 + + + 11 + 174 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\reader.c + reader.c + 0 + 0 + + + 11 + 175 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\repl.c + repl.c + 0 + 0 + + + 11 + 176 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\ringbuf.c + ringbuf.c + 0 + 0 + + + 11 + 177 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\runtime.c + runtime.c + 0 + 0 + + + 11 + 178 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\runtime_utils.c + runtime_utils.c + 0 + 0 + + + 11 + 179 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\scheduler.c + scheduler.c + 0 + 0 + + + 11 + 180 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\scope.c + scope.c + 0 + 0 + + + 11 + 181 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\sequence.c + sequence.c + 0 + 0 + + + 11 + 182 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\showbc.c + showbc.c + 0 + 0 + + + 11 + 183 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\smallint.c + smallint.c + 0 + 0 + + + 11 + 184 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\stackctrl.c + stackctrl.c + 0 + 0 + + + 11 + 185 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\stream.c + stream.c + 0 + 0 + + + 11 + 186 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\unicode.c + unicode.c + 0 + 0 + + + 11 + 187 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\vm.c + vm.c + 0 + 0 + + + 11 + 188 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\vstr.c + vstr.c + 0 + 0 + + + 11 + 189 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\warning.c + warning.c + 0 + 0 + + + + + micropython/shared + 0 + 0 + 0 + 0 + + 12 + 190 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\readline\readline.c + readline.c + 0 + 0 + + + 12 + 191 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\runtime\pyexec.c + pyexec.c + 0 + 0 + + + 12 + 192 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\runtime\sys_stdio_mphal.c + sys_stdio_mphal.c + 0 + 0 + + + 12 + 193 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\runtime\interrupt_char.c + interrupt_char.c + 0 + 0 + + + 12 + 194 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\runtime\stdout_helpers.c + stdout_helpers.c + 0 + 0 + + + + + micropython/extmod + 0 + 0 + 0 + 0 + + 13 + 195 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\utime_mphal.c + utime_mphal.c + 0 + 0 + + + 13 + 196 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\machine_signal.c + machine_signal.c + 0 + 0 + + + 13 + 197 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\virtpin.c + virtpin.c + 0 + 0 + + + 13 + 198 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\machine_mem.c + machine_mem.c + 0 + 0 + + + + + micropython/port + 0 + 0 + 0 + 0 + + 14 + 199 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\help.c + help.c + 0 + 0 + + + 14 + 200 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\mphalport.c + mphalport.c + 0 + 0 + + + 14 + 201 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\mpmain.c + mpmain.c + 0 + 0 + + + 14 + 202 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\mpthreadport.c + mpthreadport.c + 0 + 0 + + + 14 + 203 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\machine_hw_spi.c + machine_hw_spi.c + 0 + 0 + + + 14 + 204 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\machine_pin.c + machine_pin.c + 0 + 0 + + + 14 + 205 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\machine_timer.c + machine_timer.c + 0 + 0 + + + 14 + 206 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\machine_uart.c + machine_uart.c + 0 + 0 + + + 14 + 207 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\modesp8266.c + modesp8266.c + 0 + 0 + + + 14 + 208 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\modmachine.c + modmachine.c + 0 + 0 + + + 14 + 209 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\modutime.c + modutime.c + 0 + 0 + + + 14 + 210 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\vfs_tos.c + vfs_tos.c + 0 + 0 + + + 14 + 211 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\vfs_tos_file.c + vfs_tos_file.c + 0 + 0 + + + 14 + 212 + 1 + 0 + 0 + 0 + .\board\mphalboard.c + mphalboard.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/BearPi_STM32L31RC.uvprojx b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/BearPi_STM32L31RC.uvprojx new file mode 100644 index 00000000..56bae191 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/BearPi_STM32L31RC.uvprojx @@ -0,0 +1,1532 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + TencentOS_tiny + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32L431RCTx + STMicroelectronics + Keil.STM32L4xx_DFP.2.2.0 + http://www.keil.com/pack + IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x803FFFF) CLOCK(8000000) FPU2 CPUTYPE("Cortex-M4") + + + + + + + + + + + + + + + $$Device:STM32L431RCTx$CMSIS\SVD\STM32L4x1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\obj\ + TencentOS_tiny + 1 + 0 + 1 + 1 + 0 + .\list\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + cmd.exe /C cd $P..\..\..\..\components\language\micropython\port & make clean-build V=1 + cmd.exe /C cd $P..\..\..\..\components\language\micropython\port & make genhdr V=1 PYTHON=python PORT_BOARD_DIR=$Pboard TARGET_GENHDR_DIR=$Pgenhdr + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER,STM32L431xx,WITH_TOS_NET_ADAPTER,USE_ESP8266,USE_MICROPYTHON + + ..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\kernel\core\include;..\..\TOS-CONFIG;..\..\..\..\platform\arch\arm\cortex-m4\keil;..\..\..\..\kernel\pm\include;..\..\..\..\osal\cmsis_os;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\net\at\include;..\..\..\..\kernel\hal\include;..\..\BSP\Hardware\LCD_ST7789;..\..\BSP\Hardware\BH1750;..\..\..\..\examples\micropython_demo;..\..\..\..\components\language\micropython;..\..\..\..\components\language\micropython\port;..\..\..\..\components\language\micropython\port\modules;..\micropython_basic_demo;.\board;.\board\hal + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application/MDK-ARM + + + startup_stm32l431xx.s + 2 + startup_stm32l431xx.s + + + + + Application/User + + + gpio.c + 1 + ..\..\BSP\Src\gpio.c + + + main.c + 1 + ..\..\BSP\Src\main.c + + + mcu_init.c + 1 + ..\..\BSP\Src\mcu_init.c + + + stm32l4xx_hal_msp.c + 1 + ..\..\BSP\Src\stm32l4xx_hal_msp.c + + + stm32l4xx_it_mpy.c + 1 + ..\..\BSP\Src\stm32l4xx_it_mpy.c + + + usart.c + 1 + ..\..\BSP\Src\usart.c + + + adc.c + 1 + ..\..\BSP\Src\adc.c + + + i2c.c + 1 + ..\..\BSP\Src\i2c.c + + + spi.c + 1 + ..\..\BSP\Src\spi.c + + + + + examples + + + micropython_demo.c + 1 + ..\..\..\..\examples\micropython_demo\micropython_demo.c + + + + + Drivers/STM32L4xx_HAL_Driver + + + stm32l4xx_hal_tim.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim.c + + + stm32l4xx_hal_tim_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim_ex.c + + + stm32l4xx_hal_uart.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + + + stm32l4xx_hal_uart_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + + + stm32l4xx_hal.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + + + stm32l4xx_hal_i2c.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c.c + + + stm32l4xx_hal_i2c_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c_ex.c + + + stm32l4xx_hal_rcc.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + + + stm32l4xx_hal_rcc_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + + + stm32l4xx_hal_flash.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash.c + + + stm32l4xx_hal_flash_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ex.c + + + stm32l4xx_hal_flash_ramfunc.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ramfunc.c + + + stm32l4xx_hal_gpio.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + + + stm32l4xx_hal_dma.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + + + stm32l4xx_hal_dma_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + + + stm32l4xx_hal_pwr.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + + + stm32l4xx_hal_pwr_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + + + stm32l4xx_hal_cortex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + + + stm32l4xx_hal_adc_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc_ex.c + + + stm32l4xx_hal_adc.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc.c + + + stm32l4xx_hal_dac.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac.c + + + stm32l4xx_hal_dac_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac_ex.c + + + stm32l4xx_hal_spi.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi.c + + + stm32l4xx_hal_spi_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi_ex.c + + + + + Drivers/CMSIS + + + system_stm32l4xx.c + 1 + ..\..\BSP\Src\system_stm32l4xx.c + + + + + Hardware + + + BH1750.c + 1 + ..\..\BSP\Hardware\BH1750\BH1750.c + + + lcd_spi2_drv.c + 1 + ..\..\BSP\Hardware\LCD_ST7789\lcd_spi2_drv.c + + + + + kernel + + + tos_mmblk.c + 1 + ..\..\..\..\kernel\core\tos_mmblk.c + + + tos_mmheap.c + 1 + ..\..\..\..\kernel\core\tos_mmheap.c + + + tos_mutex.c + 1 + ..\..\..\..\kernel\core\tos_mutex.c + + + tos_sched.c + 1 + ..\..\..\..\kernel\core\tos_sched.c + + + tos_sem.c + 1 + ..\..\..\..\kernel\core\tos_sem.c + + + tos_sys.c + 1 + ..\..\..\..\kernel\core\tos_sys.c + + + tos_task.c + 1 + ..\..\..\..\kernel\core\tos_task.c + + + tos_tick.c + 1 + ..\..\..\..\kernel\core\tos_tick.c + + + tos_time.c + 1 + ..\..\..\..\kernel\core\tos_time.c + + + tos_timer.c + 1 + ..\..\..\..\kernel\core\tos_timer.c + + + tos_event.c + 1 + ..\..\..\..\kernel\core\tos_event.c + + + tos_global.c + 1 + ..\..\..\..\kernel\core\tos_global.c + + + tos_pend.c + 1 + ..\..\..\..\kernel\core\tos_pend.c + + + tos_robin.c + 1 + ..\..\..\..\kernel\core\tos_robin.c + + + tos_binary_heap.c + 1 + ..\..\..\..\kernel\core\tos_binary_heap.c + + + tos_char_fifo.c + 1 + ..\..\..\..\kernel\core\tos_char_fifo.c + + + tos_completion.c + 1 + ..\..\..\..\kernel\core\tos_completion.c + + + tos_countdownlatch.c + 1 + ..\..\..\..\kernel\core\tos_countdownlatch.c + + + tos_mail_queue.c + 1 + ..\..\..\..\kernel\core\tos_mail_queue.c + + + tos_message_queue.c + 1 + ..\..\..\..\kernel\core\tos_message_queue.c + + + tos_priority_mail_queue.c + 1 + ..\..\..\..\kernel\core\tos_priority_mail_queue.c + + + tos_priority_message_queue.c + 1 + ..\..\..\..\kernel\core\tos_priority_message_queue.c + + + tos_priority_queue.c + 1 + ..\..\..\..\kernel\core\tos_priority_queue.c + + + tos_ring_queue.c + 1 + ..\..\..\..\kernel\core\tos_ring_queue.c + + + + + hal + + + tos_hal_uart.c + 1 + ..\..\..\..\platform\hal\st\stm32l4xx\src\tos_hal_uart.c + + + mp_tos_hal_pin.c + 1 + .\board\hal\mp_tos_hal_pin.c + + + mp_tos_hal_spi.c + 1 + .\board\hal\mp_tos_hal_spi.c + + + mp_tos_hal_uart.c + 1 + .\board\hal\mp_tos_hal_uart.c + + + + + cpu + + + port_s.S + 2 + ..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_s.S + + + tos_cpu.c + 1 + ..\..\..\..\arch\arm\arm-v7m\common\tos_cpu.c + + + port_c.c + 1 + ..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_c.c + + + + + config + + + tos_config.h + 5 + ..\..\TOS-CONFIG\tos_config.h + + + + + micropython/py + + + argcheck.c + 1 + ..\..\..\..\components\language\micropython\py\argcheck.c + + + asmarm.c + 1 + ..\..\..\..\components\language\micropython\py\asmarm.c + + + asmbase.c + 1 + ..\..\..\..\components\language\micropython\py\asmbase.c + + + asmthumb.c + 1 + ..\..\..\..\components\language\micropython\py\asmthumb.c + + + asmx64.c + 1 + ..\..\..\..\components\language\micropython\py\asmx64.c + + + asmx86.c + 1 + ..\..\..\..\components\language\micropython\py\asmx86.c + + + asmxtensa.c + 1 + ..\..\..\..\components\language\micropython\py\asmxtensa.c + + + bc.c + 1 + ..\..\..\..\components\language\micropython\py\bc.c + + + binary.c + 1 + ..\..\..\..\components\language\micropython\py\binary.c + + + builtinevex.c + 1 + ..\..\..\..\components\language\micropython\py\builtinevex.c + + + builtinhelp.c + 1 + ..\..\..\..\components\language\micropython\py\builtinhelp.c + + + builtinimport.c + 1 + ..\..\..\..\components\language\micropython\py\builtinimport.c + + + compile.c + 1 + ..\..\..\..\components\language\micropython\py\compile.c + + + emitbc.c + 1 + ..\..\..\..\components\language\micropython\py\emitbc.c + + + emitcommon.c + 1 + ..\..\..\..\components\language\micropython\py\emitcommon.c + + + emitglue.c + 1 + ..\..\..\..\components\language\micropython\py\emitglue.c + + + emitinlinethumb.c + 1 + ..\..\..\..\components\language\micropython\py\emitinlinethumb.c + + + emitinlinextensa.c + 1 + ..\..\..\..\components\language\micropython\py\emitinlinextensa.c + + + emitnarm.c + 1 + ..\..\..\..\components\language\micropython\py\emitnarm.c + + + emitnative.c + 1 + ..\..\..\..\components\language\micropython\py\emitnative.c + + + emitnthumb.c + 1 + ..\..\..\..\components\language\micropython\py\emitnthumb.c + + + emitnx64.c + 1 + ..\..\..\..\components\language\micropython\py\emitnx64.c + + + emitnx86.c + 1 + ..\..\..\..\components\language\micropython\py\emitnx86.c + + + emitnxtensa.c + 1 + ..\..\..\..\components\language\micropython\py\emitnxtensa.c + + + emitnxtensawin.c + 1 + ..\..\..\..\components\language\micropython\py\emitnxtensawin.c + + + formatfloat.c + 1 + ..\..\..\..\components\language\micropython\py\formatfloat.c + + + frozenmod.c + 1 + ..\..\..\..\components\language\micropython\py\frozenmod.c + + + gc.c + 1 + ..\..\..\..\components\language\micropython\py\gc.c + + + lexer.c + 1 + ..\..\..\..\components\language\micropython\py\lexer.c + + + malloc.c + 1 + ..\..\..\..\components\language\micropython\py\malloc.c + + + map.c + 1 + ..\..\..\..\components\language\micropython\py\map.c + + + modarray.c + 1 + ..\..\..\..\components\language\micropython\py\modarray.c + + + modbuiltins.c + 1 + ..\..\..\..\components\language\micropython\py\modbuiltins.c + + + modcmath.c + 1 + ..\..\..\..\components\language\micropython\py\modcmath.c + + + modcollections.c + 1 + ..\..\..\..\components\language\micropython\py\modcollections.c + + + modgc.c + 1 + ..\..\..\..\components\language\micropython\py\modgc.c + + + modio.c + 1 + ..\..\..\..\components\language\micropython\py\modio.c + + + modmath.c + 1 + ..\..\..\..\components\language\micropython\py\modmath.c + + + modmicropython.c + 1 + ..\..\..\..\components\language\micropython\py\modmicropython.c + + + modstruct.c + 1 + ..\..\..\..\components\language\micropython\py\modstruct.c + + + modsys.c + 1 + ..\..\..\..\components\language\micropython\py\modsys.c + + + modthread.c + 1 + ..\..\..\..\components\language\micropython\py\modthread.c + + + moduerrno.c + 1 + ..\..\..\..\components\language\micropython\py\moduerrno.c + + + mpprint.c + 1 + ..\..\..\..\components\language\micropython\py\mpprint.c + + + mpstate.c + 1 + ..\..\..\..\components\language\micropython\py\mpstate.c + + + mpz.c + 1 + ..\..\..\..\components\language\micropython\py\mpz.c + + + nativeglue.c + 1 + ..\..\..\..\components\language\micropython\py\nativeglue.c + + + nlr.c + 1 + ..\..\..\..\components\language\micropython\py\nlr.c + + + nlraarch64.c + 1 + ..\..\..\..\components\language\micropython\py\nlraarch64.c + + + nlrpowerpc.c + 1 + ..\..\..\..\components\language\micropython\py\nlrpowerpc.c + + + nlrsetjmp.c + 1 + ..\..\..\..\components\language\micropython\py\nlrsetjmp.c + + + nlrthumb.c + 1 + ..\..\..\..\components\language\micropython\py\nlrthumb.c + + + nlrx64.c + 1 + ..\..\..\..\components\language\micropython\py\nlrx64.c + + + nlrx86.c + 1 + ..\..\..\..\components\language\micropython\py\nlrx86.c + + + nlrxtensa.c + 1 + ..\..\..\..\components\language\micropython\py\nlrxtensa.c + + + obj.c + 1 + ..\..\..\..\components\language\micropython\py\obj.c + + + objarray.c + 1 + ..\..\..\..\components\language\micropython\py\objarray.c + + + objattrtuple.c + 1 + ..\..\..\..\components\language\micropython\py\objattrtuple.c + + + objbool.c + 1 + ..\..\..\..\components\language\micropython\py\objbool.c + + + objboundmeth.c + 1 + ..\..\..\..\components\language\micropython\py\objboundmeth.c + + + objcell.c + 1 + ..\..\..\..\components\language\micropython\py\objcell.c + + + objclosure.c + 1 + ..\..\..\..\components\language\micropython\py\objclosure.c + + + objcomplex.c + 1 + ..\..\..\..\components\language\micropython\py\objcomplex.c + + + objdeque.c + 1 + ..\..\..\..\components\language\micropython\py\objdeque.c + + + objdict.c + 1 + ..\..\..\..\components\language\micropython\py\objdict.c + + + objenumerate.c + 1 + ..\..\..\..\components\language\micropython\py\objenumerate.c + + + objexcept.c + 1 + ..\..\..\..\components\language\micropython\py\objexcept.c + + + objfilter.c + 1 + ..\..\..\..\components\language\micropython\py\objfilter.c + + + objfloat.c + 1 + ..\..\..\..\components\language\micropython\py\objfloat.c + + + objfun.c + 1 + ..\..\..\..\components\language\micropython\py\objfun.c + + + objgenerator.c + 1 + ..\..\..\..\components\language\micropython\py\objgenerator.c + + + objgetitemiter.c + 1 + ..\..\..\..\components\language\micropython\py\objgetitemiter.c + + + objint.c + 1 + ..\..\..\..\components\language\micropython\py\objint.c + + + objint_longlong.c + 1 + ..\..\..\..\components\language\micropython\py\objint_longlong.c + + + objint_mpz.c + 1 + ..\..\..\..\components\language\micropython\py\objint_mpz.c + + + objlist.c + 1 + ..\..\..\..\components\language\micropython\py\objlist.c + + + objmap.c + 1 + ..\..\..\..\components\language\micropython\py\objmap.c + + + objmodule.c + 1 + ..\..\..\..\components\language\micropython\py\objmodule.c + + + objnamedtuple.c + 1 + ..\..\..\..\components\language\micropython\py\objnamedtuple.c + + + objnone.c + 1 + ..\..\..\..\components\language\micropython\py\objnone.c + + + objobject.c + 1 + ..\..\..\..\components\language\micropython\py\objobject.c + + + objpolyiter.c + 1 + ..\..\..\..\components\language\micropython\py\objpolyiter.c + + + objproperty.c + 1 + ..\..\..\..\components\language\micropython\py\objproperty.c + + + objrange.c + 1 + ..\..\..\..\components\language\micropython\py\objrange.c + + + objreversed.c + 1 + ..\..\..\..\components\language\micropython\py\objreversed.c + + + objset.c + 1 + ..\..\..\..\components\language\micropython\py\objset.c + + + objsingleton.c + 1 + ..\..\..\..\components\language\micropython\py\objsingleton.c + + + objslice.c + 1 + ..\..\..\..\components\language\micropython\py\objslice.c + + + objstr.c + 1 + ..\..\..\..\components\language\micropython\py\objstr.c + + + objstringio.c + 1 + ..\..\..\..\components\language\micropython\py\objstringio.c + + + objstrunicode.c + 1 + ..\..\..\..\components\language\micropython\py\objstrunicode.c + + + objtuple.c + 1 + ..\..\..\..\components\language\micropython\py\objtuple.c + + + objtype.c + 1 + ..\..\..\..\components\language\micropython\py\objtype.c + + + objzip.c + 1 + ..\..\..\..\components\language\micropython\py\objzip.c + + + opmethods.c + 1 + ..\..\..\..\components\language\micropython\py\opmethods.c + + + pairheap.c + 1 + ..\..\..\..\components\language\micropython\py\pairheap.c + + + parse.c + 1 + ..\..\..\..\components\language\micropython\py\parse.c + + + parsenum.c + 1 + ..\..\..\..\components\language\micropython\py\parsenum.c + + + parsenumbase.c + 1 + ..\..\..\..\components\language\micropython\py\parsenumbase.c + + + persistentcode.c + 1 + ..\..\..\..\components\language\micropython\py\persistentcode.c + + + profile.c + 1 + ..\..\..\..\components\language\micropython\py\profile.c + + + pystack.c + 1 + ..\..\..\..\components\language\micropython\py\pystack.c + + + qstr.c + 1 + ..\..\..\..\components\language\micropython\py\qstr.c + + + reader.c + 1 + ..\..\..\..\components\language\micropython\py\reader.c + + + repl.c + 1 + ..\..\..\..\components\language\micropython\py\repl.c + + + ringbuf.c + 1 + ..\..\..\..\components\language\micropython\py\ringbuf.c + + + runtime.c + 1 + ..\..\..\..\components\language\micropython\py\runtime.c + + + runtime_utils.c + 1 + ..\..\..\..\components\language\micropython\py\runtime_utils.c + + + scheduler.c + 1 + ..\..\..\..\components\language\micropython\py\scheduler.c + + + scope.c + 1 + ..\..\..\..\components\language\micropython\py\scope.c + + + sequence.c + 1 + ..\..\..\..\components\language\micropython\py\sequence.c + + + showbc.c + 1 + ..\..\..\..\components\language\micropython\py\showbc.c + + + smallint.c + 1 + ..\..\..\..\components\language\micropython\py\smallint.c + + + stackctrl.c + 1 + ..\..\..\..\components\language\micropython\py\stackctrl.c + + + stream.c + 1 + ..\..\..\..\components\language\micropython\py\stream.c + + + unicode.c + 1 + ..\..\..\..\components\language\micropython\py\unicode.c + + + vm.c + 1 + ..\..\..\..\components\language\micropython\py\vm.c + + + vstr.c + 1 + ..\..\..\..\components\language\micropython\py\vstr.c + + + warning.c + 1 + ..\..\..\..\components\language\micropython\py\warning.c + + + + + micropython/shared + + + readline.c + 1 + ..\..\..\..\components\language\micropython\shared\readline\readline.c + + + pyexec.c + 1 + ..\..\..\..\components\language\micropython\shared\runtime\pyexec.c + + + sys_stdio_mphal.c + 1 + ..\..\..\..\components\language\micropython\shared\runtime\sys_stdio_mphal.c + + + interrupt_char.c + 1 + ..\..\..\..\components\language\micropython\shared\runtime\interrupt_char.c + + + stdout_helpers.c + 1 + ..\..\..\..\components\language\micropython\shared\runtime\stdout_helpers.c + + + + + micropython/extmod + + + utime_mphal.c + 1 + ..\..\..\..\components\language\micropython\extmod\utime_mphal.c + + + machine_signal.c + 1 + ..\..\..\..\components\language\micropython\extmod\machine_signal.c + + + virtpin.c + 1 + ..\..\..\..\components\language\micropython\extmod\virtpin.c + + + machine_mem.c + 1 + ..\..\..\..\components\language\micropython\extmod\machine_mem.c + + + + + micropython/port + + + help.c + 1 + ..\..\..\..\components\language\micropython\port\help.c + + + mphalport.c + 1 + ..\..\..\..\components\language\micropython\port\mphalport.c + + + mpmain.c + 1 + ..\..\..\..\components\language\micropython\port\mpmain.c + + + mpthreadport.c + 1 + ..\..\..\..\components\language\micropython\port\mpthreadport.c + + + machine_hw_spi.c + 1 + ..\..\..\..\components\language\micropython\port\modules\machine_hw_spi.c + + + machine_pin.c + 1 + ..\..\..\..\components\language\micropython\port\modules\machine_pin.c + + + machine_timer.c + 1 + ..\..\..\..\components\language\micropython\port\modules\machine_timer.c + + + machine_uart.c + 1 + ..\..\..\..\components\language\micropython\port\modules\machine_uart.c + + + modesp8266.c + 1 + ..\..\..\..\components\language\micropython\port\modules\modesp8266.c + + + modmachine.c + 1 + ..\..\..\..\components\language\micropython\port\modules\modmachine.c + + + modutime.c + 1 + ..\..\..\..\components\language\micropython\port\modules\modutime.c + + + vfs_tos.c + 1 + ..\..\..\..\components\language\micropython\port\modules\vfs_tos.c + + + vfs_tos_file.c + 1 + ..\..\..\..\components\language\micropython\port\modules\vfs_tos_file.c + + + mphalboard.c + 1 + .\board\mphalboard.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + +
diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/README.md b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/README.md new file mode 100644 index 00000000..a4fed7df --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/README.md @@ -0,0 +1,379 @@ +# 如何使用 TencentOS-tiny 上移植的 MicroPython 组件 + +## 1 基础Keil工程 + +### 1.1 源代码 + +* micropython/py 组中添加 + * components/language/micropython/py 目录下的 *.c 文件 + +* micropython/shared 组中添加: + * components/language/micropython/shared/readline 目录下的 readline.c 文件 + * components/language/micropython/shared/runtime 目录下的 pyexec.c, stdout_helpers.c, sys_stdio_mphal.c, interrupt_char.c 文件 + +* micropython/extmod 组中添加: + * components/language/micropython/extmod 目录下的 utime_mphal.c, machine_signal.c, virtpin.c, machine_mem.c 文件 + +* micropython/port 组中添加: + * components/language/micropython/port 目录下的 *.c 文件 + * components/language/micropython/port/modules 目录下的 *.c 文件 + * 工程目录中 board/ 目录下的 mphalboard.c 文件 + +* hal 组中添加: + * 工程目录下 board/hal/ 目录下的 *.c 文件 + +* examples 组中添加: + * examples/micropython_demo/micropython_demo.c文件 + +### 1.2 头文件 + +在工程配置界面 C/C++ 页面中的 Include Paths 中添加下列目录: + +![include_paths](./imgs/include_paths.png) + +* 添加 examples/micropython_demo +* 添加 components/language/micropython +* 添加 components/language/micropython/port +* 添加 components/language/micropython/port/modules +* 添加工程目录 +* 添加工程目录下的 board 目录 +* 添加工程目录下的 board/hal 目录 + +### 1.3 其他选项 + +在工程配置界面的 C/C++ 页面下勾选 GNU extensions 选项,并在 Define 中添加 `USE_MICROPYTHON`。 + +![other_configuration](./imgs/other_configuration.png) + +### 1.4 编译脚本 + +MicroPython 采用了字符串驻留(String interning)技术节省 ROM 和 RAM 空间,在工程编译前需要先生成内部字符串 QSTR(uniQue STRing)。本工程中采用 Makefile 搜索代码中所有需要预先生成的 QSTR,然后在工程目录下的 genhdr 目录中生成 qstrdefs.generated.h 等文件。关于QSTR的更详细信息,可以在[官方文档](https://docs.micropython.org/en/latest/develop/qstr.html)中获取。 + +在工程配置界面 User 页面下的 Before Build/Rebuild 中添加以下两个命令: + +```shell +cmd.exe /C cd $P..\..\..\..\components\language\micropython\port & make clean-build V=1 +``` + +```shell +cmd.exe /C cd $P..\..\..\..\components\language\micropython\port & make genhdr V=1 PYTHON=python PORT_BOARD_DIR=$Pboard TARGET_GENHDR_DIR=$Pgenhdr +``` + +![before_build_command](./imgs/before_build_command.png) + +该命令的作用是生成工程目录下的 genhdr 目录中的头文件,这些头文件通常只有在修改配置之后才需要重新生成,因此**在不修改配置的情况下,不需要勾选这两个命令**。 + +> 使用前请确保安装了make等unix工具,gcc工具链以及Python3,并将它们加入到系统环境变量中。如果没有安装,gcc工具链和unix命令行工具可以在MinGW中获取。访问[MinGW官方网站](https://www.mingw-w64.org/)和[Python官方网站](https://www.python.org/)分别可以获取MinGW和Python的相关信息。 + +第二条命令中指定了多个变量的值,这些变量的含义分别是: + +* **PYTHON**:表示命令行可以使用的python命令,根据当前环境中的python命令修改 +* PORT_BOARD_DIR:表示与开发板相关的代码目录,该目录下至少需要包含mpconfigboard.h 文件和 mphalboard.h 文件 +* TARGET_GENHDR_DIR:表示生成的头文件所在的代码目录 + +### 1.5 外部Flash扩展 + +> 该功能目前只能在小熊派开发板上使用 + +MicroPython对ROM的需求量较大,上述基础Keil工程编译后需要占用239.70kB的ROM空间,对于包括ROM空间较少的开发板(比如:小熊派开发板)不太友好,为了能够在这样的开发板上运行更加完整的MicroPython功能,可以利用开发板的外部Flash对ROM空间进行扩展。 + +1. micropython_extra_demo 工程目录下包含了小熊派开发板的Keil外部Flash下载算法文件 BearPi_W25Q64JV.FLM,将该文件拷贝到 **/ARM/Flash** 目录下。 + +2. 在Keil工程中配置外部 ROM,并选择 Flash 下载算法 + + * 在工程配置的 Target 页面中,添加一个 ROM 区域,起始地址为 **0x90000000**,区域大小为 **0x800000**(ROM区域大小取决于外部 Flash 芯片容量) + + ![external_flash_1](./imgs/external_flash_1.png) + + * 在 Debug 页面中,点击右上角的 Settings,选择 Flash Download 选项卡,进入下图界面 + + ![external_flash_2](./imgs/external_flash_2.png) + + * 添加描述为**“BearPi W25Q84JV 8MB Flash”**的 Flash 下载算法,并将右上角的 Size 调整到**0x8000**。 + +3. 将特定文件或者组的存储位置改到外部 ROM 中。 + + ![external_flash_3](./imgs/external_flash_3.png) + +4. 添加 W25Q64JV 的驱动代码,启用内存映射模式。(在 MicroPython 的工程中,只需要启用第二节 “[功能配置和扩展](#2-功能配置和扩展)” 中的`MP_USING_QSPI_FLASH`宏并添加相应文件即可) + +> 中断相关的代码以及内存映射模式启动前就需要执行的代码,不能放在外部 Flash 中。推荐将 MicroPython 相关的代码(除了移植的代码)都放在外部 Flash 中。 + +## 2 功能配置和扩展 + +与开发板相关的配置文件主要包括 mpconfigboard.h 和 mphalboard.h/c,其中 mpconfigboard.h 包含对 MicroPython 的配置,mphalboard.h/c 包含开发板特有的 MicroPython 函数的部分功能实现。 + +mpconfigboard.h 主要由宏定义构成,可以使用的定义以及对应的含义如下表: + +| 名称 | 含义 | 取值范围 | 说明 | +| ------------------------ | ------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------ | +| MICROPY_HW_BOARD_NAME | 开发板名称 | 字符串 | | +| MICROPY_HW_MCU_NAME | 微控制器名称 | 字符串 | | +| MICROPY_HW_UART_NUM | UART数量 | 整数 | 需要与 tos_hal 的实现一致 | +| MICROPY_HW_UART_REPL | 用于 MicroPython 交互式命令行的 UART 的编号 | 整数 | 需要与 tos_hal 的实现一致 | +| MICROPY_HW_SPI_NUM | SPI 数量 | 整数 | 需要与 tos_hal 的实现一致 | +| MICROPY_CONFIG_ROM_LEVEL | ROM 水平 | MICROPY_CONFIG_ROM_LEVEL
\_\_FEATURES | 代表 MicroPython 的功能裁剪程度,这里只列出两个典型值,其他取值需要参考 py/mpconfig.h 文件 | + +除了以上配置之外,还有一些可选的功能配置,采用定义`MP_USING_xxx`宏的形式进行功能扩展: + +| 宏定义 | 描述 | 依赖的文件/组件 | +| ------------------------------------------ | --------------------------------- | ------------------------------------------------------------ | +| MP_USING_QSPI_FLASH | 使用外部QSPI-Flash扩展内部ROM空间 | 开发板目录/BSP/Hardware/W25Qxx-QSPI/w25qxx.c,详见第一节的外部Flash扩展部分 | +| MP_USING_VFS | 启用uos模块,启用VFS功能 | tos_vfs组件,
extmod/vfs.c,
extmod/vfs_reader.c,
extmod/moduos.c | +| MP_USING_MACHINE_SPI | 在umachine库中启用SPI功能 | extmod/machine_spi.c,
drivers/bus/softspi.c, | +| MP_USING_MACHINE_I2C | 在umachine库中启用I2C功能 | extmod/machine_i2c.c | +| MP_USING_NETWORK | 启用network模块 | socket_wrapper组件,
sal_wrapper组件,
extmod/modnetwork.c,
extmod/modusocket.c,
shared/netutils/netutils.c | +| MP_USING_USELECT | 启用uselect模块 | extmod/moduselect.c | +| 以下模块在ROM_LEVEL为EXTRA的时候会默认启用 | ----- | ----- | +| MP_USING_CMATH | 启用cmath模块 | - | +| MP_USING_UASYNCIO | 启用uasyncio模块 | extmod/moduasyncio.c | +| MP_USING_UCTYPES | 启用uctypes模块 | extmod/moductypes.c | +| MP_USING_UZLIBS | 启用uzlibs模块 | extmod/moduzlibs.c | +| MP_USING_UJSON | 启用ujson模块 | extmod/modujson.c | +| MP_USING_URE | 启用ure模块 | extmod/modure.c | +| MP_USING_HEAPQ | 启用uheapq模块 | extmod/moduheapq.c | +| MP_USING_UHASHLIB | 启用uhashlib模块 | extmod/moduhashlib.c | +| MP_USING_UBINASCII | 启用ubinascii模块 | extmod/modubinascii.c | +| MP_USING_URANDOM | 启用urandom模块 | extmod/modurandom.c | +| MP_USING_FRAMEBUF | 启用framebuf模块 | extmod/modframebuf.c | + +## 3 使用MicroPython + +下载 MicroPython 固件后,可以使用支持串口功能的 shell 连接到 MicroPython 的交互式解释器(REPL)上,也可以使用 MicroPython 提供的 mpremote 工具连接到 REPL。REPL 所关联的串口由第二节 “[功能配置和扩展](#2-功能配置和扩展)” 中的 `MICROPY_HW_UART_REPL` 宏设定。 + +### 3.1 mpremote + +#### 3.1.1 使用 pip 安装 mpremote + +```shell +pip install mpremote +``` + +#### 3.1.2 使用 mpremote 可以在常规的 shell 上连接到串口 REPL + +```shell +mpremote connect +``` + +例如:连接COM14端口 + +```shell +mpremote connect COM14 +``` + +按下 ”Ctrl-]“ 可以退出REPL + +#### 3.1.3 使用 mpremote 还可以在开发板上执行本地的 python 脚本 + + ```shell +mpremote connect run + ``` + +例如:使用mpremote运行示例脚本led.py文件 + + ```shell +mpremote connect COM14 run ./led.py + ``` + +mpremote还包含其他功能,参考[官方文档]( https://docs.micropython.org/en/latest/reference/mpremote.html)了解详情。 + +### 3.2 REPL + +#### 3.2.1 help() 命令 + +进入 REPL 后,可以使用 help() 命令,查看与 MicroPython 控制命令相关的提示信息: + +help() + +其中 Ctrl-C 可以用来中断正在运行的程序,Ctrl-D 可以用来软复位,Ctrl-E 可以进入粘贴模式。 + +#### 3.2.2 help('modules') 命令 + +在交互式解释器中可以使用 help('modules') 命令查看当前可以引入的模块: + +help('modules') + +#### 3.2.3 粘贴模式 + +在正常交互模式下,输入 Ctrl-E 可以进入粘贴模式。 + +在粘贴模式下可以方便地将 python 脚本粘贴到 REPL 中。 + +> 由于输入缓冲区大小只有512B,所以比较长的脚本需要分段粘贴。 + +粘贴完成后,输入 Ctrl-D 可以退出粘贴模式,并开始执行脚本。 + +下图展示了使用粘贴模式粘贴 pin.py 脚本的情况: + +paste_mode_pin_py + +#### 3.2.4 其他功能 + +REPL还有自动缩进,自动补全以及特殊变量"_"等功能,详细内容可以参考[官方文档](https://docs.micropython.org/en/latest/reference/repl.html)。 + +### 3.3 自动执行脚本 + +对于启用文件系统的 MicroPython 工程,可以在文件系统根目录中存放 boot.py 和 main.py 脚本,这两个脚本会在 MicroPython 启动时依次执行。 + +## 4 示例工程和示例脚本说明 + +### 4.1 示例工程 + +项目针对小熊派开发板提供了两个不同的示例工程: + +* micropython_basic_demo 是一个基础版的 MicroPython 工程,在第一节 ”[基础Keil工程](#1-基础Keil工程)“ 中给出了比较详细的该工程的创建流程。该工程包含了 MicroPython 的REPL功能、_thread线程模块功能以及基本的 machine 模块功能。 +* micropython_extra_demo 是在 micropython_basic_demo 工程的基础上,参考第二节 “[功能配置和扩展](#2-功能配置和扩展)” 中的内容进行配置得到的扩展版的 MicroPython 工程。由于小熊派开发板的 ROM 不足以支持所有的 MicroPython 功能,该工程内使用了外部 Flash 扩展 ROM 容量。该工程在 micropython_basic_demo 工程的基础上,添加了 MicroPython 的一系列扩展模块,还添加了uos 模块以及 network 模块等移植模块。 + +### 4.2 示例脚本 + +在工程目录下的 scripts 目录中给出了三个示例脚本文件: + +* pin.py:脚本展示了 umachine 模块和 utime 模块的使用方式 + + ```python + import umachine as machine + import utime as time + + running = True + + def key1_irq_callback(pin): + if pin.value() == 0: + print('Key1 is pressed') + else: + print('Key1 is released') + + def key2_irq_callback(pin): + global running + running = False + + if __name__ == '__main__': + + led = machine.Pin("LED", mode=machine.Pin.OUT) + key1 = machine.Pin("KEY1", mode=machine.Pin.IN_PULLUP) + key1.irq(trigger=machine.Pin.IRQ_RISING|machine.Pin.IRQ_FALLING, handler=key1_irq_callback) + key2 = machine.Pin("KEY2", mode=machine.Pin.IN_PULLUP) + key2.irq(trigger=machine.Pin.IRQ_FALLING, handler=key2_irq_callback) + + while running: + led.on() + time.sleep(0.5) + led.off() + time.sleep(0.5) + ``` + + 脚本运行现象是:LED每过0.5s亮灭变化一次;按下按键1,打印一行文本 ”key1 is pressed“,释放按键1,打印一行文本 ”key1 is released“;按下按键2,LED不再闪烁,脚本退出。 + +* thread.py:脚本展示了 _thread 模块的使用方法 + + ```python + import _thread + + lock = _thread.allocate_lock() + n_thread = 4 + n_finished = 0 + + def thread_entry(no): + print(no) + with lock: + global n_finished + n_finished += 1 + + if __name__ == '__main__': + for i in range(n_thread): + _thread.start_new_thread(thread_entry, (i,)) + + while n_finished < n_thread: + pass + print("done") + ``` + + 脚本运行现象是:创建四个线程,序号分别为0~3,每个线程打印自己的序号后退出。 + +* os.py:该脚本展示了 uos 模块中的文件操作和目录操作 + + > 该脚本只有在启用 VFS 的前提下才能运行 + + ```python + import uos as os + + # test mkdir() + print('{:-^40}'.format('test mkdir')) + print(os.listdir()) + os.mkdir('test_dir') + print(os.listdir()) + + # test file open() and write() + print('{:-^40}'.format('test write')) + f = open('test_dir/test_file', 'w') + f.write("Hello TencentOS-tiny\n") + print("Hello MicroPython", file=f) + f.close() + print(os.listdir('test_dir')) + + # test file open() and read() + print('{:-^40}'.format('test read')) + f = open('test_dir/test_file', 'r') + print(f.readlines()) + f.close() + + # test 'with' statement and iterator + print('{:-^40}'.format('test with statement')) + with open('test_dir/test_file', 'r') as file: + for line in file: + print(line) + + # test rename() + print('{:-^40}'.format('test rename')) + os.rename('test_dir', 'test_dir2') + print(os.listdir()) + print(os.listdir('test_dir2')) + + # test unlink() + print('{:-^40}'.format('test unlink')) + os.unlink('test_dir2/test_file') + print(os.listdir('test_dir2')) + os.unlink('test_dir2') + print(os.listdir()) + ``` + + 脚本运行现象是:输出以下内容 + + ``` + ---------------test mkdir--------------- + ['System Volume Information'] + ['test_dir', 'System Volume Information'] + ---------------test write--------------- + ['test_file'] + ---------------test read---------------- + ['Hello TencentOS-tiny\n', 'Hello MicroPython\n'] + ----------test with statement----------- + Hello TencentOS-tiny + + Hello MicroPython + + --------------test rename--------------- + ['System Volume Information', 'test_dir2'] + ['test_file'] + --------------test unlink--------------- + [] +['System Volume Information'] + ``` + + + + + + + + + + + + + + + + + + + diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_pin.c b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_pin.c new file mode 100644 index 00000000..1090378b --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_pin.c @@ -0,0 +1,273 @@ +#include "tos_k.h" +#include "mp_tos_hal_pin.h" +#include "gpio.h" + +#define ST_EXTI_VECTOR_SIZE 16 + +#define ST_PORT_NUM(port) ((uint8_t)((port) >> 4) & 0x0F) +#define ST_PIN_NUM(port) ((uint8_t)((port) & 0x0F)) + +__STATIC__ hal_pin_cb_t hal_pin_irq_handler[ST_EXTI_VECTOR_SIZE]; +__STATIC__ void *hal_pin_irq_handler_arg[ST_EXTI_VECTOR_SIZE]; +__STATIC__ GPIO_TypeDef *hal_pin_irq_gpio[ST_EXTI_VECTOR_SIZE]; + +__STATIC__ const uint8_t nvic_irq_channel[ST_EXTI_VECTOR_SIZE] = { + EXTI0_IRQn, EXTI1_IRQn, EXTI2_IRQn, EXTI3_IRQn, + EXTI4_IRQn, EXTI9_5_IRQn, EXTI9_5_IRQn, EXTI9_5_IRQn, + EXTI9_5_IRQn, EXTI9_5_IRQn, EXTI15_10_IRQn, EXTI15_10_IRQn, + EXTI15_10_IRQn, EXTI15_10_IRQn, EXTI15_10_IRQn, EXTI15_10_IRQn, +}; + +__STATIC__ int mask2no(uint32_t mask) { + for (int i = 0; i < 32; i++) { + if ((1U << i) == mask) { + return i; + } + } + return -1; +} + +__API__ int tos_hal_pin_init(hal_pin_t *pin, hal_pin_port_t port, hal_pin_mode_t mode) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + GPIO_InitTypeDef gpio_init; + + if (!pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)(GPIOA_BASE + ST_PORT_NUM(port) * 0x0400UL); + gpio_pin = 1UL << ST_PIN_NUM(port); + + gpio_init.Pin = gpio_pin; + gpio_init.Speed = GPIO_SPEED_FREQ_HIGH; + switch (mode) { + case HAL_PIN_MODE_OUTPUT: + gpio_init.Mode = GPIO_MODE_OUTPUT_PP; + gpio_init.Pull = GPIO_NOPULL; + break; + case HAL_PIN_MODE_OUTPUT_OD: + gpio_init.Mode = GPIO_MODE_OUTPUT_OD; + gpio_init.Pull = GPIO_NOPULL; + break; + case HAL_PIN_MODE_INPUT: + gpio_init.Mode = GPIO_MODE_INPUT; + gpio_init.Pull = GPIO_NOPULL; + break; + case HAL_PIN_MODE_INPUT_PULLUP: + gpio_init.Mode = GPIO_MODE_INPUT; + gpio_init.Pull = GPIO_PULLUP; + break; + case HAL_PIN_MODE_INPUT_PULLDOWN: + gpio_init.Mode = GPIO_MODE_INPUT; + gpio_init.Pull = GPIO_PULLDOWN; + break; + default: + return -1; + } + HAL_GPIO_Init((GPIO_TypeDef *)gpiox, &gpio_init); + + pin->port = port; + pin->private_gpio = gpiox; + pin->private_pin = gpio_pin; + pin->mode = mode; + + return 0; +} + +__API__ int tos_hal_pin_irq(hal_pin_t *pin, hal_pin_irq_t irq) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + uint32_t gpio_pin_num; + GPIO_InitTypeDef gpio_init; + TOS_CPU_CPSR_ALLOC(); + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + gpio_pin_num = mask2no(gpio_pin); + if (gpio_pin_num >= ST_EXTI_VECTOR_SIZE) { + return -1; + } + + TOS_CPU_INT_DISABLE(); + if (hal_pin_irq_gpio[gpio_pin_num] != NULL && hal_pin_irq_gpio[gpio_pin_num] != gpiox) { + TOS_CPU_INT_ENABLE(); + return -1; + } + + if (irq == HAL_PIN_IRQ_NONE) { + hal_pin_irq_gpio[gpio_pin_num] = NULL; + hal_pin_irq_handler[gpio_pin_num] = NULL; + hal_pin_irq_handler_arg[gpio_pin_num] = NULL; + TOS_CPU_INT_ENABLE(); + HAL_NVIC_DisableIRQ(nvic_irq_channel[gpio_pin_num]); + } else { + hal_pin_irq_gpio[gpio_pin_num] = gpiox; + TOS_CPU_INT_ENABLE(); + gpio_init.Pin = gpio_pin; + gpio_init.Speed = GPIO_SPEED_FREQ_HIGH; + gpio_init.Mode = GPIO_MODE_IT_RISING_FALLING; + switch (irq) { + case HAL_PIN_IRQ_RISING: + gpio_init.Mode = GPIO_MODE_IT_RISING; + break; + case HAL_PIN_IRQ_FALLING: + gpio_init.Mode = GPIO_MODE_IT_FALLING; + break; + case HAL_PIN_IRQ_RISING_FALLING: + gpio_init.Mode = GPIO_MODE_IT_RISING_FALLING; + break; + } + switch (pin->mode) { + case HAL_PIN_MODE_INPUT_PULLUP: + gpio_init.Pull = GPIO_PULLUP; + break; + case HAL_PIN_MODE_INPUT_PULLDOWN: + gpio_init.Pull = GPIO_PULLDOWN; + break; + default: + gpio_init.Pull = GPIO_NOPULL; + break; + } + HAL_GPIO_Init(gpiox, &gpio_init); + HAL_NVIC_SetPriority(nvic_irq_channel[gpio_pin_num], 2, 0); + HAL_NVIC_EnableIRQ(nvic_irq_channel[gpio_pin_num]); + + pin->irq = irq; + } + + return 0; +} + +__API__ int tos_hal_pin_irq_callback(hal_pin_t *pin, hal_pin_cb_t callback, void *cb_arg) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + uint32_t gpio_pin_num; + TOS_CPU_CPSR_ALLOC(); + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + gpio_pin_num = mask2no(gpio_pin); + if (gpio_pin_num >= ST_EXTI_VECTOR_SIZE) { + return -1; + } + + TOS_CPU_INT_DISABLE(); + if (hal_pin_irq_gpio[gpio_pin_num] != NULL && hal_pin_irq_gpio[gpio_pin_num] != gpiox) { + TOS_CPU_INT_ENABLE(); + return -1; + } + hal_pin_irq_handler[gpio_pin_num] = gpiox; + hal_pin_irq_handler[gpio_pin_num] = callback; + hal_pin_irq_handler_arg[gpio_pin_num] = cb_arg; + TOS_CPU_INT_ENABLE(); + + return 0; +} + +__API__ int tos_hal_pin_write(hal_pin_t *pin, int state) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + + HAL_GPIO_WritePin(gpiox, gpio_pin, (state == 0) ? GPIO_PIN_RESET : GPIO_PIN_SET); + + return 0; +} + +__API__ int tos_hal_pin_read(hal_pin_t *pin) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + + return (HAL_GPIO_ReadPin(gpiox, gpio_pin) == GPIO_PIN_RESET) ? 0 : 1; +} + +__API__ int tos_hal_pin_deinit(hal_pin_t *pin) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + uint32_t gpio_pin_num; + TOS_CPU_CPSR_ALLOC(); + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + gpio_pin_num = mask2no(gpio_pin); + + TOS_CPU_INT_DISABLE(); + if (hal_pin_irq_gpio[gpio_pin_num] == gpiox) { + hal_pin_irq_gpio[gpio_pin_num] = NULL; + hal_pin_irq_handler[gpio_pin_num] = NULL; + hal_pin_irq_handler_arg[gpio_pin_num] = NULL; + } + TOS_CPU_INT_ENABLE(); + HAL_GPIO_DeInit(gpiox, gpio_pin); + + return 0; +} + +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +{ + uint32_t gpio_pin_num = mask2no(GPIO_Pin); + hal_pin_cb_t callback; + uint32_t cb_arg; + if (gpio_pin_num < ST_EXTI_VECTOR_SIZE) { + + callback = hal_pin_irq_handler[gpio_pin_num]; + cb_arg = hal_pin_irq_handler_arg[gpio_pin_num]; + if (callback) { + callback(cb_arg); + } + } +} + + diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_pin.h b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_pin.h new file mode 100644 index 00000000..6ac564d1 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_pin.h @@ -0,0 +1,45 @@ +#ifndef _TOS_HAL_PIN_H_ +#define _TOS_HAL_PIN_H_ + +typedef unsigned char hal_pin_port_t; + +typedef enum hal_pin_mode_en { + HAL_PIN_MODE_OUTPUT = 0, + HAL_PIN_MODE_OUTPUT_OD, + HAL_PIN_MODE_INPUT, + HAL_PIN_MODE_INPUT_PULLUP, + HAL_PIN_MODE_INPUT_PULLDOWN, +} hal_pin_mode_t; + +typedef enum hal_pin_irq_en { + HAL_PIN_IRQ_NONE = 0x00, + HAL_PIN_IRQ_RISING = 0x01, + HAL_PIN_IRQ_FALLING = 0x02, + HAL_PIN_IRQ_RISING_FALLING = 0x03, +} hal_pin_irq_t; + +typedef struct hal_pin_st { + hal_pin_port_t port; + void *private_gpio; + void *private_pin; + hal_pin_mode_t mode; + hal_pin_irq_t irq; +} hal_pin_t; + + +typedef void (*hal_pin_cb_t)(void *arg); + +__API__ int tos_hal_pin_init(hal_pin_t *pin, hal_pin_port_t port, hal_pin_mode_t mode); + +__API__ int tos_hal_pin_write(hal_pin_t *pin, int state); + +__API__ int tos_hal_pin_read(hal_pin_t *pin); + +__API__ int tos_hal_pin_mode(hal_pin_t *pin, hal_pin_mode_t mode); + +__API__ int tos_hal_pin_irq(hal_pin_t *pin, hal_pin_irq_t irq); + +__API__ int tos_hal_pin_irq_callback(hal_pin_t *pin, hal_pin_cb_t callback, void *cb_arg); + + +#endif diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_spi.c b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_spi.c new file mode 100644 index 00000000..b4f58be9 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_spi.c @@ -0,0 +1,80 @@ +#include "tos_k.h" +#include "mp_tos_hal_spi.h" +#include "stm32l4xx_hal.h" +#include "spi.h" + +__API__ int tos_hal_spi_init(hal_spi_t *spi, hal_spi_port_t port) +{ + if (!spi) { + return -1; + } + + if (port == HAL_SPI_PORT_1) { + spi->private_spi = &hspi1; + MX_SPI1_Init(); + } else if (port == HAL_SPI_PORT_2) { + spi->private_spi = &hspi2; + MX_SPI2_Init(); + } else if (port == HAL_SPI_PORT_3) { + spi->private_spi = &hspi3; + MX_SPI3_Init(); + } else { + return -1; + } + + return 0; +} + +__API__ int tos_hal_spi_transfer(hal_spi_t *spi, const uint8_t *send_buf, uint8_t *recv_buf, size_t size, uint32_t timeout) +{ + HAL_StatusTypeDef hal_status; + SPI_HandleTypeDef *spi_handle; + + if (!spi || (!send_buf && !recv_buf)) { + return -1; + } + + if (!spi->private_spi) { + return -1; + } + + spi_handle = (SPI_HandleTypeDef *)spi->private_spi; + + if (send_buf && recv_buf) { + hal_status = HAL_SPI_TransmitReceive(spi_handle, send_buf, recv_buf, size, timeout); + } else if (send_buf) { + hal_status = HAL_SPI_Transmit(spi_handle, send_buf, size, timeout); + } else if (recv_buf) { + hal_status = HAL_SPI_Receive(spi_handle, send_buf, size, timeout); + } + + if (hal_status != HAL_OK) { + return -1; + } + return 0; +} + +__API__ int tos_hal_spi_deinit(hal_spi_t *spi) +{ + HAL_StatusTypeDef hal_status; + SPI_HandleTypeDef *spi_handle; + + if (!spi) { + return -1; + } + + if (!spi->private_spi) { + return -1; + } + + spi_handle = (SPI_HandleTypeDef *)spi->private_spi; + + hal_status = HAL_SPI_DeInit(spi_handle); + HAL_SPI_MspDeInit(spi_handle); + + if (hal_status != HAL_OK) { + return -1; + } + + return 0; +} diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_spi.h b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_spi.h new file mode 100644 index 00000000..6dad4e9f --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_spi.h @@ -0,0 +1,22 @@ +#ifndef _TOS_HAL_SPI_H_ +#define _TOS_HAL_SPI_H_ + +typedef enum hal_spi_port_en { + HAL_SPI_PORT_0 = 0, + HAL_SPI_PORT_1, + HAL_SPI_PORT_2, + HAL_SPI_PORT_3, +} hal_spi_port_t; + +typedef struct hal_spi_st { + hal_spi_port_t port; + void *private_spi; +} hal_spi_t; + +__API__ int tos_hal_spi_init(hal_spi_t *spi, hal_spi_port_t port); + +__API__ int tos_hal_spi_transfer(hal_spi_t *spi, const uint8_t *send_buf, uint8_t *recv_buf, size_t size, uint32_t timeout); + +__API__ int tos_hal_spi_deinit(hal_spi_t *spi); + +#endif diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_uart.c b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_uart.c new file mode 100644 index 00000000..a86dd40d --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_uart.c @@ -0,0 +1,26 @@ +#include "tos_k.h" +#include "mp_tos_hal_uart.h" +#include "stm32l4xx_hal.h" +#include "usart.h" + +__API__ int tos_hal_uart_recv_start(hal_uart_t *uart, const uint8_t *buf, size_t size) +{ + HAL_StatusTypeDef hal_status; + UART_HandleTypeDef *uart_handle; + + if (!uart || !buf) { + return -1; + } + + if (!uart->private_uart) { + return -1; + } + + uart_handle = (UART_HandleTypeDef *)uart->private_uart; + + hal_status = HAL_UART_Receive_IT(uart_handle, (uint8_t *)buf, size); + if (hal_status != HAL_OK) { + return -1; + } + return 0; +} diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_uart.h b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_uart.h new file mode 100644 index 00000000..31b79dbf --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/hal/mp_tos_hal_uart.h @@ -0,0 +1,8 @@ +#ifndef _MP_TOS_HAL_UART_H_ +#define _MP_TOS_HAL_UART_H_ + +#include "tos_hal_uart.h" + +__API__ int tos_hal_uart_recv_start(hal_uart_t *uart, const uint8_t *buf, size_t size); + +#endif diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mpconfigboard.h b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mpconfigboard.h new file mode 100644 index 00000000..326a2eb3 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mpconfigboard.h @@ -0,0 +1,10 @@ +/* board specific config */ +#define MICROPY_HW_BOARD_NAME "BearPi" +#define MICROPY_HW_MCU_NAME "STM32F431RC" + +#define MICROPY_HW_UART_NUM 4 +#define MICROPY_HW_UART_REPL 2 +#define MICROPY_HW_SPI_NUM 4 + +/* project specific config */ +#define MICROPY_CONFIG_ROM_LEVEL (MICROPY_CONFIG_ROM_LEVEL_BASIC_FEATURES) diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mpconfigboard.mk b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mpconfigboard.mk new file mode 100644 index 00000000..e69de29b diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mphalboard.c b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mphalboard.c new file mode 100644 index 00000000..58d8f0a0 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mphalboard.c @@ -0,0 +1,109 @@ + +#include "py/mpconfig.h" +#include "py/mphal.h" +#include "py/obj.h" +#include "py/runtime.h" + +#include "modmachine.h" + +#if !(MP_GEN_HDR) +#include "tos_k.h" +#include "main.h" +#endif + +/********************** Tick *************************/ + +static uint32_t systick_get_us() { + // get systick value + uint32_t counter = SysTick->VAL; + uint32_t load = SysTick->LOAD; + + // convert from decrementing to incrementing + counter = load - counter; + + return (counter * 1000) / (load + 1); +} + +mp_uint_t mp_hal_ticks_us(void) { + uint32_t ms = tos_tick2millisec(tos_systick_get()); + uint32_t us = systick_get_us(); + return ms * 1000 + us; +} + +void mp_hal_delay_us(mp_uint_t usec) { + mp_uint_t ms = usec / 1000; + mp_uint_t us = usec % 1000; + if (ms > 0) + mp_hal_delay_ms(ms); + mp_uint_t start = mp_hal_ticks_us(); + while (mp_hal_ticks_us() - start < us) { + } +} + +/********************** GPIO *************************/ + +#define ST_PIN(port_num, pin_num) ((uint8_t)(((port_num) << 4) & 0xF0) | ((pin_num) & 0x0F)) + +STATIC const mp_rom_map_elem_t machine_pins_locals_dict_table[] = { + + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_INT(ST_PIN(0, 0)) }, + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_INT(ST_PIN(0, 1)) }, + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_INT(ST_PIN(0, 2)) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_INT(ST_PIN(0, 3)) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_INT(ST_PIN(0, 4)) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_INT(ST_PIN(0, 5)) }, + { MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_INT(ST_PIN(0, 6)) }, + { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_INT(ST_PIN(0, 7)) }, + { MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_INT(ST_PIN(0, 8)) }, + { MP_ROM_QSTR(MP_QSTR_A9), MP_ROM_INT(ST_PIN(0, 9)) }, + { MP_ROM_QSTR(MP_QSTR_A10), MP_ROM_INT(ST_PIN(0, 10)) }, + { MP_ROM_QSTR(MP_QSTR_A11), MP_ROM_INT(ST_PIN(0, 11)) }, + { MP_ROM_QSTR(MP_QSTR_A12), MP_ROM_INT(ST_PIN(0, 12)) }, + { MP_ROM_QSTR(MP_QSTR_A13), MP_ROM_INT(ST_PIN(0, 13)) }, + { MP_ROM_QSTR(MP_QSTR_A14), MP_ROM_INT(ST_PIN(0, 14)) }, + { MP_ROM_QSTR(MP_QSTR_A15), MP_ROM_INT(ST_PIN(0, 15)) }, + + { MP_ROM_QSTR(MP_QSTR_B0), MP_ROM_INT(ST_PIN(1, 0)) }, + { MP_ROM_QSTR(MP_QSTR_B1), MP_ROM_INT(ST_PIN(1, 1)) }, + { MP_ROM_QSTR(MP_QSTR_B2), MP_ROM_INT(ST_PIN(1, 2)) }, + { MP_ROM_QSTR(MP_QSTR_B3), MP_ROM_INT(ST_PIN(1, 3)) }, + { MP_ROM_QSTR(MP_QSTR_B4), MP_ROM_INT(ST_PIN(1, 4)) }, + { MP_ROM_QSTR(MP_QSTR_B5), MP_ROM_INT(ST_PIN(1, 5)) }, + { MP_ROM_QSTR(MP_QSTR_B6), MP_ROM_INT(ST_PIN(1, 6)) }, + { MP_ROM_QSTR(MP_QSTR_B7), MP_ROM_INT(ST_PIN(1, 7)) }, + { MP_ROM_QSTR(MP_QSTR_B8), MP_ROM_INT(ST_PIN(1, 8)) }, + { MP_ROM_QSTR(MP_QSTR_B9), MP_ROM_INT(ST_PIN(1, 9)) }, + { MP_ROM_QSTR(MP_QSTR_B10), MP_ROM_INT(ST_PIN(1, 10)) }, + { MP_ROM_QSTR(MP_QSTR_B11), MP_ROM_INT(ST_PIN(1, 11)) }, + { MP_ROM_QSTR(MP_QSTR_B12), MP_ROM_INT(ST_PIN(1, 12)) }, + { MP_ROM_QSTR(MP_QSTR_B13), MP_ROM_INT(ST_PIN(1, 13)) }, + { MP_ROM_QSTR(MP_QSTR_B14), MP_ROM_INT(ST_PIN(1, 14)) }, + { MP_ROM_QSTR(MP_QSTR_B15), MP_ROM_INT(ST_PIN(1, 15)) }, + + { MP_ROM_QSTR(MP_QSTR_C0), MP_ROM_INT(ST_PIN(2, 0)) }, + { MP_ROM_QSTR(MP_QSTR_C1), MP_ROM_INT(ST_PIN(2, 1)) }, + { MP_ROM_QSTR(MP_QSTR_C2), MP_ROM_INT(ST_PIN(2, 2)) }, + { MP_ROM_QSTR(MP_QSTR_C3), MP_ROM_INT(ST_PIN(2, 3)) }, + { MP_ROM_QSTR(MP_QSTR_C4), MP_ROM_INT(ST_PIN(2, 4)) }, + { MP_ROM_QSTR(MP_QSTR_C5), MP_ROM_INT(ST_PIN(2, 5)) }, + { MP_ROM_QSTR(MP_QSTR_C6), MP_ROM_INT(ST_PIN(2, 6)) }, + { MP_ROM_QSTR(MP_QSTR_C7), MP_ROM_INT(ST_PIN(2, 7)) }, + { MP_ROM_QSTR(MP_QSTR_C8), MP_ROM_INT(ST_PIN(2, 8)) }, + { MP_ROM_QSTR(MP_QSTR_C9), MP_ROM_INT(ST_PIN(2, 9)) }, + { MP_ROM_QSTR(MP_QSTR_C10), MP_ROM_INT(ST_PIN(2, 10)) }, + { MP_ROM_QSTR(MP_QSTR_C11), MP_ROM_INT(ST_PIN(2, 11)) }, + { MP_ROM_QSTR(MP_QSTR_C12), MP_ROM_INT(ST_PIN(2, 12)) }, + { MP_ROM_QSTR(MP_QSTR_C13), MP_ROM_INT(ST_PIN(2, 13)) }, + { MP_ROM_QSTR(MP_QSTR_C14), MP_ROM_INT(ST_PIN(2, 14)) }, + { MP_ROM_QSTR(MP_QSTR_C15), MP_ROM_INT(ST_PIN(2, 15)) }, + + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_INT(ST_PIN(3, 2)) }, + + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_INT(ST_PIN(2, 13)) }, // C13 + { MP_ROM_QSTR(MP_QSTR_KEY1), MP_ROM_INT(ST_PIN(1, 2)) }, // B2 + { MP_ROM_QSTR(MP_QSTR_KEY2), MP_ROM_INT(ST_PIN(1, 3)) }, // B3 + +}; +MP_DEFINE_CONST_DICT(machine_pins_locals_dict, machine_pins_locals_dict_table); + + diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mphalboard.h b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mphalboard.h new file mode 100644 index 00000000..bebb5f6d --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/board/mphalboard.h @@ -0,0 +1,11 @@ +#ifndef _MPHALBOARD_H_ +#define _MPHALBOARD_H_ + +#include "py/obj.h" + +extern mp_uint_t mp_hal_ticks_us(void); +extern void mp_hal_delay_us(mp_uint_t usec); + +extern const mp_obj_dict_t machine_pins_locals_dict; + +#endif /* _MPHALBOARD_H_ */ diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/moduledefs.h b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/moduledefs.h new file mode 100644 index 00000000..b8a66465 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/moduledefs.h @@ -0,0 +1,65 @@ +// Automatically generated by makemoduledefs.py. + +extern const struct _mp_obj_module_t mp_module___main__; +#undef MODULE_DEF_MP_QSTR___MAIN__ +#define MODULE_DEF_MP_QSTR___MAIN__ { MP_ROM_QSTR(MP_QSTR___main__), MP_ROM_PTR(&mp_module___main__) }, + +extern const struct _mp_obj_module_t mp_module_thread; +#undef MODULE_DEF_MP_QSTR__THREAD +#define MODULE_DEF_MP_QSTR__THREAD { MP_ROM_QSTR(MP_QSTR__thread), MP_ROM_PTR(&mp_module_thread) }, + +extern const struct _mp_obj_module_t mp_module_builtins; +#undef MODULE_DEF_MP_QSTR_BUILTINS +#define MODULE_DEF_MP_QSTR_BUILTINS { MP_ROM_QSTR(MP_QSTR_builtins), MP_ROM_PTR(&mp_module_builtins) }, + +extern const struct _mp_obj_module_t mp_module_gc; +#undef MODULE_DEF_MP_QSTR_GC +#define MODULE_DEF_MP_QSTR_GC { MP_ROM_QSTR(MP_QSTR_gc), MP_ROM_PTR(&mp_module_gc) }, + +extern const struct _mp_obj_module_t mp_module_math; +#undef MODULE_DEF_MP_QSTR_MATH +#define MODULE_DEF_MP_QSTR_MATH { MP_ROM_QSTR(MP_QSTR_math), MP_ROM_PTR(&mp_module_math) }, + +extern const struct _mp_obj_module_t mp_module_micropython; +#undef MODULE_DEF_MP_QSTR_MICROPYTHON +#define MODULE_DEF_MP_QSTR_MICROPYTHON { MP_ROM_QSTR(MP_QSTR_micropython), MP_ROM_PTR(&mp_module_micropython) }, + +extern const struct _mp_obj_module_t mp_module_uarray; +#undef MODULE_DEF_MP_QSTR_UARRAY +#define MODULE_DEF_MP_QSTR_UARRAY { MP_ROM_QSTR(MP_QSTR_uarray), MP_ROM_PTR(&mp_module_uarray) }, + +extern const struct _mp_obj_module_t mp_module_collections; +#undef MODULE_DEF_MP_QSTR_UCOLLECTIONS +#define MODULE_DEF_MP_QSTR_UCOLLECTIONS { MP_ROM_QSTR(MP_QSTR_ucollections), MP_ROM_PTR(&mp_module_collections) }, + +extern const struct _mp_obj_module_t mp_module_machine; +#undef MODULE_DEF_MP_QSTR_UMACHINE +#define MODULE_DEF_MP_QSTR_UMACHINE { MP_ROM_QSTR(MP_QSTR_umachine), MP_ROM_PTR(&mp_module_machine) }, + +extern const struct _mp_obj_module_t mp_module_ustruct; +#undef MODULE_DEF_MP_QSTR_USTRUCT +#define MODULE_DEF_MP_QSTR_USTRUCT { MP_ROM_QSTR(MP_QSTR_ustruct), MP_ROM_PTR(&mp_module_ustruct) }, + +extern const struct _mp_obj_module_t mp_module_sys; +#undef MODULE_DEF_MP_QSTR_USYS +#define MODULE_DEF_MP_QSTR_USYS { MP_ROM_QSTR(MP_QSTR_usys), MP_ROM_PTR(&mp_module_sys) }, + +extern const struct _mp_obj_module_t mp_module_utime; +#undef MODULE_DEF_MP_QSTR_UTIME +#define MODULE_DEF_MP_QSTR_UTIME { MP_ROM_QSTR(MP_QSTR_utime), MP_ROM_PTR(&mp_module_utime) }, + + +#define MICROPY_REGISTERED_MODULES \ + MODULE_DEF_MP_QSTR_BUILTINS \ + MODULE_DEF_MP_QSTR_GC \ + MODULE_DEF_MP_QSTR_MATH \ + MODULE_DEF_MP_QSTR_MICROPYTHON \ + MODULE_DEF_MP_QSTR_UARRAY \ + MODULE_DEF_MP_QSTR_UCOLLECTIONS \ + MODULE_DEF_MP_QSTR_UMACHINE \ + MODULE_DEF_MP_QSTR_USTRUCT \ + MODULE_DEF_MP_QSTR_USYS \ + MODULE_DEF_MP_QSTR_UTIME \ + MODULE_DEF_MP_QSTR__THREAD \ + MODULE_DEF_MP_QSTR___MAIN__ \ +// MICROPY_REGISTERED_MODULES diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/mpversion.h b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/mpversion.h new file mode 100644 index 00000000..22f31f30 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/mpversion.h @@ -0,0 +1,4 @@ +// This file was generated by py/makeversionhdr.py +#define MICROPY_GIT_TAG "v2.5.0-74-g467a6d7d-dirty" +#define MICROPY_GIT_HASH "467a6d7d-dirty" +#define MICROPY_BUILD_DATE "2022-09-28" diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/qstrdefs.generated.h b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/qstrdefs.generated.h new file mode 100644 index 00000000..18249bac --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/genhdr/qstrdefs.generated.h @@ -0,0 +1,436 @@ +// This file was automatically generated by makeqstrdata.py + +QDEF(MP_QSTRnull, 0, 0, "") +QDEF(MP_QSTR_, 5381, 0, "") +QDEF(MP_QSTR___dir__, 36730, 7, "__dir__") +QDEF(MP_QSTR__0x0a_, 46511, 1, "\x0a") +QDEF(MP_QSTR__space_, 46469, 1, " ") +QDEF(MP_QSTR__star_, 46479, 1, "*") +QDEF(MP_QSTR__slash_, 46474, 1, "/") +QDEF(MP_QSTR__lt_module_gt_, 38077, 8, "") +QDEF(MP_QSTR__, 46586, 1, "_") +QDEF(MP_QSTR___call__, 63911, 8, "__call__") +QDEF(MP_QSTR___class__, 50475, 9, "__class__") +QDEF(MP_QSTR___delitem__, 13821, 11, "__delitem__") +QDEF(MP_QSTR___enter__, 47725, 9, "__enter__") +QDEF(MP_QSTR___exit__, 63557, 8, "__exit__") +QDEF(MP_QSTR___getattr__, 63552, 11, "__getattr__") +QDEF(MP_QSTR___getitem__, 14630, 11, "__getitem__") +QDEF(MP_QSTR___hash__, 51447, 8, "__hash__") +QDEF(MP_QSTR___init__, 42335, 8, "__init__") +QDEF(MP_QSTR___int__, 6934, 7, "__int__") +QDEF(MP_QSTR___iter__, 13007, 8, "__iter__") +QDEF(MP_QSTR___len__, 45282, 7, "__len__") +QDEF(MP_QSTR___main__, 5006, 8, "__main__") +QDEF(MP_QSTR___module__, 12543, 10, "__module__") +QDEF(MP_QSTR___name__, 14562, 8, "__name__") +QDEF(MP_QSTR___new__, 5497, 7, "__new__") +QDEF(MP_QSTR___next__, 29442, 8, "__next__") +QDEF(MP_QSTR___qualname__, 107, 12, "__qualname__") +QDEF(MP_QSTR___repr__, 2832, 8, "__repr__") +QDEF(MP_QSTR___setitem__, 15922, 11, "__setitem__") +QDEF(MP_QSTR___str__, 52688, 7, "__str__") +QDEF(MP_QSTR_ArithmeticError, 35885, 15, "ArithmeticError") +QDEF(MP_QSTR_AssertionError, 23191, 14, "AssertionError") +QDEF(MP_QSTR_AttributeError, 56865, 14, "AttributeError") +QDEF(MP_QSTR_BaseException, 37383, 13, "BaseException") +QDEF(MP_QSTR_EOFError, 49041, 8, "EOFError") +QDEF(MP_QSTR_Ellipsis, 57584, 8, "Ellipsis") +QDEF(MP_QSTR_Exception, 10738, 9, "Exception") +QDEF(MP_QSTR_GeneratorExit, 25110, 13, "GeneratorExit") +QDEF(MP_QSTR_ImportError, 39968, 11, "ImportError") +QDEF(MP_QSTR_IndentationError, 8284, 16, "IndentationError") +QDEF(MP_QSTR_IndexError, 44419, 10, "IndexError") +QDEF(MP_QSTR_KeyError, 234, 8, "KeyError") +QDEF(MP_QSTR_KeyboardInterrupt, 58031, 17, "KeyboardInterrupt") +QDEF(MP_QSTR_LookupError, 27135, 11, "LookupError") +QDEF(MP_QSTR_MemoryError, 33756, 11, "MemoryError") +QDEF(MP_QSTR_NameError, 11706, 9, "NameError") +QDEF(MP_QSTR_NoneType, 26647, 8, "NoneType") +QDEF(MP_QSTR_NotImplementedError, 39110, 19, "NotImplementedError") +QDEF(MP_QSTR_OSError, 26017, 7, "OSError") +QDEF(MP_QSTR_OverflowError, 57729, 13, "OverflowError") +QDEF(MP_QSTR_RuntimeError, 61793, 12, "RuntimeError") +QDEF(MP_QSTR_StopIteration, 7402, 13, "StopIteration") +QDEF(MP_QSTR_SyntaxError, 36756, 11, "SyntaxError") +QDEF(MP_QSTR_SystemExit, 65312, 10, "SystemExit") +QDEF(MP_QSTR_TypeError, 38437, 9, "TypeError") +QDEF(MP_QSTR_ValueError, 34710, 10, "ValueError") +QDEF(MP_QSTR_ZeroDivisionError, 10166, 17, "ZeroDivisionError") +QDEF(MP_QSTR_abs, 12949, 3, "abs") +QDEF(MP_QSTR_all, 13124, 3, "all") +QDEF(MP_QSTR_any, 13075, 3, "any") +QDEF(MP_QSTR_append, 38763, 6, "append") +QDEF(MP_QSTR_args, 50882, 4, "args") +QDEF(MP_QSTR_bool, 15595, 4, "bool") +QDEF(MP_QSTR_builtins, 12791, 8, "builtins") +QDEF(MP_QSTR_bytearray, 41846, 9, "bytearray") +QDEF(MP_QSTR_bytecode, 32034, 8, "bytecode") +QDEF(MP_QSTR_bytes, 45660, 5, "bytes") +QDEF(MP_QSTR_callable, 28685, 8, "callable") +QDEF(MP_QSTR_chr, 19676, 3, "chr") +QDEF(MP_QSTR_classmethod, 36020, 11, "classmethod") +QDEF(MP_QSTR_clear, 41084, 5, "clear") +QDEF(MP_QSTR_close, 26419, 5, "close") +QDEF(MP_QSTR_const, 65472, 5, "const") +QDEF(MP_QSTR_copy, 56288, 4, "copy") +QDEF(MP_QSTR_count, 19878, 5, "count") +QDEF(MP_QSTR_dict, 64575, 4, "dict") +QDEF(MP_QSTR_dir, 7930, 3, "dir") +QDEF(MP_QSTR_divmod, 1208, 6, "divmod") +QDEF(MP_QSTR_end, 8970, 3, "end") +QDEF(MP_QSTR_endswith, 41755, 8, "endswith") +QDEF(MP_QSTR_eval, 42651, 4, "eval") +QDEF(MP_QSTR_exec, 49182, 4, "exec") +QDEF(MP_QSTR_extend, 59491, 6, "extend") +QDEF(MP_QSTR_find, 13312, 4, "find") +QDEF(MP_QSTR_format, 13094, 6, "format") +QDEF(MP_QSTR_from_bytes, 29749, 10, "from_bytes") +QDEF(MP_QSTR_get, 15155, 3, "get") +QDEF(MP_QSTR_getattr, 6080, 7, "getattr") +QDEF(MP_QSTR_globals, 18845, 7, "globals") +QDEF(MP_QSTR_hasattr, 45196, 7, "hasattr") +QDEF(MP_QSTR_hash, 28855, 4, "hash") +QDEF(MP_QSTR_id, 28456, 2, "id") +QDEF(MP_QSTR_index, 10363, 5, "index") +QDEF(MP_QSTR_insert, 21522, 6, "insert") +QDEF(MP_QSTR_int, 21270, 3, "int") +QDEF(MP_QSTR_isalpha, 14315, 7, "isalpha") +QDEF(MP_QSTR_isdigit, 39592, 7, "isdigit") +QDEF(MP_QSTR_isinstance, 48822, 10, "isinstance") +QDEF(MP_QSTR_islower, 33020, 7, "islower") +QDEF(MP_QSTR_isspace, 63579, 7, "isspace") +QDEF(MP_QSTR_issubclass, 32693, 10, "issubclass") +QDEF(MP_QSTR_isupper, 42973, 7, "isupper") +QDEF(MP_QSTR_items, 21475, 5, "items") +QDEF(MP_QSTR_iter, 8591, 4, "iter") +QDEF(MP_QSTR_join, 23719, 4, "join") +QDEF(MP_QSTR_key, 27954, 3, "key") +QDEF(MP_QSTR_keys, 4865, 4, "keys") +QDEF(MP_QSTR_len, 16482, 3, "len") +QDEF(MP_QSTR_list, 7463, 4, "list") +QDEF(MP_QSTR_little, 27273, 6, "little") +QDEF(MP_QSTR_locals, 41275, 6, "locals") +QDEF(MP_QSTR_lower, 52166, 5, "lower") +QDEF(MP_QSTR_lstrip, 47589, 6, "lstrip") +QDEF(MP_QSTR_main, 47054, 4, "main") +QDEF(MP_QSTR_map, 17337, 3, "map") +QDEF(MP_QSTR_micropython, 31755, 11, "micropython") +QDEF(MP_QSTR_next, 34882, 4, "next") +QDEF(MP_QSTR_object, 36240, 6, "object") +QDEF(MP_QSTR_open, 15057, 4, "open") +QDEF(MP_QSTR_ord, 24092, 3, "ord") +QDEF(MP_QSTR_pop, 29482, 3, "pop") +QDEF(MP_QSTR_popitem, 11455, 7, "popitem") +QDEF(MP_QSTR_pow, 29485, 3, "pow") +QDEF(MP_QSTR_print, 50772, 5, "print") +QDEF(MP_QSTR_range, 24090, 5, "range") +QDEF(MP_QSTR_read, 63927, 4, "read") +QDEF(MP_QSTR_readinto, 48971, 8, "readinto") +QDEF(MP_QSTR_readline, 6649, 8, "readline") +QDEF(MP_QSTR_remove, 35427, 6, "remove") +QDEF(MP_QSTR_replace, 9545, 7, "replace") +QDEF(MP_QSTR_repr, 63440, 4, "repr") +QDEF(MP_QSTR_reverse, 10789, 7, "reverse") +QDEF(MP_QSTR_rfind, 40146, 5, "rfind") +QDEF(MP_QSTR_rindex, 11241, 6, "rindex") +QDEF(MP_QSTR_round, 9703, 5, "round") +QDEF(MP_QSTR_rsplit, 165, 6, "rsplit") +QDEF(MP_QSTR_rstrip, 38203, 6, "rstrip") +QDEF(MP_QSTR_self, 30585, 4, "self") +QDEF(MP_QSTR_send, 30393, 4, "send") +QDEF(MP_QSTR_sep, 36643, 3, "sep") +QDEF(MP_QSTR_set, 36647, 3, "set") +QDEF(MP_QSTR_setattr, 43220, 7, "setattr") +QDEF(MP_QSTR_setdefault, 41836, 10, "setdefault") +QDEF(MP_QSTR_sort, 40383, 4, "sort") +QDEF(MP_QSTR_sorted, 5470, 6, "sorted") +QDEF(MP_QSTR_split, 13239, 5, "split") +QDEF(MP_QSTR_start, 61317, 5, "start") +QDEF(MP_QSTR_startswith, 59508, 10, "startswith") +QDEF(MP_QSTR_staticmethod, 44898, 12, "staticmethod") +QDEF(MP_QSTR_step, 13911, 4, "step") +QDEF(MP_QSTR_stop, 13981, 4, "stop") +QDEF(MP_QSTR_str, 36176, 3, "str") +QDEF(MP_QSTR_strip, 7721, 5, "strip") +QDEF(MP_QSTR_sum, 36142, 3, "sum") +QDEF(MP_QSTR_super, 45764, 5, "super") +QDEF(MP_QSTR_throw, 17587, 5, "throw") +QDEF(MP_QSTR_to_bytes, 16088, 8, "to_bytes") +QDEF(MP_QSTR_tuple, 16893, 5, "tuple") +QDEF(MP_QSTR_type, 32669, 4, "type") +QDEF(MP_QSTR_update, 30388, 6, "update") +QDEF(MP_QSTR_upper, 37927, 5, "upper") +QDEF(MP_QSTR_utf_hyphen_8, 33463, 5, "utf-8") +QDEF(MP_QSTR_value, 13390, 5, "value") +QDEF(MP_QSTR_values, 48765, 6, "values") +QDEF(MP_QSTR_write, 43160, 5, "write") +QDEF(MP_QSTR_zip, 44262, 3, "zip") +QDEF(MP_QSTR___add__, 33476, 7, "__add__") +QDEF(MP_QSTR___aenter__, 33868, 10, "__aenter__") +QDEF(MP_QSTR___aexit__, 53188, 9, "__aexit__") +QDEF(MP_QSTR___aiter__, 11086, 9, "__aiter__") +QDEF(MP_QSTR___anext__, 46211, 9, "__anext__") +QDEF(MP_QSTR___bases__, 12291, 9, "__bases__") +QDEF(MP_QSTR___bool__, 25899, 8, "__bool__") +QDEF(MP_QSTR___build_class__, 34882, 15, "__build_class__") +QDEF(MP_QSTR___contains__, 24518, 12, "__contains__") +QDEF(MP_QSTR___del__, 14184, 7, "__del__") +QDEF(MP_QSTR___dict__, 21631, 8, "__dict__") +QDEF(MP_QSTR___eq__, 15985, 6, "__eq__") +QDEF(MP_QSTR___file__, 21507, 8, "__file__") +QDEF(MP_QSTR___ge__, 18087, 6, "__ge__") +QDEF(MP_QSTR___gt__, 33462, 6, "__gt__") +QDEF(MP_QSTR___iadd__, 19053, 8, "__iadd__") +QDEF(MP_QSTR___iand__, 8615, 8, "__iand__") +QDEF(MP_QSTR___ifloordiv__, 3919, 13, "__ifloordiv__") +QDEF(MP_QSTR___ilshift__, 41600, 11, "__ilshift__") +QDEF(MP_QSTR___imatmul__, 28352, 11, "__imatmul__") +QDEF(MP_QSTR___imod__, 34378, 8, "__imod__") +QDEF(MP_QSTR___import__, 15928, 10, "__import__") +QDEF(MP_QSTR___imul__, 52760, 8, "__imul__") +QDEF(MP_QSTR___ior__, 36849, 7, "__ior__") +QDEF(MP_QSTR___ipow__, 54660, 8, "__ipow__") +QDEF(MP_QSTR___irshift__, 63710, 11, "__irshift__") +QDEF(MP_QSTR___isub__, 30728, 8, "__isub__") +QDEF(MP_QSTR___itruediv__, 545, 12, "__itruediv__") +QDEF(MP_QSTR___ixor__, 47369, 8, "__ixor__") +QDEF(MP_QSTR___le__, 5068, 6, "__le__") +QDEF(MP_QSTR___lt__, 26717, 6, "__lt__") +QDEF(MP_QSTR___ne__, 2830, 6, "__ne__") +QDEF(MP_QSTR___path__, 9160, 8, "__path__") +QDEF(MP_QSTR___repl_print__, 47872, 14, "__repl_print__") +QDEF(MP_QSTR___reversed__, 65377, 12, "__reversed__") +QDEF(MP_QSTR___sub__, 2337, 7, "__sub__") +QDEF(MP_QSTR___traceback__, 53071, 13, "__traceback__") +QDEF(MP_QSTR__percent__hash_o, 6764, 3, "%#o") +QDEF(MP_QSTR__percent__hash_x, 6779, 3, "%#x") +QDEF(MP_QSTR__brace_open__colon__hash_b_brace_close_, 14168, 5, "{:#b}") +QDEF(MP_QSTR_maximum_space_recursion_space_depth_space_exceeded, 7795, 32, "maximum recursion depth exceeded") +QDEF(MP_QSTR__lt_lambda_gt_, 35968, 8, "") +QDEF(MP_QSTR__lt_listcomp_gt_, 5588, 10, "") +QDEF(MP_QSTR__lt_dictcomp_gt_, 36300, 10, "") +QDEF(MP_QSTR__lt_setcomp_gt_, 20820, 9, "") +QDEF(MP_QSTR__lt_genexpr_gt_, 27188, 9, "") +QDEF(MP_QSTR__lt_string_gt_, 21330, 8, "") +QDEF(MP_QSTR__lt_stdin_gt_, 25571, 7, "") +QDEF(MP_QSTR_A0, 29268, 2, "A0") +QDEF(MP_QSTR_A1, 29269, 2, "A1") +QDEF(MP_QSTR_A10, 48325, 3, "A10") +QDEF(MP_QSTR_A11, 48324, 3, "A11") +QDEF(MP_QSTR_A12, 48327, 3, "A12") +QDEF(MP_QSTR_A13, 48326, 3, "A13") +QDEF(MP_QSTR_A14, 48321, 3, "A14") +QDEF(MP_QSTR_A15, 48320, 3, "A15") +QDEF(MP_QSTR_A2, 29270, 2, "A2") +QDEF(MP_QSTR_A3, 29271, 2, "A3") +QDEF(MP_QSTR_A4, 29264, 2, "A4") +QDEF(MP_QSTR_A5, 29265, 2, "A5") +QDEF(MP_QSTR_A6, 29266, 2, "A6") +QDEF(MP_QSTR_A7, 29267, 2, "A7") +QDEF(MP_QSTR_A8, 29276, 2, "A8") +QDEF(MP_QSTR_A9, 29277, 2, "A9") +QDEF(MP_QSTR_B0, 29431, 2, "B0") +QDEF(MP_QSTR_B1, 29430, 2, "B1") +QDEF(MP_QSTR_B10, 53638, 3, "B10") +QDEF(MP_QSTR_B11, 53639, 3, "B11") +QDEF(MP_QSTR_B12, 53636, 3, "B12") +QDEF(MP_QSTR_B13, 53637, 3, "B13") +QDEF(MP_QSTR_B14, 53634, 3, "B14") +QDEF(MP_QSTR_B15, 53635, 3, "B15") +QDEF(MP_QSTR_B2, 29429, 2, "B2") +QDEF(MP_QSTR_B3, 29428, 2, "B3") +QDEF(MP_QSTR_B4, 29427, 2, "B4") +QDEF(MP_QSTR_B5, 29426, 2, "B5") +QDEF(MP_QSTR_B6, 29425, 2, "B6") +QDEF(MP_QSTR_B7, 29424, 2, "B7") +QDEF(MP_QSTR_B8, 29439, 2, "B8") +QDEF(MP_QSTR_B9, 29438, 2, "B9") +QDEF(MP_QSTR_C0, 29334, 2, "C0") +QDEF(MP_QSTR_C1, 29335, 2, "C1") +QDEF(MP_QSTR_C10, 50503, 3, "C10") +QDEF(MP_QSTR_C11, 50502, 3, "C11") +QDEF(MP_QSTR_C12, 50501, 3, "C12") +QDEF(MP_QSTR_C13, 50500, 3, "C13") +QDEF(MP_QSTR_C14, 50499, 3, "C14") +QDEF(MP_QSTR_C15, 50498, 3, "C15") +QDEF(MP_QSTR_C2, 29332, 2, "C2") +QDEF(MP_QSTR_C3, 29333, 2, "C3") +QDEF(MP_QSTR_C4, 29330, 2, "C4") +QDEF(MP_QSTR_C5, 29331, 2, "C5") +QDEF(MP_QSTR_C6, 29328, 2, "C6") +QDEF(MP_QSTR_C7, 29329, 2, "C7") +QDEF(MP_QSTR_C8, 29342, 2, "C8") +QDEF(MP_QSTR_C9, 29343, 2, "C9") +QDEF(MP_QSTR_D2, 29235, 2, "D2") +QDEF(MP_QSTR_FileIO, 5573, 6, "FileIO") +QDEF(MP_QSTR_IN, 29474, 2, "IN") +QDEF(MP_QSTR_IN_PULLDOWN, 47946, 11, "IN_PULLDOWN") +QDEF(MP_QSTR_IN_PULLUP, 55837, 9, "IN_PULLUP") +QDEF(MP_QSTR_IRQ_FALLING, 49207, 11, "IRQ_FALLING") +QDEF(MP_QSTR_IRQ_RISING, 60792, 10, "IRQ_RISING") +QDEF(MP_QSTR_KEY1, 4963, 4, "KEY1") +QDEF(MP_QSTR_KEY2, 4960, 4, "KEY2") +QDEF(MP_QSTR_LED, 56456, 3, "LED") +QDEF(MP_QSTR_LockType, 8246, 8, "LockType") +QDEF(MP_QSTR_ONE_SHOT, 65374, 8, "ONE_SHOT") +QDEF(MP_QSTR_OPEN_DRAIN, 18526, 10, "OPEN_DRAIN") +QDEF(MP_QSTR_OUT, 58123, 3, "OUT") +QDEF(MP_QSTR_PERIODIC, 13578, 8, "PERIODIC") +QDEF(MP_QSTR_Pin, 5138, 3, "Pin") +QDEF(MP_QSTR_PinBase, 17223, 7, "PinBase") +QDEF(MP_QSTR_Signal, 58523, 6, "Signal") +QDEF(MP_QSTR_StopAsyncIteration, 61676, 18, "StopAsyncIteration") +QDEF(MP_QSTR_Timer, 8098, 5, "Timer") +QDEF(MP_QSTR_UART, 6583, 4, "UART") +QDEF(MP_QSTR__machine, 19391, 8, "_machine") +QDEF(MP_QSTR__thread, 724, 7, "_thread") +QDEF(MP_QSTR_acos, 40987, 4, "acos") +QDEF(MP_QSTR_acquire, 54045, 7, "acquire") +QDEF(MP_QSTR_add, 12868, 3, "add") +QDEF(MP_QSTR_alloc_emergency_exception_buf, 10872, 29, "alloc_emergency_exception_buf") +QDEF(MP_QSTR_allocate_lock, 60908, 13, "allocate_lock") +QDEF(MP_QSTR_argv, 50887, 4, "argv") +QDEF(MP_QSTR_array, 29308, 5, "array") +QDEF(MP_QSTR_asin, 58704, 4, "asin") +QDEF(MP_QSTR_atan, 48671, 4, "atan") +QDEF(MP_QSTR_atan2, 33229, 5, "atan2") +QDEF(MP_QSTR_bin, 18656, 3, "bin") +QDEF(MP_QSTR_bound_method, 41623, 12, "bound_method") +QDEF(MP_QSTR_buffer, 41189, 6, "buffer") +QDEF(MP_QSTR_byteorder, 39265, 9, "byteorder") +QDEF(MP_QSTR_calcsize, 14413, 8, "calcsize") +QDEF(MP_QSTR_callback, 61516, 8, "callback") +QDEF(MP_QSTR_ceil, 45062, 4, "ceil") +QDEF(MP_QSTR_closure, 51828, 7, "closure") +QDEF(MP_QSTR_collect, 26011, 7, "collect") +QDEF(MP_QSTR_complex, 40389, 7, "complex") +QDEF(MP_QSTR_copysign, 5171, 8, "copysign") +QDEF(MP_QSTR_cos, 19578, 3, "cos") +QDEF(MP_QSTR_decode, 22953, 6, "decode") +QDEF(MP_QSTR_default, 32206, 7, "default") +QDEF(MP_QSTR_degrees, 16642, 7, "degrees") +QDEF(MP_QSTR_deinit, 36254, 6, "deinit") +QDEF(MP_QSTR_delattr, 51419, 7, "delattr") +QDEF(MP_QSTR_deleter, 56174, 7, "deleter") +QDEF(MP_QSTR_dict_view, 43309, 9, "dict_view") +QDEF(MP_QSTR_difference, 9330, 10, "difference") +QDEF(MP_QSTR_difference_update, 64156, 17, "difference_update") +QDEF(MP_QSTR_disable, 30353, 7, "disable") +QDEF(MP_QSTR_discard, 28943, 7, "discard") +QDEF(MP_QSTR_doc, 7981, 3, "doc") +QDEF(MP_QSTR_e, 46528, 1, "e") +QDEF(MP_QSTR_enable, 56836, 6, "enable") +QDEF(MP_QSTR_encode, 51779, 6, "encode") +QDEF(MP_QSTR_enumerate, 47729, 9, "enumerate") +QDEF(MP_QSTR_errno, 4545, 5, "errno") +QDEF(MP_QSTR_exit, 48773, 4, "exit") +QDEF(MP_QSTR_exp, 9416, 3, "exp") +QDEF(MP_QSTR_fabs, 4755, 4, "fabs") +QDEF(MP_QSTR_filter, 48677, 6, "filter") +QDEF(MP_QSTR_float, 17461, 5, "float") +QDEF(MP_QSTR_floor, 18045, 5, "floor") +QDEF(MP_QSTR_fmod, 17637, 4, "fmod") +QDEF(MP_QSTR_freq, 15077, 4, "freq") +QDEF(MP_QSTR_frexp, 38940, 5, "frexp") +QDEF(MP_QSTR_fromkeys, 48439, 8, "fromkeys") +QDEF(MP_QSTR_function, 551, 8, "function") +QDEF(MP_QSTR_gc, 28257, 2, "gc") +QDEF(MP_QSTR_generator, 50070, 9, "generator") +QDEF(MP_QSTR_get_ident, 45566, 9, "get_ident") +QDEF(MP_QSTR_getter, 45712, 6, "getter") +QDEF(MP_QSTR_handler, 24029, 7, "handler") +QDEF(MP_QSTR_heap_lock, 36013, 9, "heap_lock") +QDEF(MP_QSTR_heap_unlock, 11606, 11, "heap_unlock") +QDEF(MP_QSTR_help, 23700, 4, "help") +QDEF(MP_QSTR_hex, 20592, 3, "hex") +QDEF(MP_QSTR_imag, 46919, 4, "imag") +QDEF(MP_QSTR_implementation, 11543, 14, "implementation") +QDEF(MP_QSTR_init, 46111, 4, "init") +QDEF(MP_QSTR_intersection, 10792, 12, "intersection") +QDEF(MP_QSTR_intersection_update, 56582, 19, "intersection_update") +QDEF(MP_QSTR_invert, 183, 6, "invert") +QDEF(MP_QSTR_irq, 22159, 3, "irq") +QDEF(MP_QSTR_isdisjoint, 26871, 10, "isdisjoint") +QDEF(MP_QSTR_isenabled, 58778, 9, "isenabled") +QDEF(MP_QSTR_isfinite, 43942, 8, "isfinite") +QDEF(MP_QSTR_isinf, 4414, 5, "isinf") +QDEF(MP_QSTR_isnan, 926, 5, "isnan") +QDEF(MP_QSTR_issubset, 49593, 8, "issubset") +QDEF(MP_QSTR_issuperset, 60668, 10, "issuperset") +QDEF(MP_QSTR_iterable, 37413, 8, "iterable") +QDEF(MP_QSTR_iterator, 48711, 8, "iterator") +QDEF(MP_QSTR_kbd_intr, 5110, 8, "kbd_intr") +QDEF(MP_QSTR_ldexp, 28480, 5, "ldexp") +QDEF(MP_QSTR_lock, 9134, 4, "lock") +QDEF(MP_QSTR_locked, 47631, 6, "locked") +QDEF(MP_QSTR_log, 16161, 3, "log") +QDEF(MP_QSTR_math, 47925, 4, "math") +QDEF(MP_QSTR_max, 17329, 3, "max") +QDEF(MP_QSTR_mem, 17440, 3, "mem") +QDEF(MP_QSTR_mem16, 51719, 5, "mem16") +QDEF(MP_QSTR_mem32, 51777, 5, "mem32") +QDEF(MP_QSTR_mem8, 51224, 4, "mem8") +QDEF(MP_QSTR_mem_alloc, 11090, 9, "mem_alloc") +QDEF(MP_QSTR_mem_free, 25291, 8, "mem_free") +QDEF(MP_QSTR_min, 17071, 3, "min") +QDEF(MP_QSTR_mode, 49190, 4, "mode") +QDEF(MP_QSTR_modf, 49189, 4, "modf") +QDEF(MP_QSTR_module, 39359, 6, "module") +QDEF(MP_QSTR_modules, 53740, 7, "modules") +QDEF(MP_QSTR_name, 30114, 4, "name") +QDEF(MP_QSTR_namedtuple, 5662, 10, "namedtuple") +QDEF(MP_QSTR_oct, 23805, 3, "oct") +QDEF(MP_QSTR_off, 23690, 3, "off") +QDEF(MP_QSTR_on, 28516, 2, "on") +QDEF(MP_QSTR_opt_level, 26503, 9, "opt_level") +QDEF(MP_QSTR_pack, 53692, 4, "pack") +QDEF(MP_QSTR_pack_into, 43295, 9, "pack_into") +QDEF(MP_QSTR_path, 52872, 4, "path") +QDEF(MP_QSTR_pend_throw, 29939, 10, "pend_throw") +QDEF(MP_QSTR_period, 41120, 6, "period") +QDEF(MP_QSTR_pi, 28700, 2, "pi") +QDEF(MP_QSTR_platform, 6458, 8, "platform") +QDEF(MP_QSTR_print_exception, 8732, 15, "print_exception") +QDEF(MP_QSTR_property, 10690, 8, "property") +QDEF(MP_QSTR_radians, 16263, 7, "radians") +QDEF(MP_QSTR_readlines, 22890, 9, "readlines") +QDEF(MP_QSTR_real, 63935, 4, "real") +QDEF(MP_QSTR_release, 36844, 7, "release") +QDEF(MP_QSTR_reversed, 28321, 8, "reversed") +QDEF(MP_QSTR_rxbuf, 26494, 5, "rxbuf") +QDEF(MP_QSTR_schedule, 44256, 8, "schedule") +QDEF(MP_QSTR_setter, 22788, 6, "setter") +QDEF(MP_QSTR_sin, 37041, 3, "sin") +QDEF(MP_QSTR_sleep, 10218, 5, "sleep") +QDEF(MP_QSTR_sleep_ms, 25355, 8, "sleep_ms") +QDEF(MP_QSTR_slice, 62645, 5, "slice") +QDEF(MP_QSTR_soft_reset, 26081, 10, "soft_reset") +QDEF(MP_QSTR_sqrt, 17441, 4, "sqrt") +QDEF(MP_QSTR_stack_size, 15153, 10, "stack_size") +QDEF(MP_QSTR_start_new_thread, 9687, 16, "start_new_thread") +QDEF(MP_QSTR_symmetric_difference, 26574, 20, "symmetric_difference") +QDEF(MP_QSTR_symmetric_difference_update, 63584, 27, "symmetric_difference_update") +QDEF(MP_QSTR_sys, 36540, 3, "sys") +QDEF(MP_QSTR_tan, 25086, 3, "tan") +QDEF(MP_QSTR_threshold, 12274, 9, "threshold") +QDEF(MP_QSTR_tick_hz, 56189, 7, "tick_hz") +QDEF(MP_QSTR_ticks_add, 44701, 9, "ticks_add") +QDEF(MP_QSTR_ticks_cpu, 42266, 9, "ticks_cpu") +QDEF(MP_QSTR_ticks_diff, 57521, 10, "ticks_diff") +QDEF(MP_QSTR_ticks_ms, 12866, 8, "ticks_ms") +QDEF(MP_QSTR_timeout, 21566, 7, "timeout") +QDEF(MP_QSTR_timeout_char, 19065, 12, "timeout_char") +QDEF(MP_QSTR_trigger, 35997, 7, "trigger") +QDEF(MP_QSTR_trunc, 39259, 5, "trunc") +QDEF(MP_QSTR_uarray, 34441, 6, "uarray") +QDEF(MP_QSTR_ucollections, 39445, 12, "ucollections") +QDEF(MP_QSTR_umachine, 32661, 8, "umachine") +QDEF(MP_QSTR_union, 31990, 5, "union") +QDEF(MP_QSTR_unpack, 15367, 6, "unpack") +QDEF(MP_QSTR_unpack_from, 27918, 11, "unpack_from") +QDEF(MP_QSTR_ustruct, 2119, 7, "ustruct") +QDEF(MP_QSTR_usys, 62409, 4, "usys") +QDEF(MP_QSTR_utime, 40421, 5, "utime") +QDEF(MP_QSTR_version, 54207, 7, "version") +QDEF(MP_QSTR_version_info, 2670, 12, "version_info") diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/before_build_command.png b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/before_build_command.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b4e34b6bdaad448ab6eec8e7769db3003b041c GIT binary patch literal 34303 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 literal 0 HcmV?d00001 diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/external_flash_1.png b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/external_flash_1.png new file mode 100644 index 0000000000000000000000000000000000000000..20e68411d7b917150b43268ee24310aab89389f9 GIT binary patch literal 27049 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 O2_hjP11l2NdG|kDOrj3} literal 0 HcmV?d00001 diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/external_flash_2.png b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/external_flash_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce85a0c8f604d93b8b071f56abe615ab974f8bc GIT binary patch literal 40052 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 HTR-|A7~N2j literal 0 HcmV?d00001 diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/help('modules').png b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/help('modules').png new file mode 100644 index 0000000000000000000000000000000000000000..75e292ff1106931f832a2737ccb79a4582ba9d45 GIT binary patch literal 7510 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 literal 0 HcmV?d00001 diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/help().png b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/help().png new file mode 100644 index 0000000000000000000000000000000000000000..12aeadf776dd51be7274cd989044c3cd74082561 GIT binary patch literal 24304 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 literal 0 HcmV?d00001 diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/include_paths.png b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/include_paths.png new file mode 100644 index 0000000000000000000000000000000000000000..9d045c37bcba707988960f453230c4655be2b9ef GIT binary patch literal 18193 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 rKd{$d&1c#esB9?ks2c`PS3j3^P6%=k|KgC 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%0A$=L^}fD>olgPdHO&2F zo_Vj~m@unl;Za89W5;|pR7i_^j4tB%fS}%SC5*x2TM5ceyKQA|} zMemZs70zE_T(YecIxPywy$+4VXQtw8%pr-1hysGQX#@mqqhM#V+wS$=99`v^q}iL^Hx9`H+42D9a`Bi1HZ(;cX8w=X5|pfEVK%(hWtk~s1W1(BWAbl{8wt5BNQmA zI4V!@g{fERZ5w*o2Di^XR=%wyWkd>eYJ*1pQxf=KDo+wVQ3QP77NJa9@Sc}CIU6ii zgDJgF6LzzH*-*(&v7`C`UmVRwF-qVomn%a`xn{TTsP+EE^*9kBmZCt}kQtA5t@yOu)g1ImSs`c6B~fBissfWYAUGCJ8m~H9 zrY~u>T9)Py5-7}DcJRr9Ldmtx2yh0T_}mc&scKpsfG2&_dUJ88+GR`XTKs^&th9IAJz-A)G=+M%| z5k!uV{5W&G*wz+V^Kdf8I@gb1sA!O!nNKS_tN{Q{ceB;?#YOyPEw{QQvh@VKG5^0{ zCa*a}9ssyq=w@fX$u)bPb{<+Xo5i|st8FUo%|#O=A4X+~Recr69Nmrl2Q>saYY@;a z32nUIbS92lGrK%RT{*kIF!GE4=?pl^zUa5M+Sw=!@;=viHlAVXJk-BnCYWy^x~f3! zQu-p#+w&C&mt7l-Mfr$}i3H?Nf49WK{108N zGJ!C^ADYUI{p$U%!GYgi&ar%)zb6Rvav%X2&wu`m_V>z%HwvWZjY8P`8*ttnMi4kV zHW2eC{Gdf*2SRe~4N#E(%o-R(Ca6Ux;UK8L6M!EBsyn0+`n&u$G)YkLiIIWmchr9e z{x{Hz{kiwQKpKOni5MckUS$q%<3=nyL@vo(c zR8TjK4MhK-z@U3Ik|DQwN@NWLF-r+f%$^T!3eR$(| zm&!UkpP0!bMgR2(%ohv7wARhbOFRC3(Z3;rLB&CxTL41e#r`+Q-`Z+CGf~KY(G~*@ zQj97D>fa!_L4$mf6#y|U|J)Eo15ph1_=x_6^ZILy7kZP7v}i3HR2GkS2b>vF5uvAq z^4l6m$h$~zJ@A;HJ;HjCY!QNB^ZXMi%}If3h`i-*zd)6Txz4x~vxTWW*bvtY{9U;^ zggT-*hQ@;MU+U*lvePwmz^o~BI8KmBIqa+xuF|{eiVu8cl+{YHBE!rLAF|4s3I0O& zplPim1}(0n58MAnm=g;c5aIus64Zqa4$({%+rZKZe^|`S%v??$KYsjUwzW9#(o?#x zf3y5N!}{rlkz}Ryp*4ML53gBkcMy0Zvg(~r=XS_7)O=lORlH_L%2MNa*O;jPRTe5Q zSI6jU%Ix`|l~k!@<^B5gw65r|`Lc>)I!yf=0`Y0?&n8^V zO54~~-g{MrcdcWB0#gKw9EVAlr%=TsGt&g6Vl~4pRsWXwuJ8Xo(JFMp!&$Oyrc)26 zEJ^ct=%98$=()0?(lbl;l?6Kjn09e4Szy+yG08jM=uDXSE%OPL%#8J?vnNzDEq}Sr z(d5PQe0i%ji3-W{hmU(`$?vag+_8+MeU)a%l6{Rm934Kq6D;KCuRXs|&C*Y|sUa`y zlzqm{9WHk}y!VS4ME6Q_7&Z$nc5$6LlDxmYre7m8E}Ym9 z=Wyzi$? zRN3{nDJ86#wWub5HP(7%xX!ZF7do<+{EyfOYdR~vT%*1?xkjj7tnnZR%ZHZ}q64=s z=6fBc%-ekUU3n3$v8;6e!ul$1N|r`0#3P{qSxD zJByyoCrL?0j$sEAb^2!<6}<4_cFR_^sJP?&GRL&NnVH=SA^ECUP2qFMPwVGvcBi-B z%qmawUo}X qAb;b+Z11_3;pJ|FgUf^ej52e3C3>cC0uOCtVDNPHb6Mw<&;$VNQ~crp literal 0 HcmV?d00001 diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/paste_mode_pin_py.png b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/imgs/paste_mode_pin_py.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4d1db1c88c361d87e6a0b05177448c06f07817 GIT binary patch literal 36521 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 literal 0 HcmV?d00001 diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/os.py b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/os.py new file mode 100644 index 00000000..a103ea4b --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/os.py @@ -0,0 +1,40 @@ +import uos as os + +# test mkdir() +print('{:-^40}'.format('test mkdir')) +print(os.listdir()) +os.mkdir('test_dir') +print(os.listdir()) + +# test file open() and write() +print('{:-^40}'.format('test write')) +f = open('test_dir/test_file', 'w') +f.write("Hello TencentOS-tiny\n") +print("Hello MicroPython", file=f) +f.close() +print(os.listdir('test_dir')) + +# test file open() and read() +print('{:-^40}'.format('test read')) +f = open('test_dir/test_file', 'r') +print(f.readlines()) +f.close() + +# test 'with' statement and iterator +print('{:-^40}'.format('test with statement')) +with open('test_dir/test_file', 'r') as file: + for line in file: + print(line) + +# test rename() +print('{:-^40}'.format('test rename')) +os.rename('test_dir', 'test_dir2') +print(os.listdir()) +print(os.listdir('test_dir2')) + +# test unlink() +print('{:-^40}'.format('test unlink')) +os.unlink('test_dir2/test_file') +print(os.listdir('test_dir2')) +os.unlink('test_dir2') +print(os.listdir()) diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/pin.py b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/pin.py new file mode 100644 index 00000000..1df76913 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/pin.py @@ -0,0 +1,28 @@ +import umachine as machine +import utime as time + +running = True + +def key1_irq_callback(pin): + if pin.value() == 0: + print('Key1 is pressed') + else: + print('Key1 is released') + +def key2_irq_callback(pin): + global running + running = False + +if __name__ == '__main__': + + led = machine.Pin("LED", mode=machine.Pin.OUT) + key1 = machine.Pin("KEY1", mode=machine.Pin.IN_PULLUP) + key1.irq(trigger=machine.Pin.IRQ_RISING|machine.Pin.IRQ_FALLING, handler=key1_irq_callback) + key2 = machine.Pin("KEY2", mode=machine.Pin.IN_PULLUP) + key2.irq(trigger=machine.Pin.IRQ_FALLING, handler=key2_irq_callback) + + while running: + led.on() + time.sleep(0.5) + led.off() + time.sleep(0.5) diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/thread.py b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/thread.py new file mode 100644 index 00000000..964d7740 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/scripts/thread.py @@ -0,0 +1,19 @@ +import _thread + +lock = _thread.allocate_lock() +n_thread = 4 +n_finished = 0 + +def thread_entry(no): + print(no) + with lock: + global n_finished + n_finished += 1 + +if __name__ == '__main__': + for i in range(n_thread): + _thread.start_new_thread(thread_entry, (i,)) + + while n_finished < n_thread: + pass + print("done") diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/startup_stm32l431xx.s b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/startup_stm32l431xx.s new file mode 100644 index 00000000..6a5c15a5 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_basic_demo/startup_stm32l431xx.s @@ -0,0 +1,404 @@ +;********************** COPYRIGHT(c) 2017 STMicroelectronics ****************** +;* File Name : startup_stm32l431xx.s +;* Author : MCD Application Team +;* Description : STM32L431xx Ultra Low Power devices vector table for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the Cortex-M4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Redistribution and use in source and binary forms, with or without modification, +;* are permitted provided that the following conditions are met: +;* 1. Redistributions of source code must retain the above copyright notice, +;* this list of conditions and the following disclaimer. +;* 2. Redistributions in binary form must reproduce the above copyright notice, +;* this list of conditions and the following disclaimer in the documentation +;* and/or other materials provided with the distribution. +;* 3. Neither the name of STMicroelectronics nor the names of its contributors +;* may be used to endorse or promote products derived from this software +;* without specific prior written permission. +;* +;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;* +;******************************************************************************* +; +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x100 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x100 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_PVM_IRQHandler ; PVD/PVM1/PVM2/PVM3/PVM4 through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_IRQHandler ; ADC1 + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15 + DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10] + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SDMMC1_IRQHandler ; SDMMC1 + DCD 0 ; Reserved + DCD SPI3_IRQHandler ; SPI3 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel 1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel 2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel 3 + DCD DMA2_Channel4_IRQHandler ; DMA2 Channel 4 + DCD DMA2_Channel5_IRQHandler ; DMA2 Channel 5 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD COMP_IRQHandler ; COMP Interrupt + DCD LPTIM1_IRQHandler ; LP TIM1 interrupt + DCD LPTIM2_IRQHandler ; LP TIM2 interrupt + DCD 0 ; Reserved + DCD DMA2_Channel6_IRQHandler ; DMA2 Channel 6 + DCD DMA2_Channel7_IRQHandler ; DMA2 Channel 7 + DCD LPUART1_IRQHandler ; LP UART1 interrupt + DCD QUADSPI_IRQHandler ; Quad SPI global interrupt + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD SAI1_IRQHandler ; Serial Audio Interface 1 global interrupt + DCD 0 ; Reserved + DCD SWPMI1_IRQHandler ; Serial Wire Interface 1 global interrupt + DCD TSC_IRQHandler ; Touch Sense Controller global interrupt + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD RNG_IRQHandler ; RNG global interrupt + DCD FPU_IRQHandler ; FPU + DCD CRS_IRQHandler ; CRS interrupt + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_PVM_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM15_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM16_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT SDMMC1_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Channel1_IRQHandler [WEAK] + EXPORT DMA2_Channel2_IRQHandler [WEAK] + EXPORT DMA2_Channel3_IRQHandler [WEAK] + EXPORT DMA2_Channel4_IRQHandler [WEAK] + EXPORT DMA2_Channel5_IRQHandler [WEAK] + EXPORT COMP_IRQHandler [WEAK] + EXPORT LPTIM1_IRQHandler [WEAK] + EXPORT LPTIM2_IRQHandler [WEAK] + EXPORT DMA2_Channel6_IRQHandler [WEAK] + EXPORT DMA2_Channel7_IRQHandler [WEAK] + EXPORT LPUART1_IRQHandler [WEAK] + EXPORT QUADSPI_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT SAI1_IRQHandler [WEAK] + EXPORT SWPMI1_IRQHandler [WEAK] + EXPORT TSC_IRQHandler [WEAK] + EXPORT RNG_IRQHandler [WEAK] + EXPORT FPU_IRQHandler [WEAK] + EXPORT CRS_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_PVM_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM15_IRQHandler +TIM1_UP_TIM16_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +SDMMC1_IRQHandler +SPI3_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Channel1_IRQHandler +DMA2_Channel2_IRQHandler +DMA2_Channel3_IRQHandler +DMA2_Channel4_IRQHandler +DMA2_Channel5_IRQHandler +COMP_IRQHandler +LPTIM1_IRQHandler +LPTIM2_IRQHandler +DMA2_Channel6_IRQHandler +DMA2_Channel7_IRQHandler +LPUART1_IRQHandler +QUADSPI_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +SAI1_IRQHandler +SWPMI1_IRQHandler +TSC_IRQHandler +RNG_IRQHandler +FPU_IRQHandler +CRS_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_STM32L31RC.uvoptx b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_STM32L31RC.uvoptx new file mode 100644 index 00000000..6c457c36 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_STM32L31RC.uvoptx @@ -0,0 +1,3519 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + TencentOS_tiny + 0x4 + ARM-ADS + + 80000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\list\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=75,104,525,661,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=120,153,378,741,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32L4xx_256 -FS08000000 -FL040000 -FP0($$Device:STM32L431RCTx$CMSIS\Flash\STM32L4xx_256.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066EFF3035344E5043163106 -O10446 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC8000 -FN2 -FF0STM32L4xx_256.FLM -FS08000000 -FL040000 -FP0($$Device:STM32L431RCTx$CMSIS\Flash\STM32L4xx_256.FLM) -FF1BearPi_W25Q64JV -FS190000000 -FL1800000 + + + + + + 0 + 1 + tos_next_task + + + 1 + 1 + tos_rdyq.highest_prio + + + 2 + 1 + task_list + + + 3 + 1 + 0x20000280,0x10 + + + 4 + 1 + tos_rdyq.highest_prio + + + 5 + 1 + owner + + + 6 + 1 + tos_curr_task + + + 7 + 1 + highest_pending_prio + + + 8 + 1 + task + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Application/MDK-ARM + 0 + 0 + 0 + 0 + + 1 + 1 + 2 + 0 + 0 + 0 + startup_stm32l431xx.s + startup_stm32l431xx.s + 0 + 0 + + + + + Application/User + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\gpio.c + gpio.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\main.c + main.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\mcu_init.c + mcu_init.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\stm32l4xx_hal_msp.c + stm32l4xx_hal_msp.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\stm32l4xx_it_mpy.c + stm32l4xx_it_mpy.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\usart.c + usart.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\adc.c + adc.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\i2c.c + i2c.c + 0 + 0 + + + 2 + 10 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\spi.c + spi.c + 0 + 0 + + + 2 + 11 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\sdmmc.c + sdmmc.c + 0 + 0 + + + 2 + 12 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\quadspi.c + quadspi.c + 0 + 0 + + + + + examples + 0 + 0 + 0 + 0 + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\..\examples\micropython_demo\micropython_demo.c + micropython_demo.c + 0 + 0 + + + + + Drivers/STM32L4xx_HAL_Driver + 0 + 0 + 0 + 0 + + 4 + 14 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim.c + stm32l4xx_hal_tim.c + 0 + 0 + + + 4 + 15 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim_ex.c + stm32l4xx_hal_tim_ex.c + 0 + 0 + + + 4 + 16 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + stm32l4xx_hal_uart.c + 0 + 0 + + + 4 + 17 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + stm32l4xx_hal_uart_ex.c + 0 + 0 + + + 4 + 18 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + stm32l4xx_hal.c + 0 + 0 + + + 4 + 19 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c.c + stm32l4xx_hal_i2c.c + 0 + 0 + + + 4 + 20 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c_ex.c + stm32l4xx_hal_i2c_ex.c + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + stm32l4xx_hal_rcc.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + stm32l4xx_hal_rcc_ex.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash.c + stm32l4xx_hal_flash.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ex.c + stm32l4xx_hal_flash_ex.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ramfunc.c + stm32l4xx_hal_flash_ramfunc.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + stm32l4xx_hal_gpio.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + stm32l4xx_hal_dma.c + 0 + 0 + + + 4 + 28 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + stm32l4xx_hal_dma_ex.c + 0 + 0 + + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + stm32l4xx_hal_pwr.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + stm32l4xx_hal_pwr_ex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + stm32l4xx_hal_cortex.c + 0 + 0 + + + 4 + 32 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc_ex.c + stm32l4xx_hal_adc_ex.c + 0 + 0 + + + 4 + 33 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc.c + stm32l4xx_hal_adc.c + 0 + 0 + + + 4 + 34 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac.c + stm32l4xx_hal_dac.c + 0 + 0 + + + 4 + 35 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac_ex.c + stm32l4xx_hal_dac_ex.c + 0 + 0 + + + 4 + 36 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi.c + stm32l4xx_hal_spi.c + 0 + 0 + + + 4 + 37 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi_ex.c + stm32l4xx_hal_spi_ex.c + 0 + 0 + + + 4 + 38 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_sd.c + stm32l4xx_hal_sd.c + 0 + 0 + + + 4 + 39 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_sd_ex.c + stm32l4xx_hal_sd_ex.c + 0 + 0 + + + 4 + 40 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_ll_sdmmc.c + stm32l4xx_ll_sdmmc.c + 0 + 0 + + + 4 + 41 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_qspi.c + stm32l4xx_hal_qspi.c + 0 + 0 + + + + + Drivers/CMSIS + 0 + 0 + 0 + 0 + + 5 + 42 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\system_stm32l4xx.c + system_stm32l4xx.c + 0 + 0 + + + + + Hardware + 0 + 0 + 0 + 0 + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\BSP\Hardware\BH1750\BH1750.c + BH1750.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\BSP\Hardware\LCD_ST7789\lcd_spi2_drv.c + lcd_spi2_drv.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\BSP\Hardware\W25QXX-QSPI\w25qxx.c + w25qxx.c + 0 + 0 + + + + + kernel + 0 + 0 + 0 + 0 + + 7 + 46 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_mmblk.c + tos_mmblk.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_mmheap.c + tos_mmheap.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_mutex.c + tos_mutex.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_sched.c + tos_sched.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_sem.c + tos_sem.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_sys.c + tos_sys.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_task.c + tos_task.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_tick.c + tos_tick.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_time.c + tos_time.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_timer.c + tos_timer.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_event.c + tos_event.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_global.c + tos_global.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_pend.c + tos_pend.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_robin.c + tos_robin.c + 0 + 0 + + + 7 + 60 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_binary_heap.c + tos_binary_heap.c + 0 + 0 + + + 7 + 61 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_char_fifo.c + tos_char_fifo.c + 0 + 0 + + + 7 + 62 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_completion.c + tos_completion.c + 0 + 0 + + + 7 + 63 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_countdownlatch.c + tos_countdownlatch.c + 0 + 0 + + + 7 + 64 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_mail_queue.c + tos_mail_queue.c + 0 + 0 + + + 7 + 65 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_message_queue.c + tos_message_queue.c + 0 + 0 + + + 7 + 66 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_priority_mail_queue.c + tos_priority_mail_queue.c + 0 + 0 + + + 7 + 67 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_priority_message_queue.c + tos_priority_message_queue.c + 0 + 0 + + + 7 + 68 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_priority_queue.c + tos_priority_queue.c + 0 + 0 + + + 7 + 69 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_ring_queue.c + tos_ring_queue.c + 0 + 0 + + + 7 + 70 + 1 + 0 + 0 + 0 + ..\..\..\..\kernel\core\tos_stopwatch.c + tos_stopwatch.c + 0 + 0 + + + + + cpu + 0 + 0 + 0 + 0 + + 8 + 71 + 2 + 0 + 0 + 0 + ..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_s.S + port_s.S + 0 + 0 + + + 8 + 72 + 1 + 0 + 0 + 0 + ..\..\..\..\arch\arm\arm-v7m\common\tos_cpu.c + tos_cpu.c + 0 + 0 + + + 8 + 73 + 1 + 0 + 0 + 0 + ..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_c.c + port_c.c + 0 + 0 + + + + + config + 0 + 0 + 0 + 0 + + 9 + 74 + 5 + 0 + 0 + 0 + ..\..\TOS-CONFIG\tos_config.h + tos_config.h + 0 + 0 + + + + + hal + 0 + 0 + 0 + 0 + + 10 + 75 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\hal\st\stm32l4xx\src\tos_hal_uart.c + tos_hal_uart.c + 0 + 0 + + + 10 + 76 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\hal\st\stm32l4xx\src\tos_hal_sd.c + tos_hal_sd.c + 0 + 0 + + + 10 + 77 + 1 + 0 + 0 + 0 + ..\micropython_basic_demo\board\hal\mp_tos_hal_pin.c + mp_tos_hal_pin.c + 0 + 0 + + + 10 + 78 + 1 + 0 + 0 + 0 + ..\micropython_basic_demo\board\hal\mp_tos_hal_spi.c + mp_tos_hal_spi.c + 0 + 0 + + + 10 + 79 + 1 + 0 + 0 + 0 + ..\micropython_basic_demo\board\hal\mp_tos_hal_uart.c + mp_tos_hal_uart.c + 0 + 0 + + + + + net + 0 + 0 + 0 + 0 + + 11 + 80 + 1 + 0 + 0 + 0 + ..\..\..\..\net\at\src\tos_at.c + tos_at.c + 0 + 0 + + + 11 + 81 + 1 + 0 + 0 + 0 + ..\..\..\..\net\sal_module_wrapper\sal_module_wrapper.c + sal_module_wrapper.c + 0 + 0 + + + 11 + 82 + 1 + 0 + 0 + 0 + ..\..\..\..\net\socket_wrapper\tos_at_socket.c + tos_at_socket.c + 0 + 0 + + + 11 + 83 + 1 + 0 + 0 + 0 + ..\..\..\..\net\socket_wrapper\tos_at_socket_lib.c + tos_at_socket_lib.c + 0 + 0 + + + 11 + 84 + 1 + 0 + 0 + 0 + ..\..\..\..\net\socket_wrapper\tos_at_socket_prv.c + tos_at_socket_prv.c + 0 + 0 + + + + + devices + 0 + 0 + 0 + 0 + + 12 + 85 + 1 + 0 + 0 + 0 + ..\..\..\..\devices\esp8266\esp8266.c + esp8266.c + 0 + 0 + + + + + vfs + 0 + 0 + 0 + 0 + + 13 + 86 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\vfs\tos_vfs.c + tos_vfs.c + 0 + 0 + + + 13 + 87 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\vfs\tos_vfs_device.c + tos_vfs_device.c + 0 + 0 + + + 13 + 88 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\vfs\tos_vfs_file.c + tos_vfs_file.c + 0 + 0 + + + 13 + 89 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\vfs\tos_vfs_fs.c + tos_vfs_fs.c + 0 + 0 + + + 13 + 90 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\vfs\tos_vfs_inode.c + tos_vfs_inode.c + 0 + 0 + + + + + fatfs + 0 + 0 + 0 + 0 + + 14 + 91 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\fatfs\wrapper\tos_diskio.c + tos_diskio.c + 0 + 0 + + + 14 + 92 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\fatfs\wrapper\tos_fatfs_drv.c + tos_fatfs_drv.c + 0 + 0 + + + 14 + 93 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\fatfs\wrapper\tos_fatfs_vfs.c + tos_fatfs_vfs.c + 0 + 0 + + + 14 + 94 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\fatfs\wrapper\tos_ff.c + tos_ff.c + 0 + 0 + + + 14 + 95 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\fatfs\wrapper\tos_ffsystem.c + tos_ffsystem.c + 0 + 0 + + + 14 + 96 + 1 + 0 + 0 + 0 + ..\..\..\..\components\fs\fatfs\wrapper\tos_ffunicode.c + tos_ffunicode.c + 0 + 0 + + + + + micropython/py + 0 + 0 + 0 + 0 + + 15 + 97 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\argcheck.c + argcheck.c + 0 + 0 + + + 15 + 98 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmarm.c + asmarm.c + 0 + 0 + + + 15 + 99 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmbase.c + asmbase.c + 0 + 0 + + + 15 + 100 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmthumb.c + asmthumb.c + 0 + 0 + + + 15 + 101 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmx64.c + asmx64.c + 0 + 0 + + + 15 + 102 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmx86.c + asmx86.c + 0 + 0 + + + 15 + 103 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\asmxtensa.c + asmxtensa.c + 0 + 0 + + + 15 + 104 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\bc.c + bc.c + 0 + 0 + + + 15 + 105 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\binary.c + binary.c + 0 + 0 + + + 15 + 106 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\builtinevex.c + builtinevex.c + 0 + 0 + + + 15 + 107 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\builtinhelp.c + builtinhelp.c + 0 + 0 + + + 15 + 108 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\builtinimport.c + builtinimport.c + 0 + 0 + + + 15 + 109 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\compile.c + compile.c + 0 + 0 + + + 15 + 110 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitbc.c + emitbc.c + 0 + 0 + + + 15 + 111 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitcommon.c + emitcommon.c + 0 + 0 + + + 15 + 112 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitglue.c + emitglue.c + 0 + 0 + + + 15 + 113 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitinlinethumb.c + emitinlinethumb.c + 0 + 0 + + + 15 + 114 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitinlinextensa.c + emitinlinextensa.c + 0 + 0 + + + 15 + 115 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnarm.c + emitnarm.c + 0 + 0 + + + 15 + 116 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnative.c + emitnative.c + 0 + 0 + + + 15 + 117 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnthumb.c + emitnthumb.c + 0 + 0 + + + 15 + 118 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnx64.c + emitnx64.c + 0 + 0 + + + 15 + 119 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnx86.c + emitnx86.c + 0 + 0 + + + 15 + 120 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnxtensa.c + emitnxtensa.c + 0 + 0 + + + 15 + 121 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\emitnxtensawin.c + emitnxtensawin.c + 0 + 0 + + + 15 + 122 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\formatfloat.c + formatfloat.c + 0 + 0 + + + 15 + 123 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\frozenmod.c + frozenmod.c + 0 + 0 + + + 15 + 124 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\gc.c + gc.c + 0 + 0 + + + 15 + 125 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\lexer.c + lexer.c + 0 + 0 + + + 15 + 126 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\malloc.c + malloc.c + 0 + 0 + + + 15 + 127 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\map.c + map.c + 0 + 0 + + + 15 + 128 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modarray.c + modarray.c + 0 + 0 + + + 15 + 129 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modbuiltins.c + modbuiltins.c + 0 + 0 + + + 15 + 130 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modcmath.c + modcmath.c + 0 + 0 + + + 15 + 131 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modcollections.c + modcollections.c + 0 + 0 + + + 15 + 132 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modgc.c + modgc.c + 0 + 0 + + + 15 + 133 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modio.c + modio.c + 0 + 0 + + + 15 + 134 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modmath.c + modmath.c + 0 + 0 + + + 15 + 135 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modmicropython.c + modmicropython.c + 0 + 0 + + + 15 + 136 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modstruct.c + modstruct.c + 0 + 0 + + + 15 + 137 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modsys.c + modsys.c + 0 + 0 + + + 15 + 138 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\modthread.c + modthread.c + 0 + 0 + + + 15 + 139 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\moduerrno.c + moduerrno.c + 0 + 0 + + + 15 + 140 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\mpprint.c + mpprint.c + 0 + 0 + + + 15 + 141 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\mpstate.c + mpstate.c + 0 + 0 + + + 15 + 142 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\mpz.c + mpz.c + 0 + 0 + + + 15 + 143 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nativeglue.c + nativeglue.c + 0 + 0 + + + 15 + 144 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlr.c + nlr.c + 0 + 0 + + + 15 + 145 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlraarch64.c + nlraarch64.c + 0 + 0 + + + 15 + 146 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrpowerpc.c + nlrpowerpc.c + 0 + 0 + + + 15 + 147 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrsetjmp.c + nlrsetjmp.c + 0 + 0 + + + 15 + 148 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrthumb.c + nlrthumb.c + 0 + 0 + + + 15 + 149 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrx64.c + nlrx64.c + 0 + 0 + + + 15 + 150 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrx86.c + nlrx86.c + 0 + 0 + + + 15 + 151 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\nlrxtensa.c + nlrxtensa.c + 0 + 0 + + + 15 + 152 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\obj.c + obj.c + 0 + 0 + + + 15 + 153 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objarray.c + objarray.c + 0 + 0 + + + 15 + 154 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objattrtuple.c + objattrtuple.c + 0 + 0 + + + 15 + 155 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objbool.c + objbool.c + 0 + 0 + + + 15 + 156 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objboundmeth.c + objboundmeth.c + 0 + 0 + + + 15 + 157 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objcell.c + objcell.c + 0 + 0 + + + 15 + 158 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objclosure.c + objclosure.c + 0 + 0 + + + 15 + 159 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objcomplex.c + objcomplex.c + 0 + 0 + + + 15 + 160 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objdeque.c + objdeque.c + 0 + 0 + + + 15 + 161 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objdict.c + objdict.c + 0 + 0 + + + 15 + 162 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objenumerate.c + objenumerate.c + 0 + 0 + + + 15 + 163 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objexcept.c + objexcept.c + 0 + 0 + + + 15 + 164 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objfilter.c + objfilter.c + 0 + 0 + + + 15 + 165 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objfloat.c + objfloat.c + 0 + 0 + + + 15 + 166 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objfun.c + objfun.c + 0 + 0 + + + 15 + 167 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objgenerator.c + objgenerator.c + 0 + 0 + + + 15 + 168 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objgetitemiter.c + objgetitemiter.c + 0 + 0 + + + 15 + 169 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objint.c + objint.c + 0 + 0 + + + 15 + 170 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objint_longlong.c + objint_longlong.c + 0 + 0 + + + 15 + 171 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objint_mpz.c + objint_mpz.c + 0 + 0 + + + 15 + 172 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objlist.c + objlist.c + 0 + 0 + + + 15 + 173 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objmap.c + objmap.c + 0 + 0 + + + 15 + 174 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objmodule.c + objmodule.c + 0 + 0 + + + 15 + 175 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objnamedtuple.c + objnamedtuple.c + 0 + 0 + + + 15 + 176 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objnone.c + objnone.c + 0 + 0 + + + 15 + 177 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objobject.c + objobject.c + 0 + 0 + + + 15 + 178 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objpolyiter.c + objpolyiter.c + 0 + 0 + + + 15 + 179 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objproperty.c + objproperty.c + 0 + 0 + + + 15 + 180 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objrange.c + objrange.c + 0 + 0 + + + 15 + 181 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objreversed.c + objreversed.c + 0 + 0 + + + 15 + 182 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objset.c + objset.c + 0 + 0 + + + 15 + 183 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objsingleton.c + objsingleton.c + 0 + 0 + + + 15 + 184 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objslice.c + objslice.c + 0 + 0 + + + 15 + 185 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objstr.c + objstr.c + 0 + 0 + + + 15 + 186 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objstringio.c + objstringio.c + 0 + 0 + + + 15 + 187 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objstrunicode.c + objstrunicode.c + 0 + 0 + + + 15 + 188 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objtuple.c + objtuple.c + 0 + 0 + + + 15 + 189 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objtype.c + objtype.c + 0 + 0 + + + 15 + 190 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\objzip.c + objzip.c + 0 + 0 + + + 15 + 191 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\opmethods.c + opmethods.c + 0 + 0 + + + 15 + 192 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\pairheap.c + pairheap.c + 0 + 0 + + + 15 + 193 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\parse.c + parse.c + 0 + 0 + + + 15 + 194 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\parsenum.c + parsenum.c + 0 + 0 + + + 15 + 195 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\parsenumbase.c + parsenumbase.c + 0 + 0 + + + 15 + 196 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\persistentcode.c + persistentcode.c + 0 + 0 + + + 15 + 197 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\profile.c + profile.c + 0 + 0 + + + 15 + 198 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\pystack.c + pystack.c + 0 + 0 + + + 15 + 199 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\qstr.c + qstr.c + 0 + 0 + + + 15 + 200 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\reader.c + reader.c + 0 + 0 + + + 15 + 201 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\repl.c + repl.c + 0 + 0 + + + 15 + 202 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\ringbuf.c + ringbuf.c + 0 + 0 + + + 15 + 203 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\runtime.c + runtime.c + 0 + 0 + + + 15 + 204 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\runtime_utils.c + runtime_utils.c + 0 + 0 + + + 15 + 205 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\scheduler.c + scheduler.c + 0 + 0 + + + 15 + 206 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\scope.c + scope.c + 0 + 0 + + + 15 + 207 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\sequence.c + sequence.c + 0 + 0 + + + 15 + 208 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\showbc.c + showbc.c + 0 + 0 + + + 15 + 209 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\smallint.c + smallint.c + 0 + 0 + + + 15 + 210 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\stackctrl.c + stackctrl.c + 0 + 0 + + + 15 + 211 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\stream.c + stream.c + 0 + 0 + + + 15 + 212 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\unicode.c + unicode.c + 0 + 0 + + + 15 + 213 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\vm.c + vm.c + 0 + 0 + + + 15 + 214 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\vstr.c + vstr.c + 0 + 0 + + + 15 + 215 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\py\warning.c + warning.c + 0 + 0 + + + + + micropython/shared + 0 + 0 + 0 + 0 + + 16 + 216 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\readline\readline.c + readline.c + 0 + 0 + + + 16 + 217 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\runtime\pyexec.c + pyexec.c + 0 + 0 + + + 16 + 218 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\runtime\stdout_helpers.c + stdout_helpers.c + 0 + 0 + + + 16 + 219 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\runtime\sys_stdio_mphal.c + sys_stdio_mphal.c + 0 + 0 + + + 16 + 220 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\runtime\interrupt_char.c + interrupt_char.c + 0 + 0 + + + 16 + 221 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\shared\netutils\netutils.c + netutils.c + 0 + 0 + + + + + micropython/extmod + 0 + 0 + 0 + 0 + + 17 + 222 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\modframebuf.c + modframebuf.c + 0 + 0 + + + 17 + 223 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\moduasyncio.c + moduasyncio.c + 0 + 0 + + + 17 + 224 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\modubinascii.c + modubinascii.c + 0 + 0 + + + 17 + 225 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\moductypes.c + moductypes.c + 0 + 0 + + + 17 + 226 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\moduhashlib.c + moduhashlib.c + 0 + 0 + + + 17 + 227 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\moduheapq.c + moduheapq.c + 0 + 0 + + + 17 + 228 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\modujson.c + modujson.c + 0 + 0 + + + 17 + 229 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\moduos.c + moduos.c + 0 + 0 + + + 17 + 230 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\modurandom.c + modurandom.c + 0 + 0 + + + 17 + 231 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\modure.c + modure.c + 0 + 0 + + + 17 + 232 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\moduselect.c + moduselect.c + 0 + 0 + + + 17 + 233 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\moduzlib.c + moduzlib.c + 0 + 0 + + + 17 + 234 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\vfs.c + vfs.c + 0 + 0 + + + 17 + 235 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\vfs_reader.c + vfs_reader.c + 0 + 0 + + + 17 + 236 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\uos_dupterm.c + uos_dupterm.c + 0 + 0 + + + 17 + 237 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\utime_mphal.c + utime_mphal.c + 0 + 0 + + + 17 + 238 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\machine_signal.c + machine_signal.c + 0 + 0 + + + 17 + 239 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\virtpin.c + virtpin.c + 0 + 0 + + + 17 + 240 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\machine_mem.c + machine_mem.c + 0 + 0 + + + 17 + 241 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\machine_spi.c + machine_spi.c + 0 + 0 + + + 17 + 242 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\machine_i2c.c + machine_i2c.c + 0 + 0 + + + 17 + 243 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\modnetwork.c + modnetwork.c + 0 + 0 + + + 17 + 244 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\extmod\modusocket.c + modusocket.c + 0 + 0 + + + + + micropython/drivers + 0 + 0 + 0 + 0 + + 18 + 245 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\drivers\bus\softspi.c + softspi.c + 0 + 0 + + + + + micropython/port + 0 + 0 + 0 + 0 + + 19 + 246 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\help.c + help.c + 0 + 0 + + + 19 + 247 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\mphalport.c + mphalport.c + 0 + 0 + + + 19 + 248 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\mpmain.c + mpmain.c + 0 + 0 + + + 19 + 249 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\mpthreadport.c + mpthreadport.c + 0 + 0 + + + 19 + 250 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\machine_hw_spi.c + machine_hw_spi.c + 0 + 0 + + + 19 + 251 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\machine_pin.c + machine_pin.c + 0 + 0 + + + 19 + 252 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\machine_timer.c + machine_timer.c + 0 + 0 + + + 19 + 253 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\machine_uart.c + machine_uart.c + 0 + 0 + + + 19 + 254 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\modesp8266.c + modesp8266.c + 0 + 0 + + + 19 + 255 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\modmachine.c + modmachine.c + 0 + 0 + + + 19 + 256 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\modutime.c + modutime.c + 0 + 0 + + + 19 + 257 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\vfs_tos.c + vfs_tos.c + 0 + 0 + + + 19 + 258 + 1 + 0 + 0 + 0 + ..\..\..\..\components\language\micropython\port\modules\vfs_tos_file.c + vfs_tos_file.c + 0 + 0 + + + 19 + 259 + 1 + 0 + 0 + 0 + ..\micropython_basic_demo\board\mphalboard.c + mphalboard.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_STM32L31RC.uvprojx b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_STM32L31RC.uvprojx new file mode 100644 index 00000000..a53dc0a3 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_STM32L31RC.uvprojx @@ -0,0 +1,2137 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + TencentOS_tiny + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32L431RCTx + STMicroelectronics + Keil.STM32L4xx_DFP.2.2.0 + http://www.keil.com/pack + IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x803FFFF) CLOCK(8000000) FPU2 CPUTYPE("Cortex-M4") + + + + + + + + + + + + + + + $$Device:STM32L431RCTx$CMSIS\SVD\STM32L4x1.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\obj\ + TencentOS_tiny + 1 + 0 + 1 + 1 + 0 + .\list\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + cmd.exe /C cd $P..\..\..\..\components\language\micropython\port & make clean-build V=1 + cmd.exe /C cd $P..\..\..\..\components\language\micropython\port & make genhdr V=1 PYTHON=python PORT_BOARD_DIR=$Pboard TARGET_GENHDR_DIR=$Pgenhdr + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x8000000 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x90000000 + 0x800000 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + USE_HAL_DRIVER,STM32L431xx,WITH_TOS_NET_ADAPTER,USE_ESP8266,USE_MICROPYTHON + + ..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\kernel\core\include;..\..\TOS-CONFIG;..\..\..\..\platform\arch\arm\cortex-m4\keil;..\..\..\..\kernel\pm\include;..\..\..\..\osal\cmsis_os;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\net\at\include;..\..\..\..\kernel\hal\include;..\..\..\..\devices\esp8266;..\..\..\..\net\at\include;..\..\..\..\net\sal_module_wrapper;..\..\..\..\net\socket_wrapper\include;..\..\BSP\Hardware\LCD_ST7789;..\..\BSP\Hardware\BH1750;..\..\BSP\Hardware\W25QXX-QSPI;..\..\..\..\examples\micropython_demo;..\..\..\..\components\fs\vfs\include;..\..\..\..\components\fs\fatfs\wrapper\include;..\..\..\..\components\fs\fatfs\3rdparty;..\..\..\..\components\language\micropython;..\..\..\..\components\language\micropython\port;..\..\..\..\components\language\micropython\port\modules;..\micropython_extra_demo;.\board;.\board\hal + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Application/MDK-ARM + + + startup_stm32l431xx.s + 2 + startup_stm32l431xx.s + + + + + Application/User + + + gpio.c + 1 + ..\..\BSP\Src\gpio.c + + + main.c + 1 + ..\..\BSP\Src\main.c + + + mcu_init.c + 1 + ..\..\BSP\Src\mcu_init.c + + + stm32l4xx_hal_msp.c + 1 + ..\..\BSP\Src\stm32l4xx_hal_msp.c + + + stm32l4xx_it_mpy.c + 1 + ..\..\BSP\Src\stm32l4xx_it_mpy.c + + + usart.c + 1 + ..\..\BSP\Src\usart.c + + + adc.c + 1 + ..\..\BSP\Src\adc.c + + + i2c.c + 1 + ..\..\BSP\Src\i2c.c + + + spi.c + 1 + ..\..\BSP\Src\spi.c + + + sdmmc.c + 1 + ..\..\BSP\Src\sdmmc.c + + + quadspi.c + 1 + ..\..\BSP\Src\quadspi.c + + + + + examples + + + micropython_demo.c + 1 + ..\..\..\..\examples\micropython_demo\micropython_demo.c + + + + + Drivers/STM32L4xx_HAL_Driver + + + stm32l4xx_hal_tim.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim.c + + + stm32l4xx_hal_tim_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_tim_ex.c + + + stm32l4xx_hal_uart.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart.c + + + stm32l4xx_hal_uart_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_uart_ex.c + + + stm32l4xx_hal.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal.c + + + stm32l4xx_hal_i2c.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c.c + + + stm32l4xx_hal_i2c_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_i2c_ex.c + + + stm32l4xx_hal_rcc.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc.c + + + stm32l4xx_hal_rcc_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rcc_ex.c + + + stm32l4xx_hal_flash.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash.c + + + stm32l4xx_hal_flash_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ex.c + + + stm32l4xx_hal_flash_ramfunc.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_flash_ramfunc.c + + + stm32l4xx_hal_gpio.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_gpio.c + + + stm32l4xx_hal_dma.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma.c + + + stm32l4xx_hal_dma_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dma_ex.c + + + stm32l4xx_hal_pwr.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr.c + + + stm32l4xx_hal_pwr_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_pwr_ex.c + + + stm32l4xx_hal_cortex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_cortex.c + + + stm32l4xx_hal_adc_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc_ex.c + + + stm32l4xx_hal_adc.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_adc.c + + + stm32l4xx_hal_dac.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac.c + + + stm32l4xx_hal_dac_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_dac_ex.c + + + stm32l4xx_hal_spi.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi.c + + + stm32l4xx_hal_spi_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_spi_ex.c + + + stm32l4xx_hal_sd.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_sd.c + + + stm32l4xx_hal_sd_ex.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_sd_ex.c + + + stm32l4xx_ll_sdmmc.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_ll_sdmmc.c + + + stm32l4xx_hal_qspi.c + 1 + ..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_qspi.c + + + + + Drivers/CMSIS + + + system_stm32l4xx.c + 1 + ..\..\BSP\Src\system_stm32l4xx.c + + + + + Hardware + + + BH1750.c + 1 + ..\..\BSP\Hardware\BH1750\BH1750.c + + + lcd_spi2_drv.c + 1 + ..\..\BSP\Hardware\LCD_ST7789\lcd_spi2_drv.c + + + w25qxx.c + 1 + ..\..\BSP\Hardware\W25QXX-QSPI\w25qxx.c + + + + + kernel + + + tos_mmblk.c + 1 + ..\..\..\..\kernel\core\tos_mmblk.c + + + tos_mmheap.c + 1 + ..\..\..\..\kernel\core\tos_mmheap.c + + + tos_mutex.c + 1 + ..\..\..\..\kernel\core\tos_mutex.c + + + tos_sched.c + 1 + ..\..\..\..\kernel\core\tos_sched.c + + + tos_sem.c + 1 + ..\..\..\..\kernel\core\tos_sem.c + + + tos_sys.c + 1 + ..\..\..\..\kernel\core\tos_sys.c + + + tos_task.c + 1 + ..\..\..\..\kernel\core\tos_task.c + + + tos_tick.c + 1 + ..\..\..\..\kernel\core\tos_tick.c + + + tos_time.c + 1 + ..\..\..\..\kernel\core\tos_time.c + + + tos_timer.c + 1 + ..\..\..\..\kernel\core\tos_timer.c + + + tos_event.c + 1 + ..\..\..\..\kernel\core\tos_event.c + + + tos_global.c + 1 + ..\..\..\..\kernel\core\tos_global.c + + + tos_pend.c + 1 + ..\..\..\..\kernel\core\tos_pend.c + + + tos_robin.c + 1 + ..\..\..\..\kernel\core\tos_robin.c + + + tos_binary_heap.c + 1 + ..\..\..\..\kernel\core\tos_binary_heap.c + + + tos_char_fifo.c + 1 + ..\..\..\..\kernel\core\tos_char_fifo.c + + + tos_completion.c + 1 + ..\..\..\..\kernel\core\tos_completion.c + + + tos_countdownlatch.c + 1 + ..\..\..\..\kernel\core\tos_countdownlatch.c + + + tos_mail_queue.c + 1 + ..\..\..\..\kernel\core\tos_mail_queue.c + + + tos_message_queue.c + 1 + ..\..\..\..\kernel\core\tos_message_queue.c + + + tos_priority_mail_queue.c + 1 + ..\..\..\..\kernel\core\tos_priority_mail_queue.c + + + tos_priority_message_queue.c + 1 + ..\..\..\..\kernel\core\tos_priority_message_queue.c + + + tos_priority_queue.c + 1 + ..\..\..\..\kernel\core\tos_priority_queue.c + + + tos_ring_queue.c + 1 + ..\..\..\..\kernel\core\tos_ring_queue.c + + + tos_stopwatch.c + 1 + ..\..\..\..\kernel\core\tos_stopwatch.c + + + + + cpu + + + port_s.S + 2 + ..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_s.S + + + tos_cpu.c + 1 + ..\..\..\..\arch\arm\arm-v7m\common\tos_cpu.c + + + port_c.c + 1 + ..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc\port_c.c + + + + + config + + + tos_config.h + 5 + ..\..\TOS-CONFIG\tos_config.h + + + + + hal + + + tos_hal_uart.c + 1 + ..\..\..\..\platform\hal\st\stm32l4xx\src\tos_hal_uart.c + + + tos_hal_sd.c + 1 + ..\..\..\..\platform\hal\st\stm32l4xx\src\tos_hal_sd.c + + + mp_tos_hal_pin.c + 1 + ..\micropython_basic_demo\board\hal\mp_tos_hal_pin.c + + + mp_tos_hal_spi.c + 1 + ..\micropython_basic_demo\board\hal\mp_tos_hal_spi.c + + + mp_tos_hal_uart.c + 1 + ..\micropython_basic_demo\board\hal\mp_tos_hal_uart.c + + + + + net + + + tos_at.c + 1 + ..\..\..\..\net\at\src\tos_at.c + + + sal_module_wrapper.c + 1 + ..\..\..\..\net\sal_module_wrapper\sal_module_wrapper.c + + + tos_at_socket.c + 1 + ..\..\..\..\net\socket_wrapper\tos_at_socket.c + + + tos_at_socket_lib.c + 1 + ..\..\..\..\net\socket_wrapper\tos_at_socket_lib.c + + + tos_at_socket_prv.c + 1 + ..\..\..\..\net\socket_wrapper\tos_at_socket_prv.c + + + + + devices + + + esp8266.c + 1 + ..\..\..\..\devices\esp8266\esp8266.c + + + + + vfs + + + tos_vfs.c + 1 + ..\..\..\..\components\fs\vfs\tos_vfs.c + + + tos_vfs_device.c + 1 + ..\..\..\..\components\fs\vfs\tos_vfs_device.c + + + tos_vfs_file.c + 1 + ..\..\..\..\components\fs\vfs\tos_vfs_file.c + + + tos_vfs_fs.c + 1 + ..\..\..\..\components\fs\vfs\tos_vfs_fs.c + + + tos_vfs_inode.c + 1 + ..\..\..\..\components\fs\vfs\tos_vfs_inode.c + + + + + fatfs + + + 0 + 1 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + tos_diskio.c + 1 + ..\..\..\..\components\fs\fatfs\wrapper\tos_diskio.c + + + tos_fatfs_drv.c + 1 + ..\..\..\..\components\fs\fatfs\wrapper\tos_fatfs_drv.c + + + tos_fatfs_vfs.c + 1 + ..\..\..\..\components\fs\fatfs\wrapper\tos_fatfs_vfs.c + + + tos_ff.c + 1 + ..\..\..\..\components\fs\fatfs\wrapper\tos_ff.c + + + tos_ffsystem.c + 1 + ..\..\..\..\components\fs\fatfs\wrapper\tos_ffsystem.c + + + tos_ffunicode.c + 1 + ..\..\..\..\components\fs\fatfs\wrapper\tos_ffunicode.c + + + + + micropython/py + + + 0 + 1 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + argcheck.c + 1 + ..\..\..\..\components\language\micropython\py\argcheck.c + + + asmarm.c + 1 + ..\..\..\..\components\language\micropython\py\asmarm.c + + + asmbase.c + 1 + ..\..\..\..\components\language\micropython\py\asmbase.c + + + asmthumb.c + 1 + ..\..\..\..\components\language\micropython\py\asmthumb.c + + + asmx64.c + 1 + ..\..\..\..\components\language\micropython\py\asmx64.c + + + asmx86.c + 1 + ..\..\..\..\components\language\micropython\py\asmx86.c + + + asmxtensa.c + 1 + ..\..\..\..\components\language\micropython\py\asmxtensa.c + + + bc.c + 1 + ..\..\..\..\components\language\micropython\py\bc.c + + + binary.c + 1 + ..\..\..\..\components\language\micropython\py\binary.c + + + builtinevex.c + 1 + ..\..\..\..\components\language\micropython\py\builtinevex.c + + + builtinhelp.c + 1 + ..\..\..\..\components\language\micropython\py\builtinhelp.c + + + builtinimport.c + 1 + ..\..\..\..\components\language\micropython\py\builtinimport.c + + + compile.c + 1 + ..\..\..\..\components\language\micropython\py\compile.c + + + emitbc.c + 1 + ..\..\..\..\components\language\micropython\py\emitbc.c + + + emitcommon.c + 1 + ..\..\..\..\components\language\micropython\py\emitcommon.c + + + emitglue.c + 1 + ..\..\..\..\components\language\micropython\py\emitglue.c + + + emitinlinethumb.c + 1 + ..\..\..\..\components\language\micropython\py\emitinlinethumb.c + + + emitinlinextensa.c + 1 + ..\..\..\..\components\language\micropython\py\emitinlinextensa.c + + + emitnarm.c + 1 + ..\..\..\..\components\language\micropython\py\emitnarm.c + + + emitnative.c + 1 + ..\..\..\..\components\language\micropython\py\emitnative.c + + + emitnthumb.c + 1 + ..\..\..\..\components\language\micropython\py\emitnthumb.c + + + emitnx64.c + 1 + ..\..\..\..\components\language\micropython\py\emitnx64.c + + + emitnx86.c + 1 + ..\..\..\..\components\language\micropython\py\emitnx86.c + + + emitnxtensa.c + 1 + ..\..\..\..\components\language\micropython\py\emitnxtensa.c + + + emitnxtensawin.c + 1 + ..\..\..\..\components\language\micropython\py\emitnxtensawin.c + + + formatfloat.c + 1 + ..\..\..\..\components\language\micropython\py\formatfloat.c + + + frozenmod.c + 1 + ..\..\..\..\components\language\micropython\py\frozenmod.c + + + gc.c + 1 + ..\..\..\..\components\language\micropython\py\gc.c + + + lexer.c + 1 + ..\..\..\..\components\language\micropython\py\lexer.c + + + malloc.c + 1 + ..\..\..\..\components\language\micropython\py\malloc.c + + + map.c + 1 + ..\..\..\..\components\language\micropython\py\map.c + + + modarray.c + 1 + ..\..\..\..\components\language\micropython\py\modarray.c + + + modbuiltins.c + 1 + ..\..\..\..\components\language\micropython\py\modbuiltins.c + + + modcmath.c + 1 + ..\..\..\..\components\language\micropython\py\modcmath.c + + + modcollections.c + 1 + ..\..\..\..\components\language\micropython\py\modcollections.c + + + modgc.c + 1 + ..\..\..\..\components\language\micropython\py\modgc.c + + + modio.c + 1 + ..\..\..\..\components\language\micropython\py\modio.c + + + modmath.c + 1 + ..\..\..\..\components\language\micropython\py\modmath.c + + + modmicropython.c + 1 + ..\..\..\..\components\language\micropython\py\modmicropython.c + + + modstruct.c + 1 + ..\..\..\..\components\language\micropython\py\modstruct.c + + + modsys.c + 1 + ..\..\..\..\components\language\micropython\py\modsys.c + + + modthread.c + 1 + ..\..\..\..\components\language\micropython\py\modthread.c + + + moduerrno.c + 1 + ..\..\..\..\components\language\micropython\py\moduerrno.c + + + mpprint.c + 1 + ..\..\..\..\components\language\micropython\py\mpprint.c + + + mpstate.c + 1 + ..\..\..\..\components\language\micropython\py\mpstate.c + + + mpz.c + 1 + ..\..\..\..\components\language\micropython\py\mpz.c + + + nativeglue.c + 1 + ..\..\..\..\components\language\micropython\py\nativeglue.c + + + nlr.c + 1 + ..\..\..\..\components\language\micropython\py\nlr.c + + + nlraarch64.c + 1 + ..\..\..\..\components\language\micropython\py\nlraarch64.c + + + nlrpowerpc.c + 1 + ..\..\..\..\components\language\micropython\py\nlrpowerpc.c + + + nlrsetjmp.c + 1 + ..\..\..\..\components\language\micropython\py\nlrsetjmp.c + + + nlrthumb.c + 1 + ..\..\..\..\components\language\micropython\py\nlrthumb.c + + + nlrx64.c + 1 + ..\..\..\..\components\language\micropython\py\nlrx64.c + + + nlrx86.c + 1 + ..\..\..\..\components\language\micropython\py\nlrx86.c + + + nlrxtensa.c + 1 + ..\..\..\..\components\language\micropython\py\nlrxtensa.c + + + obj.c + 1 + ..\..\..\..\components\language\micropython\py\obj.c + + + objarray.c + 1 + ..\..\..\..\components\language\micropython\py\objarray.c + + + objattrtuple.c + 1 + ..\..\..\..\components\language\micropython\py\objattrtuple.c + + + objbool.c + 1 + ..\..\..\..\components\language\micropython\py\objbool.c + + + objboundmeth.c + 1 + ..\..\..\..\components\language\micropython\py\objboundmeth.c + + + objcell.c + 1 + ..\..\..\..\components\language\micropython\py\objcell.c + + + objclosure.c + 1 + ..\..\..\..\components\language\micropython\py\objclosure.c + + + objcomplex.c + 1 + ..\..\..\..\components\language\micropython\py\objcomplex.c + + + objdeque.c + 1 + ..\..\..\..\components\language\micropython\py\objdeque.c + + + objdict.c + 1 + ..\..\..\..\components\language\micropython\py\objdict.c + + + objenumerate.c + 1 + ..\..\..\..\components\language\micropython\py\objenumerate.c + + + objexcept.c + 1 + ..\..\..\..\components\language\micropython\py\objexcept.c + + + objfilter.c + 1 + ..\..\..\..\components\language\micropython\py\objfilter.c + + + objfloat.c + 1 + ..\..\..\..\components\language\micropython\py\objfloat.c + + + objfun.c + 1 + ..\..\..\..\components\language\micropython\py\objfun.c + + + objgenerator.c + 1 + ..\..\..\..\components\language\micropython\py\objgenerator.c + + + objgetitemiter.c + 1 + ..\..\..\..\components\language\micropython\py\objgetitemiter.c + + + objint.c + 1 + ..\..\..\..\components\language\micropython\py\objint.c + + + objint_longlong.c + 1 + ..\..\..\..\components\language\micropython\py\objint_longlong.c + + + objint_mpz.c + 1 + ..\..\..\..\components\language\micropython\py\objint_mpz.c + + + objlist.c + 1 + ..\..\..\..\components\language\micropython\py\objlist.c + + + objmap.c + 1 + ..\..\..\..\components\language\micropython\py\objmap.c + + + objmodule.c + 1 + ..\..\..\..\components\language\micropython\py\objmodule.c + + + objnamedtuple.c + 1 + ..\..\..\..\components\language\micropython\py\objnamedtuple.c + + + objnone.c + 1 + ..\..\..\..\components\language\micropython\py\objnone.c + + + objobject.c + 1 + ..\..\..\..\components\language\micropython\py\objobject.c + + + objpolyiter.c + 1 + ..\..\..\..\components\language\micropython\py\objpolyiter.c + + + objproperty.c + 1 + ..\..\..\..\components\language\micropython\py\objproperty.c + + + objrange.c + 1 + ..\..\..\..\components\language\micropython\py\objrange.c + + + objreversed.c + 1 + ..\..\..\..\components\language\micropython\py\objreversed.c + + + objset.c + 1 + ..\..\..\..\components\language\micropython\py\objset.c + + + objsingleton.c + 1 + ..\..\..\..\components\language\micropython\py\objsingleton.c + + + objslice.c + 1 + ..\..\..\..\components\language\micropython\py\objslice.c + + + objstr.c + 1 + ..\..\..\..\components\language\micropython\py\objstr.c + + + objstringio.c + 1 + ..\..\..\..\components\language\micropython\py\objstringio.c + + + objstrunicode.c + 1 + ..\..\..\..\components\language\micropython\py\objstrunicode.c + + + objtuple.c + 1 + ..\..\..\..\components\language\micropython\py\objtuple.c + + + objtype.c + 1 + ..\..\..\..\components\language\micropython\py\objtype.c + + + objzip.c + 1 + ..\..\..\..\components\language\micropython\py\objzip.c + + + opmethods.c + 1 + ..\..\..\..\components\language\micropython\py\opmethods.c + + + pairheap.c + 1 + ..\..\..\..\components\language\micropython\py\pairheap.c + + + parse.c + 1 + ..\..\..\..\components\language\micropython\py\parse.c + + + parsenum.c + 1 + ..\..\..\..\components\language\micropython\py\parsenum.c + + + parsenumbase.c + 1 + ..\..\..\..\components\language\micropython\py\parsenumbase.c + + + persistentcode.c + 1 + ..\..\..\..\components\language\micropython\py\persistentcode.c + + + profile.c + 1 + ..\..\..\..\components\language\micropython\py\profile.c + + + pystack.c + 1 + ..\..\..\..\components\language\micropython\py\pystack.c + + + qstr.c + 1 + ..\..\..\..\components\language\micropython\py\qstr.c + + + reader.c + 1 + ..\..\..\..\components\language\micropython\py\reader.c + + + repl.c + 1 + ..\..\..\..\components\language\micropython\py\repl.c + + + ringbuf.c + 1 + ..\..\..\..\components\language\micropython\py\ringbuf.c + + + runtime.c + 1 + ..\..\..\..\components\language\micropython\py\runtime.c + + + runtime_utils.c + 1 + ..\..\..\..\components\language\micropython\py\runtime_utils.c + + + scheduler.c + 1 + ..\..\..\..\components\language\micropython\py\scheduler.c + + + scope.c + 1 + ..\..\..\..\components\language\micropython\py\scope.c + + + sequence.c + 1 + ..\..\..\..\components\language\micropython\py\sequence.c + + + showbc.c + 1 + ..\..\..\..\components\language\micropython\py\showbc.c + + + smallint.c + 1 + ..\..\..\..\components\language\micropython\py\smallint.c + + + stackctrl.c + 1 + ..\..\..\..\components\language\micropython\py\stackctrl.c + + + stream.c + 1 + ..\..\..\..\components\language\micropython\py\stream.c + + + unicode.c + 1 + ..\..\..\..\components\language\micropython\py\unicode.c + + + vm.c + 1 + ..\..\..\..\components\language\micropython\py\vm.c + + + vstr.c + 1 + ..\..\..\..\components\language\micropython\py\vstr.c + + + warning.c + 1 + ..\..\..\..\components\language\micropython\py\warning.c + + + + + micropython/shared + + + 0 + 1 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + readline.c + 1 + ..\..\..\..\components\language\micropython\shared\readline\readline.c + + + pyexec.c + 1 + ..\..\..\..\components\language\micropython\shared\runtime\pyexec.c + + + stdout_helpers.c + 1 + ..\..\..\..\components\language\micropython\shared\runtime\stdout_helpers.c + + + sys_stdio_mphal.c + 1 + ..\..\..\..\components\language\micropython\shared\runtime\sys_stdio_mphal.c + + + interrupt_char.c + 1 + ..\..\..\..\components\language\micropython\shared\runtime\interrupt_char.c + + + netutils.c + 1 + ..\..\..\..\components\language\micropython\shared\netutils\netutils.c + + + + + micropython/extmod + + + 0 + 1 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + modframebuf.c + 1 + ..\..\..\..\components\language\micropython\extmod\modframebuf.c + + + moduasyncio.c + 1 + ..\..\..\..\components\language\micropython\extmod\moduasyncio.c + + + modubinascii.c + 1 + ..\..\..\..\components\language\micropython\extmod\modubinascii.c + + + moductypes.c + 1 + ..\..\..\..\components\language\micropython\extmod\moductypes.c + + + moduhashlib.c + 1 + ..\..\..\..\components\language\micropython\extmod\moduhashlib.c + + + moduheapq.c + 1 + ..\..\..\..\components\language\micropython\extmod\moduheapq.c + + + modujson.c + 1 + ..\..\..\..\components\language\micropython\extmod\modujson.c + + + moduos.c + 1 + ..\..\..\..\components\language\micropython\extmod\moduos.c + + + modurandom.c + 1 + ..\..\..\..\components\language\micropython\extmod\modurandom.c + + + modure.c + 1 + ..\..\..\..\components\language\micropython\extmod\modure.c + + + moduselect.c + 1 + ..\..\..\..\components\language\micropython\extmod\moduselect.c + + + moduzlib.c + 1 + ..\..\..\..\components\language\micropython\extmod\moduzlib.c + + + vfs.c + 1 + ..\..\..\..\components\language\micropython\extmod\vfs.c + + + vfs_reader.c + 1 + ..\..\..\..\components\language\micropython\extmod\vfs_reader.c + + + uos_dupterm.c + 1 + ..\..\..\..\components\language\micropython\extmod\uos_dupterm.c + + + utime_mphal.c + 1 + ..\..\..\..\components\language\micropython\extmod\utime_mphal.c + + + machine_signal.c + 1 + ..\..\..\..\components\language\micropython\extmod\machine_signal.c + + + virtpin.c + 1 + ..\..\..\..\components\language\micropython\extmod\virtpin.c + + + machine_mem.c + 1 + ..\..\..\..\components\language\micropython\extmod\machine_mem.c + + + machine_spi.c + 1 + ..\..\..\..\components\language\micropython\extmod\machine_spi.c + + + machine_i2c.c + 1 + ..\..\..\..\components\language\micropython\extmod\machine_i2c.c + + + modnetwork.c + 1 + ..\..\..\..\components\language\micropython\extmod\modnetwork.c + + + modusocket.c + 1 + ..\..\..\..\components\language\micropython\extmod\modusocket.c + + + + + micropython/drivers + + + 0 + 1 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + softspi.c + 1 + ..\..\..\..\components\language\micropython\drivers\bus\softspi.c + + + + + micropython/port + + + help.c + 1 + ..\..\..\..\components\language\micropython\port\help.c + + + mphalport.c + 1 + ..\..\..\..\components\language\micropython\port\mphalport.c + + + mpmain.c + 1 + ..\..\..\..\components\language\micropython\port\mpmain.c + + + mpthreadport.c + 1 + ..\..\..\..\components\language\micropython\port\mpthreadport.c + + + machine_hw_spi.c + 1 + ..\..\..\..\components\language\micropython\port\modules\machine_hw_spi.c + + + machine_pin.c + 1 + ..\..\..\..\components\language\micropython\port\modules\machine_pin.c + + + machine_timer.c + 1 + ..\..\..\..\components\language\micropython\port\modules\machine_timer.c + + + machine_uart.c + 1 + ..\..\..\..\components\language\micropython\port\modules\machine_uart.c + + + modesp8266.c + 1 + ..\..\..\..\components\language\micropython\port\modules\modesp8266.c + + + modmachine.c + 1 + ..\..\..\..\components\language\micropython\port\modules\modmachine.c + + + modutime.c + 1 + ..\..\..\..\components\language\micropython\port\modules\modutime.c + + + vfs_tos.c + 1 + ..\..\..\..\components\language\micropython\port\modules\vfs_tos.c + + + vfs_tos_file.c + 1 + ..\..\..\..\components\language\micropython\port\modules\vfs_tos_file.c + + + mphalboard.c + 1 + ..\micropython_basic_demo\board\mphalboard.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + +
diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_W25Q64JV.FLM b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/BearPi_W25Q64JV.FLM new file mode 100644 index 0000000000000000000000000000000000000000..5b629cb7fe49abafd84e9df1ad9eb38455625e47 GIT binary patch literal 917608 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
2EgTq#?imZ9{Ky2`<7Ik_Pu74<5q_ zmd9}s&ye&Me5q8L9ivjy?V%LdP@Ag=ZLCUz0=?v7WP$V3I z9IRLdBsP;hjz4B9mH~;)gq@?0b+{mz0f`NkL?Wk6yh&JR+IIF324!vzonQW$Y-0lHGKWuH+Tgb)md2s`Ald0>u@GjN1LFc>0i zVDMuYW6~2CT5yPBKpc&np&$lLaSbN{v|6#=4h~Q93SzKXZbKTbdka?aa2X98uPj#( zgXwXGm(iZRg3B=6is<3OFzl7y5Q#}wsMGxZ8iC{2B*dX?7V74mOGjJ^RegPF3{8(;7N{Ky9K!Xev z8xl?IX2BL1C^jVe5P+5{)+^({>}gz>t}|FC*dUJBCj>jlK(WCTVjmZ5fq`O!veN*1 zSg--aQ69m_3I^miRiupQIspX+4gm=U0|W9K20utNMRFm=Vi(~uAPxh!3aH57U2z%2 zo+a2p28sW(=hm zRRjuIMbJyi$UqrFR&mh%oL~b3L1Z$TIP@mifEp1!Q9xl-@fwD?3JRI=QUHaa#8wBg z3yv!QI~tdf&(VCpfJzKb5>;VbK-cOORl zhX^*L>#hI_>AEq1f=OEeIuDmg17{p(2&lwhsfZ03LG0;*EizDSNCUB_33iZyVnZ5; z-7MGw1I30k%mb)ZvEHLN(K%2-3{IBYz~HAs#`Y^Qv$+bF0dcZ(g@B3-_7fQ)ONhNp zu!9T~8w@7)Qo$A&C^qPS2GgKtaT#TtIXx|)K?WBKZ%{_;6M`);P;3yl7NB*C_37tC z>tqEnctmak!>gDB{S}wd&so?j3Sw}4oWal248sLj3BOQQ!-uya;PeV>#d!q#>TR@J zFwC8XGZnfG!6kZoIfAS7_F4qgVOE=Oz!YygF0|-RB6vk_XF%0l(K=K{pgbX)@*r}{ z;tUiUQtc;>CK1oU@aJ(E&|Qe`7hiC`86e%^DlkxN5ZezB8zdtG{i@qL3l0HD2F*OE zN(^q2+fd~YvunSK4RwQ9)FtrB+OJ|mqKSpKP(K63mI>u=;%<e{5xP@JX zc=d|j48UeOI)>-#{ZxjexBSOoly@vH!WbT}_fr{8SK4NVlnEOA)t?_fl8@s^%E3L0 zNqz?-P8#CF4{^dR>`D4c73^NX2)A^%AWpc2U4=N|7S@h3`?&vJN%q_=pE=t*N`?u+<-4#se{-cMzCn%*}vBro{jkovm` zL(*GtQ5HkW!F{Nu$D=4t!bLno(&Ikw`R_$m--nBMhNQRrFM{wTT*NaZJ?@)4KSQtx zo+0Uh4|(tN)J!!ZPyxj9^SNw1j0rgq7p7ngs%AmN?l0Iu28s<1OKh`X3k(z+>igaR zR+fk zTaa}(3PUjI^Z*J<*8;Qwm$7m+qE`!O#c3FMsf;jyA+|{da6>$nq1a$0i~3~YEih1Q zu<~etj!~>HrHP0hE1)3b0l0&Lf|c|Tf?;KZ4Pxm-TLe3N1p*SAb|}IQ-5sz&*}mZ2 z50^3`uYCOVEoPqJsko*Xn(q;kgdZka8^F z^%&mXh>Lm|QV#Be{g(hn8sh!$JjA&!LKs8R;2sw1?_9)5V|jK#z1j^IVGK!w`=IAl zR3*|_98lE(5ZMf`AwXGnUBzY>-0DqNJwko35R zwffr)uqKCRNP6HyvvwfvT5*w|A?b17?DJ(*x85^ZeeF3PPl~~j(EF+F(eJ}p{$o8P8!Q|2;ziW*c8NfaWICY0Y0REC&Wo( zd5TCVTM5D#k_Pu7PYQsM#`5$cPPm03iou4$7?Q@yxejed)egcH06mTi^Gp!Sk1ddb z1}%t`Xx}0RS|mR)DjY2RN%JEl}CyuoY||B4F( z0|tr>y$`W33wDr!VnYu?>`Q_zFi>phInDs+Il%^#dJ!!MsNnS<7^s3tY;ETXRgr

R+7pf8i#Rh|k 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�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­~({hf)* zrkHsuk$nh0jdN96_VG+tl~b$!dZ(+jCO-LfnvXwYrJ}KuL2<60w?4J=mUIDU>Piza zcct$~%ZsU>%2UHgEsSSAtC+s1`mc8R6{(Z|%b6`AADiPs*y`EtQ#;#*oxz#+B5r>M zTs`|uHuq!4yh2tvW!hiw9Vw@utV)mg`0F`OddwMb^>zM{)w7*hy3xgcxn&o9SQQ-8Tw#5NMEXG>cP<5@OVRabsWmW`|0Ggfiwm^MjpC&Qi4 zP5)gzL$017X@)eN;S)@cM2pRgW~0YX<2{jJh*3q1XMU_$H09H>ltiyt#s2YUm?EWN z#-1e&a`i;HdZLtx()5Q;K6nKsH86D8qRPm`;sNt!09H++Ig(()oxBsNQ2y`U^oEsSS1SzSHjulF%#cagn{ zJ!4hpM`@BVrbh!?Jv*+R9cgwno#7KqjzkO2wvkHbGN1gyysQ@gA74I7MT}>Dtg4#+ zX<0x@wS4ma@n@JKsfVIr#-1e&a`i;HdZLtxlFpew{*4>%^|2c_^cAVq7bk5sjAyc} zo;vl@vY1@ezOkxPW!flXOq7IMJx#8jCTW_a-tY+)l$IAc+s2mwR-bJbsTRgFK~C-Z zD}EQxJ=WOmoL@5*HCp_Eco)kOVHlK)Ey_PK6Y8cOAvSRv- zPs^prRqY$Ax|&QIWsKz{;Z{$RtEWktCaE`kf(51JMb5U3WA&oaEGpBQ7|%pGwX5dS zG*PZ%5BYP3+t7pvBGiEwtnhx;^CrzT7Gw~H8qrFSBPhfvKmz6;!jAyQ_ zUfA_ldE9p844> 4) & 0x0F) +#define ST_PIN_NUM(port) ((uint8_t)((port) & 0x0F)) + +__STATIC__ hal_pin_cb_t hal_pin_irq_handler[ST_EXTI_VECTOR_SIZE]; +__STATIC__ void *hal_pin_irq_handler_arg[ST_EXTI_VECTOR_SIZE]; +__STATIC__ GPIO_TypeDef *hal_pin_irq_gpio[ST_EXTI_VECTOR_SIZE]; + +__STATIC__ const uint8_t nvic_irq_channel[ST_EXTI_VECTOR_SIZE] = { + EXTI0_IRQn, EXTI1_IRQn, EXTI2_IRQn, EXTI3_IRQn, + EXTI4_IRQn, EXTI9_5_IRQn, EXTI9_5_IRQn, EXTI9_5_IRQn, + EXTI9_5_IRQn, EXTI9_5_IRQn, EXTI15_10_IRQn, EXTI15_10_IRQn, + EXTI15_10_IRQn, EXTI15_10_IRQn, EXTI15_10_IRQn, EXTI15_10_IRQn, +}; + +__STATIC__ int mask2no(uint32_t mask) { + for (int i = 0; i < 32; i++) { + if ((1U << i) == mask) { + return i; + } + } + return -1; +} + +__API__ int tos_hal_pin_init(hal_pin_t *pin, hal_pin_port_t port, hal_pin_mode_t mode) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + GPIO_InitTypeDef gpio_init; + + if (!pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)(GPIOA_BASE + ST_PORT_NUM(port) * 0x0400UL); + gpio_pin = 1UL << ST_PIN_NUM(port); + + gpio_init.Pin = gpio_pin; + gpio_init.Speed = GPIO_SPEED_FREQ_HIGH; + switch (mode) { + case HAL_PIN_MODE_OUTPUT: + gpio_init.Mode = GPIO_MODE_OUTPUT_PP; + gpio_init.Pull = GPIO_NOPULL; + break; + case HAL_PIN_MODE_OUTPUT_OD: + gpio_init.Mode = GPIO_MODE_OUTPUT_OD; + gpio_init.Pull = GPIO_NOPULL; + break; + case HAL_PIN_MODE_INPUT: + gpio_init.Mode = GPIO_MODE_INPUT; + gpio_init.Pull = GPIO_NOPULL; + break; + case HAL_PIN_MODE_INPUT_PULLUP: + gpio_init.Mode = GPIO_MODE_INPUT; + gpio_init.Pull = GPIO_PULLUP; + break; + case HAL_PIN_MODE_INPUT_PULLDOWN: + gpio_init.Mode = GPIO_MODE_INPUT; + gpio_init.Pull = GPIO_PULLDOWN; + break; + default: + return -1; + } + HAL_GPIO_Init((GPIO_TypeDef *)gpiox, &gpio_init); + + pin->port = port; + pin->private_gpio = gpiox; + pin->private_pin = gpio_pin; + pin->mode = mode; + + return 0; +} + +__API__ int tos_hal_pin_irq(hal_pin_t *pin, hal_pin_irq_t irq) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + uint32_t gpio_pin_num; + GPIO_InitTypeDef gpio_init; + TOS_CPU_CPSR_ALLOC(); + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + gpio_pin_num = mask2no(gpio_pin); + if (gpio_pin_num >= ST_EXTI_VECTOR_SIZE) { + return -1; + } + + TOS_CPU_INT_DISABLE(); + if (hal_pin_irq_gpio[gpio_pin_num] != NULL && hal_pin_irq_gpio[gpio_pin_num] != gpiox) { + TOS_CPU_INT_ENABLE(); + return -1; + } + + if (irq == HAL_PIN_IRQ_NONE) { + hal_pin_irq_gpio[gpio_pin_num] = NULL; + hal_pin_irq_handler[gpio_pin_num] = NULL; + hal_pin_irq_handler_arg[gpio_pin_num] = NULL; + TOS_CPU_INT_ENABLE(); + HAL_NVIC_DisableIRQ(nvic_irq_channel[gpio_pin_num]); + } else { + hal_pin_irq_gpio[gpio_pin_num] = gpiox; + TOS_CPU_INT_ENABLE(); + gpio_init.Pin = gpio_pin; + gpio_init.Speed = GPIO_SPEED_FREQ_HIGH; + gpio_init.Mode = GPIO_MODE_IT_RISING_FALLING; + switch (irq) { + case HAL_PIN_IRQ_RISING: + gpio_init.Mode = GPIO_MODE_IT_RISING; + break; + case HAL_PIN_IRQ_FALLING: + gpio_init.Mode = GPIO_MODE_IT_FALLING; + break; + case HAL_PIN_IRQ_RISING_FALLING: + gpio_init.Mode = GPIO_MODE_IT_RISING_FALLING; + break; + } + switch (pin->mode) { + case HAL_PIN_MODE_INPUT_PULLUP: + gpio_init.Pull = GPIO_PULLUP; + break; + case HAL_PIN_MODE_INPUT_PULLDOWN: + gpio_init.Pull = GPIO_PULLDOWN; + break; + default: + gpio_init.Pull = GPIO_NOPULL; + break; + } + HAL_GPIO_Init(gpiox, &gpio_init); + HAL_NVIC_SetPriority(nvic_irq_channel[gpio_pin_num], 2, 0); + HAL_NVIC_EnableIRQ(nvic_irq_channel[gpio_pin_num]); + + pin->irq = irq; + } + + return 0; +} + +__API__ int tos_hal_pin_irq_callback(hal_pin_t *pin, hal_pin_cb_t callback, void *cb_arg) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + uint32_t gpio_pin_num; + TOS_CPU_CPSR_ALLOC(); + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + gpio_pin_num = mask2no(gpio_pin); + if (gpio_pin_num >= ST_EXTI_VECTOR_SIZE) { + return -1; + } + + TOS_CPU_INT_DISABLE(); + if (hal_pin_irq_gpio[gpio_pin_num] != NULL && hal_pin_irq_gpio[gpio_pin_num] != gpiox) { + TOS_CPU_INT_ENABLE(); + return -1; + } + hal_pin_irq_handler[gpio_pin_num] = gpiox; + hal_pin_irq_handler[gpio_pin_num] = callback; + hal_pin_irq_handler_arg[gpio_pin_num] = cb_arg; + TOS_CPU_INT_ENABLE(); + + return 0; +} + +__API__ int tos_hal_pin_write(hal_pin_t *pin, int state) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + + HAL_GPIO_WritePin(gpiox, gpio_pin, (state == 0) ? GPIO_PIN_RESET : GPIO_PIN_SET); + + return 0; +} + +__API__ int tos_hal_pin_read(hal_pin_t *pin) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + + return (HAL_GPIO_ReadPin(gpiox, gpio_pin) == GPIO_PIN_RESET) ? 0 : 1; +} + +__API__ int tos_hal_pin_deinit(hal_pin_t *pin) +{ + GPIO_TypeDef *gpiox; + uint32_t gpio_pin; + uint32_t gpio_pin_num; + TOS_CPU_CPSR_ALLOC(); + + if (!pin) { + return -1; + } + + if (!pin->private_gpio || !pin->private_pin) { + return -1; + } + + gpiox = (GPIO_TypeDef *)pin->private_gpio; + gpio_pin = (uint32_t)pin->private_pin; + gpio_pin_num = mask2no(gpio_pin); + + TOS_CPU_INT_DISABLE(); + if (hal_pin_irq_gpio[gpio_pin_num] == gpiox) { + hal_pin_irq_gpio[gpio_pin_num] = NULL; + hal_pin_irq_handler[gpio_pin_num] = NULL; + hal_pin_irq_handler_arg[gpio_pin_num] = NULL; + } + TOS_CPU_INT_ENABLE(); + HAL_GPIO_DeInit(gpiox, gpio_pin); + + return 0; +} + +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +{ + uint32_t gpio_pin_num = mask2no(GPIO_Pin); + hal_pin_cb_t callback; + uint32_t cb_arg; + if (gpio_pin_num < ST_EXTI_VECTOR_SIZE) { + + callback = hal_pin_irq_handler[gpio_pin_num]; + cb_arg = hal_pin_irq_handler_arg[gpio_pin_num]; + if (callback) { + callback(cb_arg); + } + } +} + + diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_pin.h b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_pin.h new file mode 100644 index 00000000..6ac564d1 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_pin.h @@ -0,0 +1,45 @@ +#ifndef _TOS_HAL_PIN_H_ +#define _TOS_HAL_PIN_H_ + +typedef unsigned char hal_pin_port_t; + +typedef enum hal_pin_mode_en { + HAL_PIN_MODE_OUTPUT = 0, + HAL_PIN_MODE_OUTPUT_OD, + HAL_PIN_MODE_INPUT, + HAL_PIN_MODE_INPUT_PULLUP, + HAL_PIN_MODE_INPUT_PULLDOWN, +} hal_pin_mode_t; + +typedef enum hal_pin_irq_en { + HAL_PIN_IRQ_NONE = 0x00, + HAL_PIN_IRQ_RISING = 0x01, + HAL_PIN_IRQ_FALLING = 0x02, + HAL_PIN_IRQ_RISING_FALLING = 0x03, +} hal_pin_irq_t; + +typedef struct hal_pin_st { + hal_pin_port_t port; + void *private_gpio; + void *private_pin; + hal_pin_mode_t mode; + hal_pin_irq_t irq; +} hal_pin_t; + + +typedef void (*hal_pin_cb_t)(void *arg); + +__API__ int tos_hal_pin_init(hal_pin_t *pin, hal_pin_port_t port, hal_pin_mode_t mode); + +__API__ int tos_hal_pin_write(hal_pin_t *pin, int state); + +__API__ int tos_hal_pin_read(hal_pin_t *pin); + +__API__ int tos_hal_pin_mode(hal_pin_t *pin, hal_pin_mode_t mode); + +__API__ int tos_hal_pin_irq(hal_pin_t *pin, hal_pin_irq_t irq); + +__API__ int tos_hal_pin_irq_callback(hal_pin_t *pin, hal_pin_cb_t callback, void *cb_arg); + + +#endif diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_spi.c b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_spi.c new file mode 100644 index 00000000..b4f58be9 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_spi.c @@ -0,0 +1,80 @@ +#include "tos_k.h" +#include "mp_tos_hal_spi.h" +#include "stm32l4xx_hal.h" +#include "spi.h" + +__API__ int tos_hal_spi_init(hal_spi_t *spi, hal_spi_port_t port) +{ + if (!spi) { + return -1; + } + + if (port == HAL_SPI_PORT_1) { + spi->private_spi = &hspi1; + MX_SPI1_Init(); + } else if (port == HAL_SPI_PORT_2) { + spi->private_spi = &hspi2; + MX_SPI2_Init(); + } else if (port == HAL_SPI_PORT_3) { + spi->private_spi = &hspi3; + MX_SPI3_Init(); + } else { + return -1; + } + + return 0; +} + +__API__ int tos_hal_spi_transfer(hal_spi_t *spi, const uint8_t *send_buf, uint8_t *recv_buf, size_t size, uint32_t timeout) +{ + HAL_StatusTypeDef hal_status; + SPI_HandleTypeDef *spi_handle; + + if (!spi || (!send_buf && !recv_buf)) { + return -1; + } + + if (!spi->private_spi) { + return -1; + } + + spi_handle = (SPI_HandleTypeDef *)spi->private_spi; + + if (send_buf && recv_buf) { + hal_status = HAL_SPI_TransmitReceive(spi_handle, send_buf, recv_buf, size, timeout); + } else if (send_buf) { + hal_status = HAL_SPI_Transmit(spi_handle, send_buf, size, timeout); + } else if (recv_buf) { + hal_status = HAL_SPI_Receive(spi_handle, send_buf, size, timeout); + } + + if (hal_status != HAL_OK) { + return -1; + } + return 0; +} + +__API__ int tos_hal_spi_deinit(hal_spi_t *spi) +{ + HAL_StatusTypeDef hal_status; + SPI_HandleTypeDef *spi_handle; + + if (!spi) { + return -1; + } + + if (!spi->private_spi) { + return -1; + } + + spi_handle = (SPI_HandleTypeDef *)spi->private_spi; + + hal_status = HAL_SPI_DeInit(spi_handle); + HAL_SPI_MspDeInit(spi_handle); + + if (hal_status != HAL_OK) { + return -1; + } + + return 0; +} diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_spi.h b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_spi.h new file mode 100644 index 00000000..6dad4e9f --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_spi.h @@ -0,0 +1,22 @@ +#ifndef _TOS_HAL_SPI_H_ +#define _TOS_HAL_SPI_H_ + +typedef enum hal_spi_port_en { + HAL_SPI_PORT_0 = 0, + HAL_SPI_PORT_1, + HAL_SPI_PORT_2, + HAL_SPI_PORT_3, +} hal_spi_port_t; + +typedef struct hal_spi_st { + hal_spi_port_t port; + void *private_spi; +} hal_spi_t; + +__API__ int tos_hal_spi_init(hal_spi_t *spi, hal_spi_port_t port); + +__API__ int tos_hal_spi_transfer(hal_spi_t *spi, const uint8_t *send_buf, uint8_t *recv_buf, size_t size, uint32_t timeout); + +__API__ int tos_hal_spi_deinit(hal_spi_t *spi); + +#endif diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_uart.c b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_uart.c new file mode 100644 index 00000000..a86dd40d --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_uart.c @@ -0,0 +1,26 @@ +#include "tos_k.h" +#include "mp_tos_hal_uart.h" +#include "stm32l4xx_hal.h" +#include "usart.h" + +__API__ int tos_hal_uart_recv_start(hal_uart_t *uart, const uint8_t *buf, size_t size) +{ + HAL_StatusTypeDef hal_status; + UART_HandleTypeDef *uart_handle; + + if (!uart || !buf) { + return -1; + } + + if (!uart->private_uart) { + return -1; + } + + uart_handle = (UART_HandleTypeDef *)uart->private_uart; + + hal_status = HAL_UART_Receive_IT(uart_handle, (uint8_t *)buf, size); + if (hal_status != HAL_OK) { + return -1; + } + return 0; +} diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_uart.h b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_uart.h new file mode 100644 index 00000000..31b79dbf --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/hal/mp_tos_hal_uart.h @@ -0,0 +1,8 @@ +#ifndef _MP_TOS_HAL_UART_H_ +#define _MP_TOS_HAL_UART_H_ + +#include "tos_hal_uart.h" + +__API__ int tos_hal_uart_recv_start(hal_uart_t *uart, const uint8_t *buf, size_t size); + +#endif diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mpconfigboard.h b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mpconfigboard.h new file mode 100644 index 00000000..33fba638 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mpconfigboard.h @@ -0,0 +1,16 @@ +/* board specific config */ +#define MICROPY_HW_BOARD_NAME "BearPi" +#define MICROPY_HW_MCU_NAME "STM32F431RC" + +#define MICROPY_HW_UART_NUM 4 +#define MICROPY_HW_UART_REPL 2 +#define MICROPY_HW_SPI_NUM 4 + +/* project specific config */ +#define MICROPY_CONFIG_ROM_LEVEL (MICROPY_CONFIG_ROM_LEVEL_EXTRA_FEATURES) + +#define MP_USING_QSPI_FLASH +#define MP_USING_VFS +#define MP_USING_NETWORK +#define MP_USING_MACHINE_SPI +#define MP_USING_MACHINE_I2C diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mpconfigboard.mk b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mpconfigboard.mk new file mode 100644 index 00000000..e69de29b diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mphalboard.c b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mphalboard.c new file mode 100644 index 00000000..58d8f0a0 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mphalboard.c @@ -0,0 +1,109 @@ + +#include "py/mpconfig.h" +#include "py/mphal.h" +#include "py/obj.h" +#include "py/runtime.h" + +#include "modmachine.h" + +#if !(MP_GEN_HDR) +#include "tos_k.h" +#include "main.h" +#endif + +/********************** Tick *************************/ + +static uint32_t systick_get_us() { + // get systick value + uint32_t counter = SysTick->VAL; + uint32_t load = SysTick->LOAD; + + // convert from decrementing to incrementing + counter = load - counter; + + return (counter * 1000) / (load + 1); +} + +mp_uint_t mp_hal_ticks_us(void) { + uint32_t ms = tos_tick2millisec(tos_systick_get()); + uint32_t us = systick_get_us(); + return ms * 1000 + us; +} + +void mp_hal_delay_us(mp_uint_t usec) { + mp_uint_t ms = usec / 1000; + mp_uint_t us = usec % 1000; + if (ms > 0) + mp_hal_delay_ms(ms); + mp_uint_t start = mp_hal_ticks_us(); + while (mp_hal_ticks_us() - start < us) { + } +} + +/********************** GPIO *************************/ + +#define ST_PIN(port_num, pin_num) ((uint8_t)(((port_num) << 4) & 0xF0) | ((pin_num) & 0x0F)) + +STATIC const mp_rom_map_elem_t machine_pins_locals_dict_table[] = { + + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_INT(ST_PIN(0, 0)) }, + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_INT(ST_PIN(0, 1)) }, + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_INT(ST_PIN(0, 2)) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_INT(ST_PIN(0, 3)) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_INT(ST_PIN(0, 4)) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_INT(ST_PIN(0, 5)) }, + { MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_INT(ST_PIN(0, 6)) }, + { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_INT(ST_PIN(0, 7)) }, + { MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_INT(ST_PIN(0, 8)) }, + { MP_ROM_QSTR(MP_QSTR_A9), MP_ROM_INT(ST_PIN(0, 9)) }, + { MP_ROM_QSTR(MP_QSTR_A10), MP_ROM_INT(ST_PIN(0, 10)) }, + { MP_ROM_QSTR(MP_QSTR_A11), MP_ROM_INT(ST_PIN(0, 11)) }, + { MP_ROM_QSTR(MP_QSTR_A12), MP_ROM_INT(ST_PIN(0, 12)) }, + { MP_ROM_QSTR(MP_QSTR_A13), MP_ROM_INT(ST_PIN(0, 13)) }, + { MP_ROM_QSTR(MP_QSTR_A14), MP_ROM_INT(ST_PIN(0, 14)) }, + { MP_ROM_QSTR(MP_QSTR_A15), MP_ROM_INT(ST_PIN(0, 15)) }, + + { MP_ROM_QSTR(MP_QSTR_B0), MP_ROM_INT(ST_PIN(1, 0)) }, + { MP_ROM_QSTR(MP_QSTR_B1), MP_ROM_INT(ST_PIN(1, 1)) }, + { MP_ROM_QSTR(MP_QSTR_B2), MP_ROM_INT(ST_PIN(1, 2)) }, + { MP_ROM_QSTR(MP_QSTR_B3), MP_ROM_INT(ST_PIN(1, 3)) }, + { MP_ROM_QSTR(MP_QSTR_B4), MP_ROM_INT(ST_PIN(1, 4)) }, + { MP_ROM_QSTR(MP_QSTR_B5), MP_ROM_INT(ST_PIN(1, 5)) }, + { MP_ROM_QSTR(MP_QSTR_B6), MP_ROM_INT(ST_PIN(1, 6)) }, + { MP_ROM_QSTR(MP_QSTR_B7), MP_ROM_INT(ST_PIN(1, 7)) }, + { MP_ROM_QSTR(MP_QSTR_B8), MP_ROM_INT(ST_PIN(1, 8)) }, + { MP_ROM_QSTR(MP_QSTR_B9), MP_ROM_INT(ST_PIN(1, 9)) }, + { MP_ROM_QSTR(MP_QSTR_B10), MP_ROM_INT(ST_PIN(1, 10)) }, + { MP_ROM_QSTR(MP_QSTR_B11), MP_ROM_INT(ST_PIN(1, 11)) }, + { MP_ROM_QSTR(MP_QSTR_B12), MP_ROM_INT(ST_PIN(1, 12)) }, + { MP_ROM_QSTR(MP_QSTR_B13), MP_ROM_INT(ST_PIN(1, 13)) }, + { MP_ROM_QSTR(MP_QSTR_B14), MP_ROM_INT(ST_PIN(1, 14)) }, + { MP_ROM_QSTR(MP_QSTR_B15), MP_ROM_INT(ST_PIN(1, 15)) }, + + { MP_ROM_QSTR(MP_QSTR_C0), MP_ROM_INT(ST_PIN(2, 0)) }, + { MP_ROM_QSTR(MP_QSTR_C1), MP_ROM_INT(ST_PIN(2, 1)) }, + { MP_ROM_QSTR(MP_QSTR_C2), MP_ROM_INT(ST_PIN(2, 2)) }, + { MP_ROM_QSTR(MP_QSTR_C3), MP_ROM_INT(ST_PIN(2, 3)) }, + { MP_ROM_QSTR(MP_QSTR_C4), MP_ROM_INT(ST_PIN(2, 4)) }, + { MP_ROM_QSTR(MP_QSTR_C5), MP_ROM_INT(ST_PIN(2, 5)) }, + { MP_ROM_QSTR(MP_QSTR_C6), MP_ROM_INT(ST_PIN(2, 6)) }, + { MP_ROM_QSTR(MP_QSTR_C7), MP_ROM_INT(ST_PIN(2, 7)) }, + { MP_ROM_QSTR(MP_QSTR_C8), MP_ROM_INT(ST_PIN(2, 8)) }, + { MP_ROM_QSTR(MP_QSTR_C9), MP_ROM_INT(ST_PIN(2, 9)) }, + { MP_ROM_QSTR(MP_QSTR_C10), MP_ROM_INT(ST_PIN(2, 10)) }, + { MP_ROM_QSTR(MP_QSTR_C11), MP_ROM_INT(ST_PIN(2, 11)) }, + { MP_ROM_QSTR(MP_QSTR_C12), MP_ROM_INT(ST_PIN(2, 12)) }, + { MP_ROM_QSTR(MP_QSTR_C13), MP_ROM_INT(ST_PIN(2, 13)) }, + { MP_ROM_QSTR(MP_QSTR_C14), MP_ROM_INT(ST_PIN(2, 14)) }, + { MP_ROM_QSTR(MP_QSTR_C15), MP_ROM_INT(ST_PIN(2, 15)) }, + + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_INT(ST_PIN(3, 2)) }, + + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_INT(ST_PIN(2, 13)) }, // C13 + { MP_ROM_QSTR(MP_QSTR_KEY1), MP_ROM_INT(ST_PIN(1, 2)) }, // B2 + { MP_ROM_QSTR(MP_QSTR_KEY2), MP_ROM_INT(ST_PIN(1, 3)) }, // B3 + +}; +MP_DEFINE_CONST_DICT(machine_pins_locals_dict, machine_pins_locals_dict_table); + + diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mphalboard.h b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mphalboard.h new file mode 100644 index 00000000..bebb5f6d --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/board/mphalboard.h @@ -0,0 +1,11 @@ +#ifndef _MPHALBOARD_H_ +#define _MPHALBOARD_H_ + +#include "py/obj.h" + +extern mp_uint_t mp_hal_ticks_us(void); +extern void mp_hal_delay_us(mp_uint_t usec); + +extern const mp_obj_dict_t machine_pins_locals_dict; + +#endif /* _MPHALBOARD_H_ */ diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/moduledefs.h b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/moduledefs.h new file mode 100644 index 00000000..6cc5d240 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/moduledefs.h @@ -0,0 +1,150 @@ +// Automatically generated by makemoduledefs.py. + +extern const struct _mp_obj_module_t mp_module___main__; +#undef MODULE_DEF_MP_QSTR___MAIN__ +#define MODULE_DEF_MP_QSTR___MAIN__ { MP_ROM_QSTR(MP_QSTR___main__), MP_ROM_PTR(&mp_module___main__) }, + +extern const struct _mp_obj_module_t mp_module_thread; +#undef MODULE_DEF_MP_QSTR__THREAD +#define MODULE_DEF_MP_QSTR__THREAD { MP_ROM_QSTR(MP_QSTR__thread), MP_ROM_PTR(&mp_module_thread) }, + +extern const struct _mp_obj_module_t mp_module_uasyncio; +#undef MODULE_DEF_MP_QSTR__UASYNCIO +#define MODULE_DEF_MP_QSTR__UASYNCIO { MP_ROM_QSTR(MP_QSTR__uasyncio), MP_ROM_PTR(&mp_module_uasyncio) }, + +extern const struct _mp_obj_module_t mp_module_builtins; +#undef MODULE_DEF_MP_QSTR_BUILTINS +#define MODULE_DEF_MP_QSTR_BUILTINS { MP_ROM_QSTR(MP_QSTR_builtins), MP_ROM_PTR(&mp_module_builtins) }, + +extern const struct _mp_obj_module_t mp_module_cmath; +#undef MODULE_DEF_MP_QSTR_CMATH +#define MODULE_DEF_MP_QSTR_CMATH { MP_ROM_QSTR(MP_QSTR_cmath), MP_ROM_PTR(&mp_module_cmath) }, + +extern const struct _mp_obj_module_t mp_module_framebuf; +#undef MODULE_DEF_MP_QSTR_FRAMEBUF +#define MODULE_DEF_MP_QSTR_FRAMEBUF { MP_ROM_QSTR(MP_QSTR_framebuf), MP_ROM_PTR(&mp_module_framebuf) }, + +extern const struct _mp_obj_module_t mp_module_gc; +#undef MODULE_DEF_MP_QSTR_GC +#define MODULE_DEF_MP_QSTR_GC { MP_ROM_QSTR(MP_QSTR_gc), MP_ROM_PTR(&mp_module_gc) }, + +extern const struct _mp_obj_module_t mp_module_math; +#undef MODULE_DEF_MP_QSTR_MATH +#define MODULE_DEF_MP_QSTR_MATH { MP_ROM_QSTR(MP_QSTR_math), MP_ROM_PTR(&mp_module_math) }, + +extern const struct _mp_obj_module_t mp_module_micropython; +#undef MODULE_DEF_MP_QSTR_MICROPYTHON +#define MODULE_DEF_MP_QSTR_MICROPYTHON { MP_ROM_QSTR(MP_QSTR_micropython), MP_ROM_PTR(&mp_module_micropython) }, + +extern const struct _mp_obj_module_t mp_module_network; +#undef MODULE_DEF_MP_QSTR_NETWORK +#define MODULE_DEF_MP_QSTR_NETWORK { MP_ROM_QSTR(MP_QSTR_network), MP_ROM_PTR(&mp_module_network) }, + +extern const struct _mp_obj_module_t mp_module_uarray; +#undef MODULE_DEF_MP_QSTR_UARRAY +#define MODULE_DEF_MP_QSTR_UARRAY { MP_ROM_QSTR(MP_QSTR_uarray), MP_ROM_PTR(&mp_module_uarray) }, + +extern const struct _mp_obj_module_t mp_module_ubinascii; +#undef MODULE_DEF_MP_QSTR_UBINASCII +#define MODULE_DEF_MP_QSTR_UBINASCII { MP_ROM_QSTR(MP_QSTR_ubinascii), MP_ROM_PTR(&mp_module_ubinascii) }, + +extern const struct _mp_obj_module_t mp_module_collections; +#undef MODULE_DEF_MP_QSTR_UCOLLECTIONS +#define MODULE_DEF_MP_QSTR_UCOLLECTIONS { MP_ROM_QSTR(MP_QSTR_ucollections), MP_ROM_PTR(&mp_module_collections) }, + +extern const struct _mp_obj_module_t mp_module_uctypes; +#undef MODULE_DEF_MP_QSTR_UCTYPES +#define MODULE_DEF_MP_QSTR_UCTYPES { MP_ROM_QSTR(MP_QSTR_uctypes), MP_ROM_PTR(&mp_module_uctypes) }, + +extern const struct _mp_obj_module_t mp_module_uerrno; +#undef MODULE_DEF_MP_QSTR_UERRNO +#define MODULE_DEF_MP_QSTR_UERRNO { MP_ROM_QSTR(MP_QSTR_uerrno), MP_ROM_PTR(&mp_module_uerrno) }, + +extern const struct _mp_obj_module_t mp_module_uhashlib; +#undef MODULE_DEF_MP_QSTR_UHASHLIB +#define MODULE_DEF_MP_QSTR_UHASHLIB { MP_ROM_QSTR(MP_QSTR_uhashlib), MP_ROM_PTR(&mp_module_uhashlib) }, + +extern const struct _mp_obj_module_t mp_module_uheapq; +#undef MODULE_DEF_MP_QSTR_UHEAPQ +#define MODULE_DEF_MP_QSTR_UHEAPQ { MP_ROM_QSTR(MP_QSTR_uheapq), MP_ROM_PTR(&mp_module_uheapq) }, + +extern const struct _mp_obj_module_t mp_module_io; +#undef MODULE_DEF_MP_QSTR_UIO +#define MODULE_DEF_MP_QSTR_UIO { MP_ROM_QSTR(MP_QSTR_uio), MP_ROM_PTR(&mp_module_io) }, + +extern const struct _mp_obj_module_t mp_module_ujson; +#undef MODULE_DEF_MP_QSTR_UJSON +#define MODULE_DEF_MP_QSTR_UJSON { MP_ROM_QSTR(MP_QSTR_ujson), MP_ROM_PTR(&mp_module_ujson) }, + +extern const struct _mp_obj_module_t mp_module_machine; +#undef MODULE_DEF_MP_QSTR_UMACHINE +#define MODULE_DEF_MP_QSTR_UMACHINE { MP_ROM_QSTR(MP_QSTR_umachine), MP_ROM_PTR(&mp_module_machine) }, + +extern const struct _mp_obj_module_t mp_module_uos; +#undef MODULE_DEF_MP_QSTR_UOS +#define MODULE_DEF_MP_QSTR_UOS { MP_ROM_QSTR(MP_QSTR_uos), MP_ROM_PTR(&mp_module_uos) }, + +extern const struct _mp_obj_module_t mp_module_urandom; +#undef MODULE_DEF_MP_QSTR_URANDOM +#define MODULE_DEF_MP_QSTR_URANDOM { MP_ROM_QSTR(MP_QSTR_urandom), MP_ROM_PTR(&mp_module_urandom) }, + +extern const struct _mp_obj_module_t mp_module_ure; +#undef MODULE_DEF_MP_QSTR_URE +#define MODULE_DEF_MP_QSTR_URE { MP_ROM_QSTR(MP_QSTR_ure), MP_ROM_PTR(&mp_module_ure) }, + +extern const struct _mp_obj_module_t mp_module_uselect; +#undef MODULE_DEF_MP_QSTR_USELECT +#define MODULE_DEF_MP_QSTR_USELECT { MP_ROM_QSTR(MP_QSTR_uselect), MP_ROM_PTR(&mp_module_uselect) }, + +extern const struct _mp_obj_module_t mp_module_usocket; +#undef MODULE_DEF_MP_QSTR_USOCKET +#define MODULE_DEF_MP_QSTR_USOCKET { MP_ROM_QSTR(MP_QSTR_usocket), MP_ROM_PTR(&mp_module_usocket) }, + +extern const struct _mp_obj_module_t mp_module_ustruct; +#undef MODULE_DEF_MP_QSTR_USTRUCT +#define MODULE_DEF_MP_QSTR_USTRUCT { MP_ROM_QSTR(MP_QSTR_ustruct), MP_ROM_PTR(&mp_module_ustruct) }, + +extern const struct _mp_obj_module_t mp_module_sys; +#undef MODULE_DEF_MP_QSTR_USYS +#define MODULE_DEF_MP_QSTR_USYS { MP_ROM_QSTR(MP_QSTR_usys), MP_ROM_PTR(&mp_module_sys) }, + +extern const struct _mp_obj_module_t mp_module_utime; +#undef MODULE_DEF_MP_QSTR_UTIME +#define MODULE_DEF_MP_QSTR_UTIME { MP_ROM_QSTR(MP_QSTR_utime), MP_ROM_PTR(&mp_module_utime) }, + +extern const struct _mp_obj_module_t mp_module_uzlib; +#undef MODULE_DEF_MP_QSTR_UZLIB +#define MODULE_DEF_MP_QSTR_UZLIB { MP_ROM_QSTR(MP_QSTR_uzlib), MP_ROM_PTR(&mp_module_uzlib) }, + + +#define MICROPY_REGISTERED_MODULES \ + MODULE_DEF_MP_QSTR_BUILTINS \ + MODULE_DEF_MP_QSTR_CMATH \ + MODULE_DEF_MP_QSTR_FRAMEBUF \ + MODULE_DEF_MP_QSTR_GC \ + MODULE_DEF_MP_QSTR_MATH \ + MODULE_DEF_MP_QSTR_MICROPYTHON \ + MODULE_DEF_MP_QSTR_NETWORK \ + MODULE_DEF_MP_QSTR_UARRAY \ + MODULE_DEF_MP_QSTR_UBINASCII \ + MODULE_DEF_MP_QSTR_UCOLLECTIONS \ + MODULE_DEF_MP_QSTR_UCTYPES \ + MODULE_DEF_MP_QSTR_UERRNO \ + MODULE_DEF_MP_QSTR_UHASHLIB \ + MODULE_DEF_MP_QSTR_UHEAPQ \ + MODULE_DEF_MP_QSTR_UIO \ + MODULE_DEF_MP_QSTR_UJSON \ + MODULE_DEF_MP_QSTR_UMACHINE \ + MODULE_DEF_MP_QSTR_UOS \ + MODULE_DEF_MP_QSTR_URANDOM \ + MODULE_DEF_MP_QSTR_URE \ + MODULE_DEF_MP_QSTR_USELECT \ + MODULE_DEF_MP_QSTR_USOCKET \ + MODULE_DEF_MP_QSTR_USTRUCT \ + MODULE_DEF_MP_QSTR_USYS \ + MODULE_DEF_MP_QSTR_UTIME \ + MODULE_DEF_MP_QSTR_UZLIB \ + MODULE_DEF_MP_QSTR__THREAD \ + MODULE_DEF_MP_QSTR__UASYNCIO \ + MODULE_DEF_MP_QSTR___MAIN__ \ +// MICROPY_REGISTERED_MODULES diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/mpversion.h b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/mpversion.h new file mode 100644 index 00000000..28b57595 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/mpversion.h @@ -0,0 +1,4 @@ +// This file was generated by py/makeversionhdr.py +#define MICROPY_GIT_TAG "v2.5.0-73-g0e22ad73-dirty" +#define MICROPY_GIT_HASH "0e22ad73-dirty" +#define MICROPY_BUILD_DATE "2022-09-25" diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/qstrdefs.generated.h b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/qstrdefs.generated.h new file mode 100644 index 00000000..e6bc9971 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/genhdr/qstrdefs.generated.h @@ -0,0 +1,752 @@ +// This file was automatically generated by makeqstrdata.py + +QDEF(MP_QSTRnull, 0, 0, "") +QDEF(MP_QSTR_, 5381, 0, "") +QDEF(MP_QSTR___dir__, 36730, 7, "__dir__") +QDEF(MP_QSTR__0x0a_, 46511, 1, "\x0a") +QDEF(MP_QSTR__space_, 46469, 1, " ") +QDEF(MP_QSTR__star_, 46479, 1, "*") +QDEF(MP_QSTR__slash_, 46474, 1, "/") +QDEF(MP_QSTR__lt_module_gt_, 38077, 8, "") +QDEF(MP_QSTR__, 46586, 1, "_") +QDEF(MP_QSTR___call__, 63911, 8, "__call__") +QDEF(MP_QSTR___class__, 50475, 9, "__class__") +QDEF(MP_QSTR___delitem__, 13821, 11, "__delitem__") +QDEF(MP_QSTR___enter__, 47725, 9, "__enter__") +QDEF(MP_QSTR___exit__, 63557, 8, "__exit__") +QDEF(MP_QSTR___getattr__, 63552, 11, "__getattr__") +QDEF(MP_QSTR___getitem__, 14630, 11, "__getitem__") +QDEF(MP_QSTR___hash__, 51447, 8, "__hash__") +QDEF(MP_QSTR___init__, 42335, 8, "__init__") +QDEF(MP_QSTR___int__, 6934, 7, "__int__") +QDEF(MP_QSTR___iter__, 13007, 8, "__iter__") +QDEF(MP_QSTR___len__, 45282, 7, "__len__") +QDEF(MP_QSTR___main__, 5006, 8, "__main__") +QDEF(MP_QSTR___module__, 12543, 10, "__module__") +QDEF(MP_QSTR___name__, 14562, 8, "__name__") +QDEF(MP_QSTR___new__, 5497, 7, "__new__") +QDEF(MP_QSTR___next__, 29442, 8, "__next__") +QDEF(MP_QSTR___qualname__, 107, 12, "__qualname__") +QDEF(MP_QSTR___repr__, 2832, 8, "__repr__") +QDEF(MP_QSTR___setitem__, 15922, 11, "__setitem__") +QDEF(MP_QSTR___str__, 52688, 7, "__str__") +QDEF(MP_QSTR_ArithmeticError, 35885, 15, "ArithmeticError") +QDEF(MP_QSTR_AssertionError, 23191, 14, "AssertionError") +QDEF(MP_QSTR_AttributeError, 56865, 14, "AttributeError") +QDEF(MP_QSTR_BaseException, 37383, 13, "BaseException") +QDEF(MP_QSTR_EOFError, 49041, 8, "EOFError") +QDEF(MP_QSTR_Ellipsis, 57584, 8, "Ellipsis") +QDEF(MP_QSTR_Exception, 10738, 9, "Exception") +QDEF(MP_QSTR_GeneratorExit, 25110, 13, "GeneratorExit") +QDEF(MP_QSTR_ImportError, 39968, 11, "ImportError") +QDEF(MP_QSTR_IndentationError, 8284, 16, "IndentationError") +QDEF(MP_QSTR_IndexError, 44419, 10, "IndexError") +QDEF(MP_QSTR_KeyError, 234, 8, "KeyError") +QDEF(MP_QSTR_KeyboardInterrupt, 58031, 17, "KeyboardInterrupt") +QDEF(MP_QSTR_LookupError, 27135, 11, "LookupError") +QDEF(MP_QSTR_MemoryError, 33756, 11, "MemoryError") +QDEF(MP_QSTR_NameError, 11706, 9, "NameError") +QDEF(MP_QSTR_NoneType, 26647, 8, "NoneType") +QDEF(MP_QSTR_NotImplementedError, 39110, 19, "NotImplementedError") +QDEF(MP_QSTR_OSError, 26017, 7, "OSError") +QDEF(MP_QSTR_OverflowError, 57729, 13, "OverflowError") +QDEF(MP_QSTR_RuntimeError, 61793, 12, "RuntimeError") +QDEF(MP_QSTR_StopIteration, 7402, 13, "StopIteration") +QDEF(MP_QSTR_SyntaxError, 36756, 11, "SyntaxError") +QDEF(MP_QSTR_SystemExit, 65312, 10, "SystemExit") +QDEF(MP_QSTR_TypeError, 38437, 9, "TypeError") +QDEF(MP_QSTR_ValueError, 34710, 10, "ValueError") +QDEF(MP_QSTR_ZeroDivisionError, 10166, 17, "ZeroDivisionError") +QDEF(MP_QSTR_abs, 12949, 3, "abs") +QDEF(MP_QSTR_all, 13124, 3, "all") +QDEF(MP_QSTR_any, 13075, 3, "any") +QDEF(MP_QSTR_append, 38763, 6, "append") +QDEF(MP_QSTR_args, 50882, 4, "args") +QDEF(MP_QSTR_bool, 15595, 4, "bool") +QDEF(MP_QSTR_builtins, 12791, 8, "builtins") +QDEF(MP_QSTR_bytearray, 41846, 9, "bytearray") +QDEF(MP_QSTR_bytecode, 32034, 8, "bytecode") +QDEF(MP_QSTR_bytes, 45660, 5, "bytes") +QDEF(MP_QSTR_callable, 28685, 8, "callable") +QDEF(MP_QSTR_chr, 19676, 3, "chr") +QDEF(MP_QSTR_classmethod, 36020, 11, "classmethod") +QDEF(MP_QSTR_clear, 41084, 5, "clear") +QDEF(MP_QSTR_close, 26419, 5, "close") +QDEF(MP_QSTR_const, 65472, 5, "const") +QDEF(MP_QSTR_copy, 56288, 4, "copy") +QDEF(MP_QSTR_count, 19878, 5, "count") +QDEF(MP_QSTR_dict, 64575, 4, "dict") +QDEF(MP_QSTR_dir, 7930, 3, "dir") +QDEF(MP_QSTR_divmod, 1208, 6, "divmod") +QDEF(MP_QSTR_end, 8970, 3, "end") +QDEF(MP_QSTR_endswith, 41755, 8, "endswith") +QDEF(MP_QSTR_eval, 42651, 4, "eval") +QDEF(MP_QSTR_exec, 49182, 4, "exec") +QDEF(MP_QSTR_extend, 59491, 6, "extend") +QDEF(MP_QSTR_find, 13312, 4, "find") +QDEF(MP_QSTR_format, 13094, 6, "format") +QDEF(MP_QSTR_from_bytes, 29749, 10, "from_bytes") +QDEF(MP_QSTR_get, 15155, 3, "get") +QDEF(MP_QSTR_getattr, 6080, 7, "getattr") +QDEF(MP_QSTR_globals, 18845, 7, "globals") +QDEF(MP_QSTR_hasattr, 45196, 7, "hasattr") +QDEF(MP_QSTR_hash, 28855, 4, "hash") +QDEF(MP_QSTR_id, 28456, 2, "id") +QDEF(MP_QSTR_index, 10363, 5, "index") +QDEF(MP_QSTR_insert, 21522, 6, "insert") +QDEF(MP_QSTR_int, 21270, 3, "int") +QDEF(MP_QSTR_isalpha, 14315, 7, "isalpha") +QDEF(MP_QSTR_isdigit, 39592, 7, "isdigit") +QDEF(MP_QSTR_isinstance, 48822, 10, "isinstance") +QDEF(MP_QSTR_islower, 33020, 7, "islower") +QDEF(MP_QSTR_isspace, 63579, 7, "isspace") +QDEF(MP_QSTR_issubclass, 32693, 10, "issubclass") +QDEF(MP_QSTR_isupper, 42973, 7, "isupper") +QDEF(MP_QSTR_items, 21475, 5, "items") +QDEF(MP_QSTR_iter, 8591, 4, "iter") +QDEF(MP_QSTR_join, 23719, 4, "join") +QDEF(MP_QSTR_key, 27954, 3, "key") +QDEF(MP_QSTR_keys, 4865, 4, "keys") +QDEF(MP_QSTR_len, 16482, 3, "len") +QDEF(MP_QSTR_list, 7463, 4, "list") +QDEF(MP_QSTR_little, 27273, 6, "little") +QDEF(MP_QSTR_locals, 41275, 6, "locals") +QDEF(MP_QSTR_lower, 52166, 5, "lower") +QDEF(MP_QSTR_lstrip, 47589, 6, "lstrip") +QDEF(MP_QSTR_main, 47054, 4, "main") +QDEF(MP_QSTR_map, 17337, 3, "map") +QDEF(MP_QSTR_micropython, 31755, 11, "micropython") +QDEF(MP_QSTR_next, 34882, 4, "next") +QDEF(MP_QSTR_object, 36240, 6, "object") +QDEF(MP_QSTR_open, 15057, 4, "open") +QDEF(MP_QSTR_ord, 24092, 3, "ord") +QDEF(MP_QSTR_pop, 29482, 3, "pop") +QDEF(MP_QSTR_popitem, 11455, 7, "popitem") +QDEF(MP_QSTR_pow, 29485, 3, "pow") +QDEF(MP_QSTR_print, 50772, 5, "print") +QDEF(MP_QSTR_range, 24090, 5, "range") +QDEF(MP_QSTR_read, 63927, 4, "read") +QDEF(MP_QSTR_readinto, 48971, 8, "readinto") +QDEF(MP_QSTR_readline, 6649, 8, "readline") +QDEF(MP_QSTR_remove, 35427, 6, "remove") +QDEF(MP_QSTR_replace, 9545, 7, "replace") +QDEF(MP_QSTR_repr, 63440, 4, "repr") +QDEF(MP_QSTR_reverse, 10789, 7, "reverse") +QDEF(MP_QSTR_rfind, 40146, 5, "rfind") +QDEF(MP_QSTR_rindex, 11241, 6, "rindex") +QDEF(MP_QSTR_round, 9703, 5, "round") +QDEF(MP_QSTR_rsplit, 165, 6, "rsplit") +QDEF(MP_QSTR_rstrip, 38203, 6, "rstrip") +QDEF(MP_QSTR_self, 30585, 4, "self") +QDEF(MP_QSTR_send, 30393, 4, "send") +QDEF(MP_QSTR_sep, 36643, 3, "sep") +QDEF(MP_QSTR_set, 36647, 3, "set") +QDEF(MP_QSTR_setattr, 43220, 7, "setattr") +QDEF(MP_QSTR_setdefault, 41836, 10, "setdefault") +QDEF(MP_QSTR_sort, 40383, 4, "sort") +QDEF(MP_QSTR_sorted, 5470, 6, "sorted") +QDEF(MP_QSTR_split, 13239, 5, "split") +QDEF(MP_QSTR_start, 61317, 5, "start") +QDEF(MP_QSTR_startswith, 59508, 10, "startswith") +QDEF(MP_QSTR_staticmethod, 44898, 12, "staticmethod") +QDEF(MP_QSTR_step, 13911, 4, "step") +QDEF(MP_QSTR_stop, 13981, 4, "stop") +QDEF(MP_QSTR_str, 36176, 3, "str") +QDEF(MP_QSTR_strip, 7721, 5, "strip") +QDEF(MP_QSTR_sum, 36142, 3, "sum") +QDEF(MP_QSTR_super, 45764, 5, "super") +QDEF(MP_QSTR_throw, 17587, 5, "throw") +QDEF(MP_QSTR_to_bytes, 16088, 8, "to_bytes") +QDEF(MP_QSTR_tuple, 16893, 5, "tuple") +QDEF(MP_QSTR_type, 32669, 4, "type") +QDEF(MP_QSTR_update, 30388, 6, "update") +QDEF(MP_QSTR_upper, 37927, 5, "upper") +QDEF(MP_QSTR_utf_hyphen_8, 33463, 5, "utf-8") +QDEF(MP_QSTR_value, 13390, 5, "value") +QDEF(MP_QSTR_values, 48765, 6, "values") +QDEF(MP_QSTR_write, 43160, 5, "write") +QDEF(MP_QSTR_zip, 44262, 3, "zip") +QDEF(MP_QSTR___abs__, 54933, 7, "__abs__") +QDEF(MP_QSTR___add__, 33476, 7, "__add__") +QDEF(MP_QSTR___aenter__, 33868, 10, "__aenter__") +QDEF(MP_QSTR___aexit__, 53188, 9, "__aexit__") +QDEF(MP_QSTR___aiter__, 11086, 9, "__aiter__") +QDEF(MP_QSTR___and__, 56078, 7, "__and__") +QDEF(MP_QSTR___anext__, 46211, 9, "__anext__") +QDEF(MP_QSTR___bases__, 12291, 9, "__bases__") +QDEF(MP_QSTR___bool__, 25899, 8, "__bool__") +QDEF(MP_QSTR___build_class__, 34882, 15, "__build_class__") +QDEF(MP_QSTR___contains__, 24518, 12, "__contains__") +QDEF(MP_QSTR___del__, 14184, 7, "__del__") +QDEF(MP_QSTR___delattr__, 30555, 11, "__delattr__") +QDEF(MP_QSTR___delete__, 60892, 10, "__delete__") +QDEF(MP_QSTR___dict__, 21631, 8, "__dict__") +QDEF(MP_QSTR___divmod__, 4472, 10, "__divmod__") +QDEF(MP_QSTR___eq__, 15985, 6, "__eq__") +QDEF(MP_QSTR___file__, 21507, 8, "__file__") +QDEF(MP_QSTR___floordiv__, 24390, 12, "__floordiv__") +QDEF(MP_QSTR___ge__, 18087, 6, "__ge__") +QDEF(MP_QSTR___get__, 36787, 7, "__get__") +QDEF(MP_QSTR___globals__, 44701, 11, "__globals__") +QDEF(MP_QSTR___gt__, 33462, 6, "__gt__") +QDEF(MP_QSTR___iadd__, 19053, 8, "__iadd__") +QDEF(MP_QSTR___iand__, 8615, 8, "__iand__") +QDEF(MP_QSTR___ifloordiv__, 3919, 13, "__ifloordiv__") +QDEF(MP_QSTR___ilshift__, 41600, 11, "__ilshift__") +QDEF(MP_QSTR___imatmul__, 28352, 11, "__imatmul__") +QDEF(MP_QSTR___imod__, 34378, 8, "__imod__") +QDEF(MP_QSTR___import__, 15928, 10, "__import__") +QDEF(MP_QSTR___imul__, 52760, 8, "__imul__") +QDEF(MP_QSTR___invert__, 30711, 10, "__invert__") +QDEF(MP_QSTR___ior__, 36849, 7, "__ior__") +QDEF(MP_QSTR___ipow__, 54660, 8, "__ipow__") +QDEF(MP_QSTR___irshift__, 63710, 11, "__irshift__") +QDEF(MP_QSTR___isub__, 30728, 8, "__isub__") +QDEF(MP_QSTR___itruediv__, 545, 12, "__itruediv__") +QDEF(MP_QSTR___ixor__, 47369, 8, "__ixor__") +QDEF(MP_QSTR___le__, 5068, 6, "__le__") +QDEF(MP_QSTR___lshift__, 34825, 10, "__lshift__") +QDEF(MP_QSTR___lt__, 26717, 6, "__lt__") +QDEF(MP_QSTR___matmul__, 62281, 10, "__matmul__") +QDEF(MP_QSTR___mod__, 14179, 7, "__mod__") +QDEF(MP_QSTR___mul__, 16945, 7, "__mul__") +QDEF(MP_QSTR___ne__, 2830, 6, "__ne__") +QDEF(MP_QSTR___neg__, 54633, 7, "__neg__") +QDEF(MP_QSTR___or__, 47928, 6, "__or__") +QDEF(MP_QSTR___path__, 9160, 8, "__path__") +QDEF(MP_QSTR___pos__, 61481, 7, "__pos__") +QDEF(MP_QSTR___pow__, 45, 7, "__pow__") +QDEF(MP_QSTR___radd__, 50454, 8, "__radd__") +QDEF(MP_QSTR___rand__, 11996, 8, "__rand__") +QDEF(MP_QSTR___repl_print__, 47872, 14, "__repl_print__") +QDEF(MP_QSTR___reversed__, 65377, 12, "__reversed__") +QDEF(MP_QSTR___rfloordiv__, 38996, 13, "__rfloordiv__") +QDEF(MP_QSTR___rlshift__, 53531, 11, "__rlshift__") +QDEF(MP_QSTR___rmatmul__, 987, 11, "__rmatmul__") +QDEF(MP_QSTR___rmod__, 35377, 8, "__rmod__") +QDEF(MP_QSTR___rmul__, 355, 8, "__rmul__") +QDEF(MP_QSTR___ror__, 56362, 7, "__ror__") +QDEF(MP_QSTR___rpow__, 39679, 8, "__rpow__") +QDEF(MP_QSTR___rrshift__, 40389, 11, "__rrshift__") +QDEF(MP_QSTR___rshift__, 38999, 10, "__rshift__") +QDEF(MP_QSTR___rsub__, 30579, 8, "__rsub__") +QDEF(MP_QSTR___rtruediv__, 55130, 12, "__rtruediv__") +QDEF(MP_QSTR___rxor__, 34546, 8, "__rxor__") +QDEF(MP_QSTR___set__, 45991, 7, "__set__") +QDEF(MP_QSTR___setattr__, 6484, 11, "__setattr__") +QDEF(MP_QSTR___sub__, 2337, 7, "__sub__") +QDEF(MP_QSTR___traceback__, 53071, 13, "__traceback__") +QDEF(MP_QSTR___truediv__, 61320, 11, "__truediv__") +QDEF(MP_QSTR___xor__, 60448, 7, "__xor__") +QDEF(MP_QSTR__gt__gt__gt__space_, 44187, 4, ">>> ") +QDEF(MP_QSTR__dot__dot__dot__space_, 10379, 4, "... ") +QDEF(MP_QSTR__percent__hash_o, 6764, 3, "%#o") +QDEF(MP_QSTR__percent__hash_x, 6779, 3, "%#x") +QDEF(MP_QSTR__brace_open__colon__hash_b_brace_close_, 14168, 5, "{:#b}") +QDEF(MP_QSTR_maximum_space_recursion_space_depth_space_exceeded, 7795, 32, "maximum recursion depth exceeded") +QDEF(MP_QSTR__lt_lambda_gt_, 35968, 8, "") +QDEF(MP_QSTR__lt_listcomp_gt_, 5588, 10, "") +QDEF(MP_QSTR__lt_dictcomp_gt_, 36300, 10, "") +QDEF(MP_QSTR__lt_setcomp_gt_, 20820, 9, "") +QDEF(MP_QSTR__lt_genexpr_gt_, 27188, 9, "") +QDEF(MP_QSTR__lt_string_gt_, 21330, 8, "") +QDEF(MP_QSTR__lt_stdin_gt_, 25571, 7, "") +QDEF(MP_QSTR_A0, 29268, 2, "A0") +QDEF(MP_QSTR_A1, 29269, 2, "A1") +QDEF(MP_QSTR_A10, 48325, 3, "A10") +QDEF(MP_QSTR_A11, 48324, 3, "A11") +QDEF(MP_QSTR_A12, 48327, 3, "A12") +QDEF(MP_QSTR_A13, 48326, 3, "A13") +QDEF(MP_QSTR_A14, 48321, 3, "A14") +QDEF(MP_QSTR_A15, 48320, 3, "A15") +QDEF(MP_QSTR_A2, 29270, 2, "A2") +QDEF(MP_QSTR_A3, 29271, 2, "A3") +QDEF(MP_QSTR_A4, 29264, 2, "A4") +QDEF(MP_QSTR_A5, 29265, 2, "A5") +QDEF(MP_QSTR_A6, 29266, 2, "A6") +QDEF(MP_QSTR_A7, 29267, 2, "A7") +QDEF(MP_QSTR_A8, 29276, 2, "A8") +QDEF(MP_QSTR_A9, 29277, 2, "A9") +QDEF(MP_QSTR_AF_INET, 47083, 7, "AF_INET") +QDEF(MP_QSTR_AF_INET6, 46461, 8, "AF_INET6") +QDEF(MP_QSTR_AP_IF, 38404, 5, "AP_IF") +QDEF(MP_QSTR_ARRAY, 31324, 5, "ARRAY") +QDEF(MP_QSTR_B0, 29431, 2, "B0") +QDEF(MP_QSTR_B1, 29430, 2, "B1") +QDEF(MP_QSTR_B10, 53638, 3, "B10") +QDEF(MP_QSTR_B11, 53639, 3, "B11") +QDEF(MP_QSTR_B12, 53636, 3, "B12") +QDEF(MP_QSTR_B13, 53637, 3, "B13") +QDEF(MP_QSTR_B14, 53634, 3, "B14") +QDEF(MP_QSTR_B15, 53635, 3, "B15") +QDEF(MP_QSTR_B2, 29429, 2, "B2") +QDEF(MP_QSTR_B3, 29428, 2, "B3") +QDEF(MP_QSTR_B4, 29427, 2, "B4") +QDEF(MP_QSTR_B5, 29426, 2, "B5") +QDEF(MP_QSTR_B6, 29425, 2, "B6") +QDEF(MP_QSTR_B7, 29424, 2, "B7") +QDEF(MP_QSTR_B8, 29439, 2, "B8") +QDEF(MP_QSTR_B9, 29438, 2, "B9") +QDEF(MP_QSTR_BFINT16, 58005, 7, "BFINT16") +QDEF(MP_QSTR_BFINT32, 57939, 7, "BFINT32") +QDEF(MP_QSTR_BFINT8, 39498, 6, "BFINT8") +QDEF(MP_QSTR_BFUINT16, 42560, 8, "BFUINT16") +QDEF(MP_QSTR_BFUINT32, 42502, 8, "BFUINT32") +QDEF(MP_QSTR_BFUINT8, 44991, 7, "BFUINT8") +QDEF(MP_QSTR_BF_LEN, 45081, 6, "BF_LEN") +QDEF(MP_QSTR_BF_POS, 40274, 6, "BF_POS") +QDEF(MP_QSTR_BIG_ENDIAN, 20991, 10, "BIG_ENDIAN") +QDEF(MP_QSTR_BytesIO, 46874, 7, "BytesIO") +QDEF(MP_QSTR_C0, 29334, 2, "C0") +QDEF(MP_QSTR_C1, 29335, 2, "C1") +QDEF(MP_QSTR_C10, 50503, 3, "C10") +QDEF(MP_QSTR_C11, 50502, 3, "C11") +QDEF(MP_QSTR_C12, 50501, 3, "C12") +QDEF(MP_QSTR_C13, 50500, 3, "C13") +QDEF(MP_QSTR_C14, 50499, 3, "C14") +QDEF(MP_QSTR_C15, 50498, 3, "C15") +QDEF(MP_QSTR_C2, 29332, 2, "C2") +QDEF(MP_QSTR_C3, 29333, 2, "C3") +QDEF(MP_QSTR_C4, 29330, 2, "C4") +QDEF(MP_QSTR_C5, 29331, 2, "C5") +QDEF(MP_QSTR_C6, 29328, 2, "C6") +QDEF(MP_QSTR_C7, 29329, 2, "C7") +QDEF(MP_QSTR_C8, 29342, 2, "C8") +QDEF(MP_QSTR_C9, 29343, 2, "C9") +QDEF(MP_QSTR_CancelledError, 39926, 14, "CancelledError") +QDEF(MP_QSTR_D2, 29235, 2, "D2") +QDEF(MP_QSTR_DecompIO, 46995, 8, "DecompIO") +QDEF(MP_QSTR_EACCES, 49719, 6, "EACCES") +QDEF(MP_QSTR_EADDRINUSE, 4375, 10, "EADDRINUSE") +QDEF(MP_QSTR_EAGAIN, 60448, 6, "EAGAIN") +QDEF(MP_QSTR_EALREADY, 5446, 8, "EALREADY") +QDEF(MP_QSTR_EBADF, 41825, 5, "EBADF") +QDEF(MP_QSTR_ECONNABORTED, 43815, 12, "ECONNABORTED") +QDEF(MP_QSTR_ECONNREFUSED, 11322, 12, "ECONNREFUSED") +QDEF(MP_QSTR_ECONNRESET, 64281, 10, "ECONNRESET") +QDEF(MP_QSTR_EEXIST, 44371, 6, "EEXIST") +QDEF(MP_QSTR_EHOSTUNREACH, 9606, 12, "EHOSTUNREACH") +QDEF(MP_QSTR_EINPROGRESS, 41114, 11, "EINPROGRESS") +QDEF(MP_QSTR_EINVAL, 65372, 6, "EINVAL") +QDEF(MP_QSTR_EIO, 42630, 3, "EIO") +QDEF(MP_QSTR_EISDIR, 20389, 6, "EISDIR") +QDEF(MP_QSTR_ENOBUFS, 34787, 7, "ENOBUFS") +QDEF(MP_QSTR_ENODEV, 26550, 6, "ENODEV") +QDEF(MP_QSTR_ENOENT, 25950, 6, "ENOENT") +QDEF(MP_QSTR_ENOMEM, 34212, 6, "ENOMEM") +QDEF(MP_QSTR_ENOTCONN, 55161, 8, "ENOTCONN") +QDEF(MP_QSTR_EOPNOTSUPP, 38828, 10, "EOPNOTSUPP") +QDEF(MP_QSTR_EPERM, 32746, 5, "EPERM") +QDEF(MP_QSTR_ESP8266, 55433, 7, "ESP8266") +QDEF(MP_QSTR_ETIMEDOUT, 63743, 9, "ETIMEDOUT") +QDEF(MP_QSTR_FLOAT32, 34740, 7, "FLOAT32") +QDEF(MP_QSTR_FLOAT64, 34583, 7, "FLOAT64") +QDEF(MP_QSTR_FileIO, 5573, 6, "FileIO") +QDEF(MP_QSTR_FrameBuffer, 48856, 11, "FrameBuffer") +QDEF(MP_QSTR_FrameBuffer1, 39401, 12, "FrameBuffer1") +QDEF(MP_QSTR_GS2_HMSB, 49960, 8, "GS2_HMSB") +QDEF(MP_QSTR_GS4_HMSB, 29550, 8, "GS4_HMSB") +QDEF(MP_QSTR_GS8, 49321, 3, "GS8") +QDEF(MP_QSTR_IN, 29474, 2, "IN") +QDEF(MP_QSTR_INT, 55094, 3, "INT") +QDEF(MP_QSTR_INT16, 30353, 5, "INT16") +QDEF(MP_QSTR_INT32, 30295, 5, "INT32") +QDEF(MP_QSTR_INT64, 30196, 5, "INT64") +QDEF(MP_QSTR_INT8, 48590, 4, "INT8") +QDEF(MP_QSTR_IN_PULLDOWN, 47946, 11, "IN_PULLDOWN") +QDEF(MP_QSTR_IN_PULLUP, 55837, 9, "IN_PULLUP") +QDEF(MP_QSTR_IOBase, 48694, 6, "IOBase") +QDEF(MP_QSTR_IRQ_FALLING, 49207, 11, "IRQ_FALLING") +QDEF(MP_QSTR_IRQ_RISING, 60792, 10, "IRQ_RISING") +QDEF(MP_QSTR_KEY1, 4963, 4, "KEY1") +QDEF(MP_QSTR_KEY2, 4960, 4, "KEY2") +QDEF(MP_QSTR_LED, 56456, 3, "LED") +QDEF(MP_QSTR_LITTLE_ENDIAN, 23487, 13, "LITTLE_ENDIAN") +QDEF(MP_QSTR_LONG, 25871, 4, "LONG") +QDEF(MP_QSTR_LONGLONG, 54405, 8, "LONGLONG") +QDEF(MP_QSTR_LSB, 57048, 3, "LSB") +QDEF(MP_QSTR_LockType, 8246, 8, "LockType") +QDEF(MP_QSTR_MONO_HLSB, 38988, 9, "MONO_HLSB") +QDEF(MP_QSTR_MONO_HMSB, 33741, 9, "MONO_HMSB") +QDEF(MP_QSTR_MONO_VLSB, 64530, 9, "MONO_VLSB") +QDEF(MP_QSTR_MSB, 51801, 3, "MSB") +QDEF(MP_QSTR_MVLSB, 5123, 5, "MVLSB") +QDEF(MP_QSTR_NATIVE, 36356, 6, "NATIVE") +QDEF(MP_QSTR_NotImplemented, 50750, 14, "NotImplemented") +QDEF(MP_QSTR_ONE_SHOT, 65374, 8, "ONE_SHOT") +QDEF(MP_QSTR_OPEN_DRAIN, 18526, 10, "OPEN_DRAIN") +QDEF(MP_QSTR_OUT, 58123, 3, "OUT") +QDEF(MP_QSTR_OrderedDict, 32496, 11, "OrderedDict") +QDEF(MP_QSTR_PERIODIC, 13578, 8, "PERIODIC") +QDEF(MP_QSTR_POLLERR, 49375, 7, "POLLERR") +QDEF(MP_QSTR_POLLHUP, 35447, 7, "POLLHUP") +QDEF(MP_QSTR_POLLIN, 24957, 6, "POLLIN") +QDEF(MP_QSTR_POLLOUT, 34164, 7, "POLLOUT") +QDEF(MP_QSTR_PTR, 3251, 3, "PTR") +QDEF(MP_QSTR_Pin, 5138, 3, "Pin") +QDEF(MP_QSTR_PinBase, 17223, 7, "PinBase") +QDEF(MP_QSTR_RGB565, 52324, 6, "RGB565") +QDEF(MP_QSTR_SHORT, 7159, 5, "SHORT") +QDEF(MP_QSTR_SOCK_DGRAM, 5299, 10, "SOCK_DGRAM") +QDEF(MP_QSTR_SOCK_RAW, 38602, 8, "SOCK_RAW") +QDEF(MP_QSTR_SOCK_STREAM, 48690, 11, "SOCK_STREAM") +QDEF(MP_QSTR_SOL_SOCKET, 57103, 10, "SOL_SOCKET") +QDEF(MP_QSTR_SO_KEEPALIVE, 41770, 12, "SO_KEEPALIVE") +QDEF(MP_QSTR_SO_RCVTIMEO, 10459, 11, "SO_RCVTIMEO") +QDEF(MP_QSTR_SO_REUSEADDR, 21281, 12, "SO_REUSEADDR") +QDEF(MP_QSTR_SO_SNDTIMEO, 65317, 11, "SO_SNDTIMEO") +QDEF(MP_QSTR_SPI, 4591, 3, "SPI") +QDEF(MP_QSTR_STA_IF, 7091, 6, "STA_IF") +QDEF(MP_QSTR_Signal, 58523, 6, "Signal") +QDEF(MP_QSTR_SoftI2C, 61971, 7, "SoftI2C") +QDEF(MP_QSTR_SoftSPI, 22561, 7, "SoftSPI") +QDEF(MP_QSTR_StopAsyncIteration, 61676, 18, "StopAsyncIteration") +QDEF(MP_QSTR_StringIO, 30326, 8, "StringIO") +QDEF(MP_QSTR_Task, 16904, 4, "Task") +QDEF(MP_QSTR_TaskQueue, 23705, 9, "TaskQueue") +QDEF(MP_QSTR_TextIOWrapper, 36269, 13, "TextIOWrapper") +QDEF(MP_QSTR_Timer, 8098, 5, "Timer") +QDEF(MP_QSTR_UART, 6583, 4, "UART") +QDEF(MP_QSTR_UINT, 15651, 4, "UINT") +QDEF(MP_QSTR_UINT16, 6084, 6, "UINT16") +QDEF(MP_QSTR_UINT32, 6018, 6, "UINT32") +QDEF(MP_QSTR_UINT64, 6241, 6, "UINT64") +QDEF(MP_QSTR_UINT8, 57787, 5, "UINT8") +QDEF(MP_QSTR_ULONG, 36218, 5, "ULONG") +QDEF(MP_QSTR_ULONGLONG, 50800, 9, "ULONGLONG") +QDEF(MP_QSTR_USHORT, 62626, 6, "USHORT") +QDEF(MP_QSTR_UnicodeError, 53538, 12, "UnicodeError") +QDEF(MP_QSTR_VOID, 62001, 4, "VOID") +QDEF(MP_QSTR_VfsTos, 55502, 6, "VfsTos") +QDEF(MP_QSTR__machine, 19391, 8, "_machine") +QDEF(MP_QSTR__task_queue, 50649, 11, "_task_queue") +QDEF(MP_QSTR__thread, 724, 7, "_thread") +QDEF(MP_QSTR__uasyncio, 24527, 9, "_uasyncio") +QDEF(MP_QSTR_a2b_base64, 2876, 10, "a2b_base64") +QDEF(MP_QSTR_abs_tol, 28029, 7, "abs_tol") +QDEF(MP_QSTR_accept, 35205, 6, "accept") +QDEF(MP_QSTR_acos, 40987, 4, "acos") +QDEF(MP_QSTR_acquire, 54045, 7, "acquire") +QDEF(MP_QSTR_add, 12868, 3, "add") +QDEF(MP_QSTR_addr, 31414, 4, "addr") +QDEF(MP_QSTR_addressof, 63834, 9, "addressof") +QDEF(MP_QSTR_addrsize, 37267, 8, "addrsize") +QDEF(MP_QSTR_alloc_emergency_exception_buf, 10872, 29, "alloc_emergency_exception_buf") +QDEF(MP_QSTR_allocate_lock, 60908, 13, "allocate_lock") +QDEF(MP_QSTR_arg, 13457, 3, "arg") +QDEF(MP_QSTR_argv, 50887, 4, "argv") +QDEF(MP_QSTR_array, 29308, 5, "array") +QDEF(MP_QSTR_asin, 58704, 4, "asin") +QDEF(MP_QSTR_atan, 48671, 4, "atan") +QDEF(MP_QSTR_atan2, 33229, 5, "atan2") +QDEF(MP_QSTR_b2a_base64, 36668, 10, "b2a_base64") +QDEF(MP_QSTR_baudrate, 55541, 8, "baudrate") +QDEF(MP_QSTR_bin, 18656, 3, "bin") +QDEF(MP_QSTR_bind, 25732, 4, "bind") +QDEF(MP_QSTR_bits, 26697, 4, "bits") +QDEF(MP_QSTR_blit, 20726, 4, "blit") +QDEF(MP_QSTR_bound_method, 41623, 12, "bound_method") +QDEF(MP_QSTR_buffer, 41189, 6, "buffer") +QDEF(MP_QSTR_buffering, 56101, 9, "buffering") +QDEF(MP_QSTR_bytearray_at, 23708, 12, "bytearray_at") +QDEF(MP_QSTR_byteorder, 39265, 9, "byteorder") +QDEF(MP_QSTR_bytes_at, 23990, 8, "bytes_at") +QDEF(MP_QSTR_calcsize, 14413, 8, "calcsize") +QDEF(MP_QSTR_callback, 61516, 8, "callback") +QDEF(MP_QSTR_cancel, 34563, 6, "cancel") +QDEF(MP_QSTR_ceil, 45062, 4, "ceil") +QDEF(MP_QSTR_center, 48974, 6, "center") +QDEF(MP_QSTR_chdir, 45745, 5, "chdir") +QDEF(MP_QSTR_choice, 13102, 6, "choice") +QDEF(MP_QSTR_closure, 51828, 7, "closure") +QDEF(MP_QSTR_cmath, 62646, 5, "cmath") +QDEF(MP_QSTR_code, 55912, 4, "code") +QDEF(MP_QSTR_collect, 26011, 7, "collect") +QDEF(MP_QSTR_compile, 51700, 7, "compile") +QDEF(MP_QSTR_complex, 40389, 7, "complex") +QDEF(MP_QSTR_connect, 15835, 7, "connect") +QDEF(MP_QSTR_copysign, 5171, 8, "copysign") +QDEF(MP_QSTR_coro, 56244, 4, "coro") +QDEF(MP_QSTR_cos, 19578, 3, "cos") +QDEF(MP_QSTR_crc32, 59510, 5, "crc32") +QDEF(MP_QSTR_cur_task, 11763, 8, "cur_task") +QDEF(MP_QSTR_data, 56341, 4, "data") +QDEF(MP_QSTR_decode, 22953, 6, "decode") +QDEF(MP_QSTR_decompress, 64354, 10, "decompress") +QDEF(MP_QSTR_default, 32206, 7, "default") +QDEF(MP_QSTR_degrees, 16642, 7, "degrees") +QDEF(MP_QSTR_deinit, 36254, 6, "deinit") +QDEF(MP_QSTR_delattr, 51419, 7, "delattr") +QDEF(MP_QSTR_deleter, 56174, 7, "deleter") +QDEF(MP_QSTR_deque, 39173, 5, "deque") +QDEF(MP_QSTR_dict_view, 43309, 9, "dict_view") +QDEF(MP_QSTR_difference, 9330, 10, "difference") +QDEF(MP_QSTR_difference_update, 64156, 17, "difference_update") +QDEF(MP_QSTR_digest, 50381, 6, "digest") +QDEF(MP_QSTR_disable, 30353, 7, "disable") +QDEF(MP_QSTR_discard, 28943, 7, "discard") +QDEF(MP_QSTR_doc, 7981, 3, "doc") +QDEF(MP_QSTR_done, 837, 4, "done") +QDEF(MP_QSTR_dump, 12265, 4, "dump") +QDEF(MP_QSTR_dumps, 11642, 5, "dumps") +QDEF(MP_QSTR_e, 46528, 1, "e") +QDEF(MP_QSTR_enable, 56836, 6, "enable") +QDEF(MP_QSTR_encode, 51779, 6, "encode") +QDEF(MP_QSTR_encoding, 39942, 8, "encoding") +QDEF(MP_QSTR_enumerate, 47729, 9, "enumerate") +QDEF(MP_QSTR_errno, 4545, 5, "errno") +QDEF(MP_QSTR_errorcode, 56592, 9, "errorcode") +QDEF(MP_QSTR_execfile, 10328, 8, "execfile") +QDEF(MP_QSTR_exit, 48773, 4, "exit") +QDEF(MP_QSTR_exp, 9416, 3, "exp") +QDEF(MP_QSTR_fabs, 4755, 4, "fabs") +QDEF(MP_QSTR_factorial, 13004, 9, "factorial") +QDEF(MP_QSTR_file, 13507, 4, "file") +QDEF(MP_QSTR_fileno, 30338, 6, "fileno") +QDEF(MP_QSTR_fill, 13514, 4, "fill") +QDEF(MP_QSTR_fill_rect, 60725, 9, "fill_rect") +QDEF(MP_QSTR_filter, 48677, 6, "filter") +QDEF(MP_QSTR_firstbit, 14624, 8, "firstbit") +QDEF(MP_QSTR_float, 17461, 5, "float") +QDEF(MP_QSTR_floor, 18045, 5, "floor") +QDEF(MP_QSTR_flush, 49505, 5, "flush") +QDEF(MP_QSTR_fmod, 17637, 4, "fmod") +QDEF(MP_QSTR_framebuf, 33385, 8, "framebuf") +QDEF(MP_QSTR_freq, 15077, 4, "freq") +QDEF(MP_QSTR_frexp, 38940, 5, "frexp") +QDEF(MP_QSTR_fromkeys, 48439, 8, "fromkeys") +QDEF(MP_QSTR_frozenset, 40173, 9, "frozenset") +QDEF(MP_QSTR_function, 551, 8, "function") +QDEF(MP_QSTR_gc, 28257, 2, "gc") +QDEF(MP_QSTR_generator, 50070, 9, "generator") +QDEF(MP_QSTR_get_ident, 45566, 9, "get_ident") +QDEF(MP_QSTR_getaddrinfo, 6254, 11, "getaddrinfo") +QDEF(MP_QSTR_getcwd, 53251, 6, "getcwd") +QDEF(MP_QSTR_getrandbits, 32102, 11, "getrandbits") +QDEF(MP_QSTR_getter, 45712, 6, "getter") +QDEF(MP_QSTR_getvalue, 44152, 8, "getvalue") +QDEF(MP_QSTR_group, 45242, 5, "group") +QDEF(MP_QSTR_handler, 24029, 7, "handler") +QDEF(MP_QSTR_heap_lock, 36013, 9, "heap_lock") +QDEF(MP_QSTR_heap_unlock, 11606, 11, "heap_unlock") +QDEF(MP_QSTR_heapify, 11695, 7, "heapify") +QDEF(MP_QSTR_heappop, 10198, 7, "heappop") +QDEF(MP_QSTR_heappush, 27527, 8, "heappush") +QDEF(MP_QSTR_help, 23700, 4, "help") +QDEF(MP_QSTR_hex, 20592, 3, "hex") +QDEF(MP_QSTR_hexlify, 32554, 7, "hexlify") +QDEF(MP_QSTR_hline, 15491, 5, "hline") +QDEF(MP_QSTR_ilistdir, 27249, 8, "ilistdir") +QDEF(MP_QSTR_imag, 46919, 4, "imag") +QDEF(MP_QSTR_implementation, 11543, 14, "implementation") +QDEF(MP_QSTR_indices, 18522, 7, "indices") +QDEF(MP_QSTR_inf, 21252, 3, "inf") +QDEF(MP_QSTR_init, 46111, 4, "init") +QDEF(MP_QSTR_input, 23155, 5, "input") +QDEF(MP_QSTR_intersection, 10792, 12, "intersection") +QDEF(MP_QSTR_intersection_update, 56582, 19, "intersection_update") +QDEF(MP_QSTR_invert, 183, 6, "invert") +QDEF(MP_QSTR_ioctl, 49784, 5, "ioctl") +QDEF(MP_QSTR_ipoll, 23891, 5, "ipoll") +QDEF(MP_QSTR_irq, 22159, 3, "irq") +QDEF(MP_QSTR_isclose, 20041, 7, "isclose") +QDEF(MP_QSTR_isdisjoint, 26871, 10, "isdisjoint") +QDEF(MP_QSTR_isenabled, 58778, 9, "isenabled") +QDEF(MP_QSTR_isfinite, 43942, 8, "isfinite") +QDEF(MP_QSTR_isinf, 4414, 5, "isinf") +QDEF(MP_QSTR_isnan, 926, 5, "isnan") +QDEF(MP_QSTR_issubset, 49593, 8, "issubset") +QDEF(MP_QSTR_issuperset, 60668, 10, "issuperset") +QDEF(MP_QSTR_iterable, 37413, 8, "iterable") +QDEF(MP_QSTR_iterator, 48711, 8, "iterator") +QDEF(MP_QSTR_kbd_intr, 5110, 8, "kbd_intr") +QDEF(MP_QSTR_keepends, 35682, 8, "keepends") +QDEF(MP_QSTR_ldexp, 28480, 5, "ldexp") +QDEF(MP_QSTR_line, 7371, 4, "line") +QDEF(MP_QSTR_listdir, 58264, 7, "listdir") +QDEF(MP_QSTR_listen, 3788, 6, "listen") +QDEF(MP_QSTR_load, 9315, 4, "load") +QDEF(MP_QSTR_loads, 45232, 5, "loads") +QDEF(MP_QSTR_lock, 9134, 4, "lock") +QDEF(MP_QSTR_locked, 47631, 6, "locked") +QDEF(MP_QSTR_log, 16161, 3, "log") +QDEF(MP_QSTR_machine, 43872, 7, "machine") +QDEF(MP_QSTR_makefile, 54721, 8, "makefile") +QDEF(MP_QSTR_match, 8854, 5, "match") +QDEF(MP_QSTR_math, 47925, 4, "math") +QDEF(MP_QSTR_max, 17329, 3, "max") +QDEF(MP_QSTR_maxsize, 28884, 7, "maxsize") +QDEF(MP_QSTR_mem, 17440, 3, "mem") +QDEF(MP_QSTR_mem16, 51719, 5, "mem16") +QDEF(MP_QSTR_mem32, 51777, 5, "mem32") +QDEF(MP_QSTR_mem8, 51224, 4, "mem8") +QDEF(MP_QSTR_mem_alloc, 11090, 9, "mem_alloc") +QDEF(MP_QSTR_mem_free, 25291, 8, "mem_free") +QDEF(MP_QSTR_mem_info, 61905, 8, "mem_info") +QDEF(MP_QSTR_memaddr, 59539, 7, "memaddr") +QDEF(MP_QSTR_memoryview, 17513, 10, "memoryview") +QDEF(MP_QSTR_min, 17071, 3, "min") +QDEF(MP_QSTR_miso, 39069, 4, "miso") +QDEF(MP_QSTR_mkdir, 46492, 5, "mkdir") +QDEF(MP_QSTR_mkfs, 45174, 4, "mkfs") +QDEF(MP_QSTR_mode, 49190, 4, "mode") +QDEF(MP_QSTR_modf, 49189, 4, "modf") +QDEF(MP_QSTR_modify, 26357, 6, "modify") +QDEF(MP_QSTR_module, 39359, 6, "module") +QDEF(MP_QSTR_modules, 53740, 7, "modules") +QDEF(MP_QSTR_mosi, 49693, 4, "mosi") +QDEF(MP_QSTR_mount, 3496, 5, "mount") +QDEF(MP_QSTR_name, 30114, 4, "name") +QDEF(MP_QSTR_namedtuple, 5662, 10, "namedtuple") +QDEF(MP_QSTR_nan, 22756, 3, "nan") +QDEF(MP_QSTR_network, 10331, 7, "network") +QDEF(MP_QSTR_newline, 35127, 7, "newline") +QDEF(MP_QSTR_nodename, 43874, 8, "nodename") +QDEF(MP_QSTR_oct, 23805, 3, "oct") +QDEF(MP_QSTR_off, 23690, 3, "off") +QDEF(MP_QSTR_on, 28516, 2, "on") +QDEF(MP_QSTR_opt_level, 26503, 9, "opt_level") +QDEF(MP_QSTR_pack, 53692, 4, "pack") +QDEF(MP_QSTR_pack_into, 43295, 9, "pack_into") +QDEF(MP_QSTR_partition, 58759, 9, "partition") +QDEF(MP_QSTR_path, 52872, 4, "path") +QDEF(MP_QSTR_peek, 49534, 4, "peek") +QDEF(MP_QSTR_pend_throw, 29939, 10, "pend_throw") +QDEF(MP_QSTR_period, 41120, 6, "period") +QDEF(MP_QSTR_ph_key, 6901, 6, "ph_key") +QDEF(MP_QSTR_phase, 54634, 5, "phase") +QDEF(MP_QSTR_pi, 28700, 2, "pi") +QDEF(MP_QSTR_pixel, 61517, 5, "pixel") +QDEF(MP_QSTR_platform, 6458, 8, "platform") +QDEF(MP_QSTR_polar, 3077, 5, "polar") +QDEF(MP_QSTR_polarity, 60737, 8, "polarity") +QDEF(MP_QSTR_poll, 55706, 4, "poll") +QDEF(MP_QSTR_popleft, 39537, 7, "popleft") +QDEF(MP_QSTR_print_exception, 8732, 15, "print_exception") +QDEF(MP_QSTR_property, 10690, 8, "property") +QDEF(MP_QSTR_ps1, 28919, 3, "ps1") +QDEF(MP_QSTR_ps2, 28916, 3, "ps2") +QDEF(MP_QSTR_push, 32443, 4, "push") +QDEF(MP_QSTR_pwd, 28710, 3, "pwd") +QDEF(MP_QSTR_qstr_info, 33200, 9, "qstr_info") +QDEF(MP_QSTR_r, 46551, 1, "r") +QDEF(MP_QSTR_radians, 16263, 7, "radians") +QDEF(MP_QSTR_randint, 56495, 7, "randint") +QDEF(MP_QSTR_random, 11454, 6, "random") +QDEF(MP_QSTR_randrange, 16035, 9, "randrange") +QDEF(MP_QSTR_rb, 28885, 2, "rb") +QDEF(MP_QSTR_readblocks, 7213, 10, "readblocks") +QDEF(MP_QSTR_readfrom, 45377, 8, "readfrom") +QDEF(MP_QSTR_readfrom_into, 16258, 13, "readfrom_into") +QDEF(MP_QSTR_readfrom_mem, 25915, 12, "readfrom_mem") +QDEF(MP_QSTR_readfrom_mem_into, 36408, 17, "readfrom_mem_into") +QDEF(MP_QSTR_readlines, 22890, 9, "readlines") +QDEF(MP_QSTR_readonly, 35075, 8, "readonly") +QDEF(MP_QSTR_real, 63935, 4, "real") +QDEF(MP_QSTR_rect, 63973, 4, "rect") +QDEF(MP_QSTR_recv, 63975, 4, "recv") +QDEF(MP_QSTR_recvfrom, 37009, 8, "recvfrom") +QDEF(MP_QSTR_register, 41388, 8, "register") +QDEF(MP_QSTR_rel_tol, 18006, 7, "rel_tol") +QDEF(MP_QSTR_release, 36844, 7, "release") +QDEF(MP_QSTR_rename, 6197, 6, "rename") +QDEF(MP_QSTR_reversed, 28321, 8, "reversed") +QDEF(MP_QSTR_rmdir, 42821, 5, "rmdir") +QDEF(MP_QSTR_route, 10300, 5, "route") +QDEF(MP_QSTR_rpartition, 53269, 10, "rpartition") +QDEF(MP_QSTR_rxbuf, 26494, 5, "rxbuf") +QDEF(MP_QSTR_scan, 36378, 4, "scan") +QDEF(MP_QSTR_schedule, 44256, 8, "schedule") +QDEF(MP_QSTR_sck, 36862, 3, "sck") +QDEF(MP_QSTR_scl, 36857, 3, "scl") +QDEF(MP_QSTR_scroll, 23080, 6, "scroll") +QDEF(MP_QSTR_sda, 36691, 3, "sda") +QDEF(MP_QSTR_search, 49579, 6, "search") +QDEF(MP_QSTR_seed, 30098, 4, "seed") +QDEF(MP_QSTR_seek, 30109, 4, "seek") +QDEF(MP_QSTR_select, 16781, 6, "select") +QDEF(MP_QSTR_sendall, 40760, 7, "sendall") +QDEF(MP_QSTR_sendto, 802, 6, "sendto") +QDEF(MP_QSTR_separators, 3307, 10, "separators") +QDEF(MP_QSTR_setblocking, 6254, 11, "setblocking") +QDEF(MP_QSTR_setsockopt, 59448, 10, "setsockopt") +QDEF(MP_QSTR_setter, 22788, 6, "setter") +QDEF(MP_QSTR_settimeout, 35548, 10, "settimeout") +QDEF(MP_QSTR_sha256, 302, 6, "sha256") +QDEF(MP_QSTR_sin, 37041, 3, "sin") +QDEF(MP_QSTR_single, 8255, 6, "single") +QDEF(MP_QSTR_sizeof, 29513, 6, "sizeof") +QDEF(MP_QSTR_sleep, 10218, 5, "sleep") +QDEF(MP_QSTR_sleep_ms, 25355, 8, "sleep_ms") +QDEF(MP_QSTR_slice, 62645, 5, "slice") +QDEF(MP_QSTR_socket, 52320, 6, "socket") +QDEF(MP_QSTR_soft_reset, 26081, 10, "soft_reset") +QDEF(MP_QSTR_splitlines, 54122, 10, "splitlines") +QDEF(MP_QSTR_sqrt, 17441, 4, "sqrt") +QDEF(MP_QSTR_ssid, 19208, 4, "ssid") +QDEF(MP_QSTR_stack_size, 15153, 10, "stack_size") +QDEF(MP_QSTR_stack_use, 63383, 9, "stack_use") +QDEF(MP_QSTR_start_new_thread, 9687, 16, "start_new_thread") +QDEF(MP_QSTR_stat, 13783, 4, "stat") +QDEF(MP_QSTR_state, 61650, 5, "state") +QDEF(MP_QSTR_statvfs, 6420, 7, "statvfs") +QDEF(MP_QSTR_stderr, 22691, 6, "stderr") +QDEF(MP_QSTR_stdin, 1057, 5, "stdin") +QDEF(MP_QSTR_stdout, 33544, 6, "stdout") +QDEF(MP_QSTR_struct, 36882, 6, "struct") +QDEF(MP_QSTR_sub, 36129, 3, "sub") +QDEF(MP_QSTR_symmetric_difference, 26574, 20, "symmetric_difference") +QDEF(MP_QSTR_symmetric_difference_update, 63584, 27, "symmetric_difference_update") +QDEF(MP_QSTR_sync, 25250, 4, "sync") +QDEF(MP_QSTR_sys, 36540, 3, "sys") +QDEF(MP_QSTR_sysname, 13979, 7, "sysname") +QDEF(MP_QSTR_tan, 25086, 3, "tan") +QDEF(MP_QSTR_tau, 25061, 3, "tau") +QDEF(MP_QSTR_tell, 45332, 4, "tell") +QDEF(MP_QSTR_text, 44952, 4, "text") +QDEF(MP_QSTR_threshold, 12274, 9, "threshold") +QDEF(MP_QSTR_tick_hz, 56189, 7, "tick_hz") +QDEF(MP_QSTR_ticks_add, 44701, 9, "ticks_add") +QDEF(MP_QSTR_ticks_cpu, 42266, 9, "ticks_cpu") +QDEF(MP_QSTR_ticks_diff, 57521, 10, "ticks_diff") +QDEF(MP_QSTR_ticks_ms, 12866, 8, "ticks_ms") +QDEF(MP_QSTR_timeout, 21566, 7, "timeout") +QDEF(MP_QSTR_timeout_char, 19065, 12, "timeout_char") +QDEF(MP_QSTR_trigger, 35997, 7, "trigger") +QDEF(MP_QSTR_trunc, 39259, 5, "trunc") +QDEF(MP_QSTR_uarray, 34441, 6, "uarray") +QDEF(MP_QSTR_ubinascii, 35012, 9, "ubinascii") +QDEF(MP_QSTR_ucollections, 39445, 12, "ucollections") +QDEF(MP_QSTR_uctypes, 29176, 7, "uctypes") +QDEF(MP_QSTR_uerrno, 59828, 6, "uerrno") +QDEF(MP_QSTR_uhashlib, 40293, 8, "uhashlib") +QDEF(MP_QSTR_uheapq, 17181, 6, "uheapq") +QDEF(MP_QSTR_uio, 26294, 3, "uio") +QDEF(MP_QSTR_ujson, 12520, 5, "ujson") +QDEF(MP_QSTR_umachine, 32661, 8, "umachine") +QDEF(MP_QSTR_umount, 40669, 6, "umount") +QDEF(MP_QSTR_uname, 40119, 5, "uname") +QDEF(MP_QSTR_unhexlify, 47537, 9, "unhexlify") +QDEF(MP_QSTR_uniform, 62721, 7, "uniform") +QDEF(MP_QSTR_union, 31990, 5, "union") +QDEF(MP_QSTR_unlink, 36862, 6, "unlink") +QDEF(MP_QSTR_unpack, 15367, 6, "unpack") +QDEF(MP_QSTR_unpack_from, 27918, 11, "unpack_from") +QDEF(MP_QSTR_unregister, 54295, 10, "unregister") +QDEF(MP_QSTR_uos, 26604, 3, "uos") +QDEF(MP_QSTR_urandom, 44715, 7, "urandom") +QDEF(MP_QSTR_ure, 25479, 3, "ure") +QDEF(MP_QSTR_uselect, 36440, 7, "uselect") +QDEF(MP_QSTR_usocket, 117, 7, "usocket") +QDEF(MP_QSTR_ustruct, 2119, 7, "ustruct") +QDEF(MP_QSTR_usys, 62409, 4, "usys") +QDEF(MP_QSTR_utime, 40421, 5, "utime") +QDEF(MP_QSTR_uzlib, 39789, 5, "uzlib") +QDEF(MP_QSTR_version, 54207, 7, "version") +QDEF(MP_QSTR_version_info, 2670, 12, "version_info") +QDEF(MP_QSTR_vline, 63005, 5, "vline") +QDEF(MP_QSTR_write_readinto, 33929, 14, "write_readinto") +QDEF(MP_QSTR_writeblocks, 57090, 11, "writeblocks") +QDEF(MP_QSTR_writeto, 14595, 7, "writeto") +QDEF(MP_QSTR_writeto_mem, 60793, 11, "writeto_mem") +QDEF(MP_QSTR_writevto, 30069, 8, "writevto") diff --git a/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/startup_stm32l431xx.s b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/startup_stm32l431xx.s new file mode 100644 index 00000000..6a5c15a5 --- /dev/null +++ b/board/BearPi_STM32L431RC/KEIL/micropython_extra_demo/startup_stm32l431xx.s @@ -0,0 +1,404 @@ +;********************** COPYRIGHT(c) 2017 STMicroelectronics ****************** +;* File Name : startup_stm32l431xx.s +;* Author : MCD Application Team +;* Description : STM32L431xx Ultra Low Power devices vector table for MDK-ARM toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the Cortex-M4 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +;* +;* Redistribution and use in source and binary forms, with or without modification, +;* are permitted provided that the following conditions are met: +;* 1. Redistributions of source code must retain the above copyright notice, +;* this list of conditions and the following disclaimer. +;* 2. Redistributions in binary form must reproduce the above copyright notice, +;* this list of conditions and the following disclaimer in the documentation +;* and/or other materials provided with the distribution. +;* 3. Neither the name of STMicroelectronics nor the names of its contributors +;* may be used to endorse or promote products derived from this software +;* without specific prior written permission. +;* +;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;* +;******************************************************************************* +; +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x100 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x100 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window WatchDog + DCD PVD_PVM_IRQHandler ; PVD/PVM1/PVM2/PVM3/PVM4 through EXTI Line detection + DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line + DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line + DCD FLASH_IRQHandler ; FLASH + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line0 + DCD EXTI1_IRQHandler ; EXTI Line1 + DCD EXTI2_IRQHandler ; EXTI Line2 + DCD EXTI3_IRQHandler ; EXTI Line3 + DCD EXTI4_IRQHandler ; EXTI Line4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_IRQHandler ; ADC1 + DCD CAN1_TX_IRQHandler ; CAN1 TX + DCD CAN1_RX0_IRQHandler ; CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; External Line[9:5]s + DCD TIM1_BRK_TIM15_IRQHandler ; TIM1 Break and TIM15 + DCD TIM1_UP_TIM16_IRQHandler ; TIM1 Update and TIM16 + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; External Line[15:10] + DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SDMMC1_IRQHandler ; SDMMC1 + DCD 0 ; Reserved + DCD SPI3_IRQHandler ; SPI3 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors + DCD TIM7_IRQHandler ; TIM7 + DCD DMA2_Channel1_IRQHandler ; DMA2 Channel 1 + DCD DMA2_Channel2_IRQHandler ; DMA2 Channel 2 + DCD DMA2_Channel3_IRQHandler ; DMA2 Channel 3 + DCD DMA2_Channel4_IRQHandler ; DMA2 Channel 4 + DCD DMA2_Channel5_IRQHandler ; DMA2 Channel 5 + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD COMP_IRQHandler ; COMP Interrupt + DCD LPTIM1_IRQHandler ; LP TIM1 interrupt + DCD LPTIM2_IRQHandler ; LP TIM2 interrupt + DCD 0 ; Reserved + DCD DMA2_Channel6_IRQHandler ; DMA2 Channel 6 + DCD DMA2_Channel7_IRQHandler ; DMA2 Channel 7 + DCD LPUART1_IRQHandler ; LP UART1 interrupt + DCD QUADSPI_IRQHandler ; Quad SPI global interrupt + DCD I2C3_EV_IRQHandler ; I2C3 event + DCD I2C3_ER_IRQHandler ; I2C3 error + DCD SAI1_IRQHandler ; Serial Audio Interface 1 global interrupt + DCD 0 ; Reserved + DCD SWPMI1_IRQHandler ; Serial Wire Interface 1 global interrupt + DCD TSC_IRQHandler ; Touch Sense Controller global interrupt + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD RNG_IRQHandler ; RNG global interrupt + DCD FPU_IRQHandler ; FPU + DCD CRS_IRQHandler ; CRS interrupt + +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + LDR R0, =__main + BX R0 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_PVM_IRQHandler [WEAK] + EXPORT TAMP_STAMP_IRQHandler [WEAK] + EXPORT RTC_WKUP_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_IRQHandler [WEAK] + EXPORT CAN1_TX_IRQHandler [WEAK] + EXPORT CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_TIM15_IRQHandler [WEAK] + EXPORT TIM1_UP_TIM16_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT SDMMC1_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + EXPORT TIM6_DAC_IRQHandler [WEAK] + EXPORT TIM7_IRQHandler [WEAK] + EXPORT DMA2_Channel1_IRQHandler [WEAK] + EXPORT DMA2_Channel2_IRQHandler [WEAK] + EXPORT DMA2_Channel3_IRQHandler [WEAK] + EXPORT DMA2_Channel4_IRQHandler [WEAK] + EXPORT DMA2_Channel5_IRQHandler [WEAK] + EXPORT COMP_IRQHandler [WEAK] + EXPORT LPTIM1_IRQHandler [WEAK] + EXPORT LPTIM2_IRQHandler [WEAK] + EXPORT DMA2_Channel6_IRQHandler [WEAK] + EXPORT DMA2_Channel7_IRQHandler [WEAK] + EXPORT LPUART1_IRQHandler [WEAK] + EXPORT QUADSPI_IRQHandler [WEAK] + EXPORT I2C3_EV_IRQHandler [WEAK] + EXPORT I2C3_ER_IRQHandler [WEAK] + EXPORT SAI1_IRQHandler [WEAK] + EXPORT SWPMI1_IRQHandler [WEAK] + EXPORT TSC_IRQHandler [WEAK] + EXPORT RNG_IRQHandler [WEAK] + EXPORT FPU_IRQHandler [WEAK] + EXPORT CRS_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_PVM_IRQHandler +TAMP_STAMP_IRQHandler +RTC_WKUP_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_IRQHandler +CAN1_TX_IRQHandler +CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_TIM15_IRQHandler +TIM1_UP_TIM16_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTC_Alarm_IRQHandler +SDMMC1_IRQHandler +SPI3_IRQHandler +TIM6_DAC_IRQHandler +TIM7_IRQHandler +DMA2_Channel1_IRQHandler +DMA2_Channel2_IRQHandler +DMA2_Channel3_IRQHandler +DMA2_Channel4_IRQHandler +DMA2_Channel5_IRQHandler +COMP_IRQHandler +LPTIM1_IRQHandler +LPTIM2_IRQHandler +DMA2_Channel6_IRQHandler +DMA2_Channel7_IRQHandler +LPUART1_IRQHandler +QUADSPI_IRQHandler +I2C3_EV_IRQHandler +I2C3_ER_IRQHandler +SAI1_IRQHandler +SWPMI1_IRQHandler +TSC_IRQHandler +RNG_IRQHandler +FPU_IRQHandler +CRS_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE***** diff --git a/examples/micropython_demo/micropython_demo.c b/examples/micropython_demo/micropython_demo.c new file mode 100644 index 00000000..ccc034f1 --- /dev/null +++ b/examples/micropython_demo/micropython_demo.c @@ -0,0 +1,53 @@ +#include "tos_k.h" +#include "mpmain.h" +#include "mpconfigboard.h" + +#ifdef MP_USING_VFS +#include "tos_vfs.h" +#include "ff.h" +#endif /* MP_USING_VFS */ + +#ifdef MP_USING_QSPI_FLASH +#include "w25qxx.h" +#endif /* MP_USING_QSPI_FLASH */ + +#define MP_TASK_PRIO (3) +#ifndef MP_TASK_STACK_SIZE +#define MP_TASK_STACK_SIZE (4 * 1024) +#endif + +// MicroPython task stack +__STATIC__ k_stack_t mp_task_stack[MP_TASK_STACK_SIZE]; +__STATIC__ k_task_t mp_task; + +void mp_entry(void *arg) { + + #ifdef MP_USING_VFS + extern vfs_blkdev_ops_t sd_dev; + extern vfs_fs_ops_t fatfs_ops; + + tos_vfs_block_device_register("/dev/sd", &sd_dev); + tos_vfs_fs_register("fatfs_sd", &fatfs_ops); + + if (tos_vfs_fs_mount("/dev/sd", "/fs", "fatfs_sd") != 0) { + printf("mount failed!\n"); + } + #endif /* MP_USING_VFS */ + + for (;;) { + mp_main(); + tos_task_delay(100); + } +} + +void application_entry(void *arg) { + + #ifdef MP_USING_QSPI_FLASH + w25qxx_init(); + w25qxx_memory_mapped(); + #endif /* MP_USING_QSPI_FLASH */ + + tos_task_create(&mp_task, "micropython", mp_entry, + K_NULL, MP_TASK_PRIO, mp_task_stack, + MP_TASK_STACK_SIZE, 0); +}