From f572b35040886cb0160d0a333ba713f69ee0cd98 Mon Sep 17 00:00:00 2001 From: xianting77 Date: Thu, 30 Sep 2021 12:03:13 +0800 Subject: [PATCH] add ch32v103 bsp support --- bsp/ch32v103/.config | 390 + bsp/ch32v103/.cproject | 204 + bsp/ch32v103/.gitignore | 25 + bsp/ch32v103/.project | 93 + bsp/ch32v103/.settings/language.settings.xml | 14 + .../org.eclipse.cdt.codan.core.prefs | 73 + .../.settings/org.eclipse.cdt.core.prefs | 6 + bsp/ch32v103/Kconfig | 27 + bsp/ch32v103/Makefile | 13 + bsp/ch32v103/README.md | 40 + bsp/ch32v103/SConscript | 18 + bsp/ch32v103/SConstruct | 31 + bsp/ch32v103/applications/SConscript | 11 + bsp/ch32v103/applications/main.c | 75 + bsp/ch32v103/board/Kconfig-bl | 35 + bsp/ch32v103/board/SConscript | 11 + bsp/ch32v103/board/board.c | 116 + bsp/ch32v103/board/board.h | 56 + bsp/ch32v103/drivers/Kconfig | 52 + bsp/ch32v103/drivers/SConscript | 29 + bsp/ch32v103/drivers/drv_gpio.c | 774 + bsp/ch32v103/drivers/drv_gpio.h | 29 + bsp/ch32v103/drivers/drv_usart.c | 259 + bsp/ch32v103/drivers/drv_usart.h | 18 + bsp/ch32v103/figures/compile.jpg | Bin 0 -> 54818 bytes bsp/ch32v103/figures/demo.jpg | Bin 0 -> 26774 bytes bsp/ch32v103/figures/shell run.jpg | Bin 0 -> 57007 bytes bsp/ch32v103/libraries/Core/core_riscv.c | 380 + bsp/ch32v103/libraries/Core/core_riscv.h | 303 + bsp/ch32v103/libraries/SConscript | 25 + .../libraries/Startup/startup_ch32v10x.S | 187 + .../WCH32V103_std_peripheral/ch32v10x_conf.h | 39 + .../WCH32V103_std_peripheral/ch32v10x_it.c | 50 + .../WCH32V103_std_peripheral/ch32v10x_it.h | 17 + .../WCH32V103_std_peripheral/debug.c | 162 + .../WCH32V103_std_peripheral/debug.h | 34 + .../WCH32V103_std_peripheral/inc/ch32v10x.h | 3244 ++ .../inc/ch32v10x_adc.h | 193 + .../inc/ch32v10x_bkp.h | 95 + .../inc/ch32v10x_crc.h | 35 + .../inc/ch32v10x_dbgmcu.h | 48 + .../inc/ch32v10x_dma.h | 216 + .../inc/ch32v10x_exti.h | 88 + .../inc/ch32v10x_flash.h | 157 + .../inc/ch32v10x_gpio.h | 165 + .../inc/ch32v10x_i2c.h | 208 + .../inc/ch32v10x_iwdg.h | 54 + .../inc/ch32v10x_misc.h | 44 + .../inc/ch32v10x_pwr.h | 57 + .../inc/ch32v10x_rcc.h | 232 + .../inc/ch32v10x_rtc.h | 52 + .../inc/ch32v10x_spi.h | 227 + .../inc/ch32v10x_tim.h | 513 + .../inc/ch32v10x_usart.h | 193 + .../inc/ch32v10x_usb.h | 707 + .../inc/ch32v10x_usb_host.h | 97 + .../inc/ch32v10x_wwdg.h | 40 + .../src/ch32v10x_adc.c | 1029 + .../src/ch32v10x_bkp.c | 221 + .../src/ch32v10x_crc.c | 92 + .../src/ch32v10x_dbgmcu.c | 60 + .../src/ch32v10x_dma.c | 528 + .../src/ch32v10x_exti.c | 157 + .../src/ch32v10x_flash.c | 900 + .../src/ch32v10x_gpio.c | 472 + .../src/ch32v10x_i2c.c | 883 + .../src/ch32v10x_iwdg.c | 109 + .../src/ch32v10x_misc.c | 102 + .../src/ch32v10x_pwr.c | 196 + .../src/ch32v10x_rcc.c | 837 + .../src/ch32v10x_rtc.c | 244 + .../src/ch32v10x_spi.c | 587 + .../src/ch32v10x_tim.c | 2079 ++ .../src/ch32v10x_usart.c | 731 + .../src/ch32v10x_usb.c | 149 + .../src/ch32v10x_usb_host.c | 708 + .../src/ch32v10x_wwdg.c | 123 + .../system_ch32v10x.c | 505 + .../system_ch32v10x.h | 28 + bsp/ch32v103/linkscripts/link.lds | 193 + bsp/ch32v103/rtconfig.h | 164 + bsp/ch32v103/rtconfig.py | 66 + libcpu/risc-v/SConscript | 2 + libcpu/risc-v/ch32v103/SConscript | 14 + libcpu/risc-v/ch32v103/context_gcc.S | 294 + libcpu/risc-v/ch32v103/cpuport.c | 166 + libcpu/risc-v/ch32v103/cpuport.h | 44 + libcpu/risc-v/ch32v103/cpuport.s | 27797 ++++++++++++++++ libcpu/risc-v/ch32v103/interrupt_gcc.S | 124 + 89 files changed, 49865 insertions(+) create mode 100644 bsp/ch32v103/.config create mode 100644 bsp/ch32v103/.cproject create mode 100644 bsp/ch32v103/.gitignore create mode 100644 bsp/ch32v103/.project create mode 100644 bsp/ch32v103/.settings/language.settings.xml create mode 100644 bsp/ch32v103/.settings/org.eclipse.cdt.codan.core.prefs create mode 100644 bsp/ch32v103/.settings/org.eclipse.cdt.core.prefs create mode 100644 bsp/ch32v103/Kconfig create mode 100644 bsp/ch32v103/Makefile create mode 100644 bsp/ch32v103/README.md create mode 100644 bsp/ch32v103/SConscript create mode 100644 bsp/ch32v103/SConstruct create mode 100644 bsp/ch32v103/applications/SConscript create mode 100644 bsp/ch32v103/applications/main.c create mode 100644 bsp/ch32v103/board/Kconfig-bl create mode 100644 bsp/ch32v103/board/SConscript create mode 100644 bsp/ch32v103/board/board.c create mode 100644 bsp/ch32v103/board/board.h create mode 100644 bsp/ch32v103/drivers/Kconfig create mode 100644 bsp/ch32v103/drivers/SConscript create mode 100644 bsp/ch32v103/drivers/drv_gpio.c create mode 100644 bsp/ch32v103/drivers/drv_gpio.h create mode 100644 bsp/ch32v103/drivers/drv_usart.c create mode 100644 bsp/ch32v103/drivers/drv_usart.h create mode 100644 bsp/ch32v103/figures/compile.jpg create mode 100644 bsp/ch32v103/figures/demo.jpg create mode 100644 bsp/ch32v103/figures/shell run.jpg create mode 100644 bsp/ch32v103/libraries/Core/core_riscv.c create mode 100644 bsp/ch32v103/libraries/Core/core_riscv.h create mode 100644 bsp/ch32v103/libraries/SConscript create mode 100644 bsp/ch32v103/libraries/Startup/startup_ch32v10x.S create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_conf.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_it.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_it.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/debug.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/debug.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_adc.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_bkp.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_crc.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_dbgmcu.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_dma.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_exti.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_flash.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_gpio.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_i2c.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_iwdg.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_misc.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_pwr.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_rcc.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_rtc.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_spi.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_tim.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usart.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usb.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usb_host.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_wwdg.h create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_adc.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_bkp.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_crc.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_dbgmcu.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_dma.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_exti.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_flash.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_gpio.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_i2c.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_iwdg.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_misc.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_pwr.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_rcc.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_rtc.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_spi.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_tim.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usart.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usb.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usb_host.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_wwdg.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/system_ch32v10x.c create mode 100644 bsp/ch32v103/libraries/WCH32V103_std_peripheral/system_ch32v10x.h create mode 100644 bsp/ch32v103/linkscripts/link.lds create mode 100644 bsp/ch32v103/rtconfig.h create mode 100644 bsp/ch32v103/rtconfig.py create mode 100644 libcpu/risc-v/ch32v103/SConscript create mode 100644 libcpu/risc-v/ch32v103/context_gcc.S create mode 100644 libcpu/risc-v/ch32v103/cpuport.c create mode 100644 libcpu/risc-v/ch32v103/cpuport.h create mode 100644 libcpu/risc-v/ch32v103/cpuport.s create mode 100644 libcpu/risc-v/ch32v103/interrupt_gcc.S diff --git a/bsp/ch32v103/.config b/bsp/ch32v103/.config new file mode 100644 index 0000000000..64f136ff83 --- /dev/null +++ b/bsp/ch32v103/.config @@ -0,0 +1,390 @@ +# +# Automatically generated file; DO NOT EDIT. +# RT-Thread Configuration +# + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=7 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=512 +CONFIG_RT_DEBUG=y +# CONFIG_RT_DEBUG_COLOR is not set +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set + +# +# Memory Management +# +# CONFIG_RT_USING_MEMPOOL is not set +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" +CONFIG_RT_VER_NUM=0x40003 +# CONFIG_RT_USING_CPU_FFS is not set +# CONFIG_ARCH_CPU_STACK_GROWS_UPWARD is not set + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=512 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +# CONFIG_FINSH_USING_DESCRIPTION is not set +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=1024 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +# CONFIG_FINSH_USING_MSH_DEFAULT is not set +CONFIG_FINSH_USING_MSH_ONLY=y +CONFIG_FINSH_ARG_MAX=10 + +# +# Device virtual file system +# +# CONFIG_RT_USING_DFS is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +# CONFIG_RT_SERIAL_USING_DMA is not set +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set + +# +# POSIX layer and C standard library +# +CONFIG_RT_USING_LIBC=y +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set + +# +# light weight TCP/IP stack +# +# CONFIG_RT_USING_LWIP is not set + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# CONFIG_PKG_USING_RW007 is not set +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOTHUB is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ADBD is not set + +# +# system packages +# +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_LCD_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_DM9051 is not set + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_VT100 is not set + +# +# Hardware Drivers Config +# +CONFIG_SOC_CH32V103R8T6=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_UART_CONSOLE=y +CONFIG_BSP_USING_PIN=y + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_UART=y +# CONFIG_RT_USING_UART0 is not set +CONFIG_RT_USING_UART1=y +# CONFIG_RT_USING_UART2 is not set +# CONFIG_RT_USING_UART3 is not set +# CONFIG_RT_USING_UART4 is not set + +# +# Board extended module Drivers +# diff --git a/bsp/ch32v103/.cproject b/bsp/ch32v103/.cproject new file mode 100644 index 0000000000..ab8a04ff5c --- /dev/null +++ b/bsp/ch32v103/.cproject @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/ch32v103/.gitignore b/bsp/ch32v103/.gitignore new file mode 100644 index 0000000000..1272c34c3d --- /dev/null +++ b/bsp/ch32v103/.gitignore @@ -0,0 +1,25 @@ +*.i +*.o +*.d +*.elf +*.diss +*.map +*.bin +*.log +.vscode + +*.dump +*.verilog + +*.swp +*.swo + + +tags +TAGS +TAG +CTAGS +Makefile.local +Makefile.global + +/makefile.targets diff --git a/bsp/ch32v103/.project b/bsp/ch32v103/.project new file mode 100644 index 0000000000..f8011d80fd --- /dev/null +++ b/bsp/ch32v103/.project @@ -0,0 +1,93 @@ + + + CH32V103R8T6 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + rt-thread + 2 + virtual:/virtual + + + rt-thread/components + 2 + virtual:/virtual + + + rt-thread/include + 2 + $%7BPARENT-2-PROJECT_LOC%7D/include + + + rt-thread/lipcpu + 2 + virtual:/virtual + + + rt-thread/src + 2 + $%7BPARENT-2-PROJECT_LOC%7D/src + + + rt-thread/components/drivers + 2 + virtual:/virtual + + + rt-thread/components/finsh + 2 + $%7BPARENT-2-PROJECT_LOC%7D/components/finsh + + + rt-thread/components/src + 2 + $%7BPARENT-2-PROJECT_LOC%7D/components/drivers/src + + + rt-thread/lipcpu/ch32v103 + 2 + $%7BPARENT-2-PROJECT_LOC%7D/libcpu/risc-v/ch32v103 + + + rt-thread/lipcpu/common + 2 + $%7BPARENT-2-PROJECT_LOC%7D/libcpu/risc-v/common + + + rt-thread/components/drivers/include + 2 + $%7BPARENT-2-PROJECT_LOC%7D/components/drivers/include + + + rt-thread/components/drivers/include/drivers + 2 + $%7BPARENT-2-PROJECT_LOC%7D/components/drivers/include/drivers + + + rt-thread/components/drivers/serial + 2 + $%7BPARENT-2-PROJECT_LOC%7D/components/drivers/serial + + + diff --git a/bsp/ch32v103/.settings/language.settings.xml b/bsp/ch32v103/.settings/language.settings.xml new file mode 100644 index 0000000000..898d353ed7 --- /dev/null +++ b/bsp/ch32v103/.settings/language.settings.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/bsp/ch32v103/.settings/org.eclipse.cdt.codan.core.prefs b/bsp/ch32v103/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000000..4ee3a60be2 --- /dev/null +++ b/bsp/ch32v103/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,73 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=-Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=-Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=-Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=-Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=-Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=-Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=-Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=-Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=-Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=-Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=-Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"\u5B57\u6BB5\u65E0\u6CD5\u88AB\u89E3\u6790\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=-Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"\u51FD\u6570\u65E0\u6CD5\u88AB\u89E3\u6790\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=-Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"\u65E0\u6548\u53C2\u6570\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=-Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=-Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=-Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=-Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"\u65B9\u6CD5\u65E0\u6CD5\u88AB\u89E3\u6790\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=-Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=-Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=-Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=-Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"\u672A\u4F7F\u7528\u7684\u9759\u6001\u51FD\u6570\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} diff --git a/bsp/ch32v103/.settings/org.eclipse.cdt.core.prefs b/bsp/ch32v103/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000000..78348e33ab --- /dev/null +++ b/bsp/ch32v103/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.1573373326/PATH/delimiter=; +environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.1573373326/PATH/operation=replace +environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.1573373326/PATH/value=E\:\\DevBoard\\ARTT\\rt-studio\\RT-ThreadStudio\\repo\\Extract\\ToolChain_Support_Packages\\WCH\\RISC-V-GCC-WCH\\8.2.0\\riscv-none-embed\\bin;E\:\\DevBoard\\ARTT\\rt-studio\\RT-ThreadStudio\\repo\\Extract\\ToolChain_Support_Packages\\WCH\\RISC-V-GCC-WCH\\8.2.0\\riscv-none-embed\\bin;E\:\\DevBoard\\ARTT\\rt-studio\\RT-ThreadStudio\\platform\\env_released\\env\\tools\\BuildTools\\2.12-20190422-1053\\bin;${studio_install_path}${project_gener_relative_path}/builder;${studio_install_path}${project_gener_relative_path}/mdk +environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.1573373326/append=true +environment/project/ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.1573373326/appendContributed=true diff --git a/bsp/ch32v103/Kconfig b/bsp/ch32v103/Kconfig new file mode 100644 index 0000000000..42f9544b2a --- /dev/null +++ b/bsp/ch32v103/Kconfig @@ -0,0 +1,27 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +#source "board/Kconfig" +source "drivers/Kconfig" + +config SOC_CH32V103R8T6 + bool + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y diff --git a/bsp/ch32v103/Makefile b/bsp/ch32v103/Makefile new file mode 100644 index 0000000000..f2efa4a561 --- /dev/null +++ b/bsp/ch32v103/Makefile @@ -0,0 +1,13 @@ +phony := all +all: + +include config.mk + +ifneq ($(MAKE_LIB),1) +TARGET := rtthread.elf +include src.mk +endif + +$(if $(strip $(RTT_ROOT)),,$(error RTT_ROOT not defined)) + +include $(RTT_ROOT)/tools/rtthread.mk diff --git a/bsp/ch32v103/README.md b/bsp/ch32v103/README.md new file mode 100644 index 0000000000..947d50900f --- /dev/null +++ b/bsp/ch32v103/README.md @@ -0,0 +1,40 @@ +# CH32V103R# + +## 简介 + +ch32v103R-R1-1V0 是由沁恒微电子公司(http://wch.cn)推出的基于开源指令集 RISC-V 架构的开发板。 + +### 板载资源: + +| 硬件 | 描述 | +| -- | -- | +| 内核 | 沁恒 | +| 架构 | 32-bit RV32IMAC | +| 主频 | 72 MHz | + +### + +下载程序之后,连接串口(115200-N-8-1),可以看到 RT-Thread 的输出信息: + +``` + \ | / +- RT - Thread Operating System + / | \ 4.0.3 build Sep 29 2021 + 2006 - 2020 Copyright by rt-thread team + Rt-thread inside + MCU: CH32V103R8T6 + SysClk: 72000000Hz +msh > +``` + +## 驱动支持情况 + +| 驱动 | 支持情况 | 备注 | +| ------ | ---- | :------: | +| USART | 支持 | UART0_TX/RX:PA9/PA10 | + +## 5. 联系人信息 + +维护人: +- + diff --git a/bsp/ch32v103/SConscript b/bsp/ch32v103/SConscript new file mode 100644 index 0000000000..534ec8eb5a --- /dev/null +++ b/bsp/ch32v103/SConscript @@ -0,0 +1,18 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = str(Dir('#')) +src = Glob('*.c') +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +group = DefineGroup('', src, depend = [''], CPPPATH = []) +#objs += group +Return('objs') diff --git a/bsp/ch32v103/SConstruct b/bsp/ch32v103/SConstruct new file mode 100644 index 0000000000..33ab37287f --- /dev/null +++ b/bsp/ch32v103/SConstruct @@ -0,0 +1,31 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +from building import * + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) +env['ASCOM'] = env['ASPPCOM'] + +Export('RTT_ROOT') +Export('rtconfig') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/ch32v103/applications/SConscript b/bsp/ch32v103/applications/SConscript new file mode 100644 index 0000000000..ef1c39fd83 --- /dev/null +++ b/bsp/ch32v103/applications/SConscript @@ -0,0 +1,11 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd, ] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/ch32v103/applications/main.c b/bsp/ch32v103/applications/main.c new file mode 100644 index 0000000000..cff240f22a --- /dev/null +++ b/bsp/ch32v103/applications/main.c @@ -0,0 +1,75 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : main.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : Main program body. +*******************************************************************************/ +#include "ch32v10x.h" +#include +#include +#include "drivers/pin.h" + +/* Global typedef */ + +/* Global define */ + +/* LED0ͨrtpinӿ */ +#define LED0_PIN 15 //PA1 + +/* Global Variable */ + + +/* LED1ֱͨӵõײ */ +void LED1_BLINK_INIT(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); +} + + +/* mainֻһ֮߳һ֮⻹tshell,idle. + * mainֻһLED˸main̵߳עrtthread_startup + * + * */ +int main(void) +{ + rt_kprintf("RT-Thread inside \r\n"); + rt_kprintf("MCU: CH32V103R8T6\r\n"); + rt_kprintf("SysClk: %dHz\r\n",SystemCoreClock); + + LED1_BLINK_INIT(); + GPIO_ResetBits(GPIOA,GPIO_Pin_0); + while(1) + { + GPIO_SetBits(GPIOA,GPIO_Pin_0); + rt_thread_mdelay(500); + + GPIO_ResetBits(GPIOA,GPIO_Pin_0); + rt_thread_mdelay(500); + } +} + +/* ʹӿڲI/O */ +int led(void) +{ + rt_uint8_t count; + rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); + for(count = 0 ; count < 10 ;count++) + { + rt_pin_write(LED0_PIN, PIN_LOW); + rt_kprintf("led on, count : %d\r\n", count); + rt_thread_mdelay(500); + + rt_pin_write(LED0_PIN, PIN_HIGH); + rt_kprintf("led off\r\n"); + rt_thread_mdelay(500); + } + return 0; +} +MSH_CMD_EXPORT(led, RT-Thread first led sample by using I/O driver); + diff --git a/bsp/ch32v103/board/Kconfig-bl b/bsp/ch32v103/board/Kconfig-bl new file mode 100644 index 0000000000..e9573713da --- /dev/null +++ b/bsp/ch32v103/board/Kconfig-bl @@ -0,0 +1,35 @@ +menu "Hardware Drivers Config" + + +config SOC_CH32V103R8T6 + bool + select SOC_SERIES_CH32V103R8T6 + default y + +menu "Onboard Peripheral Drivers" + + config BSP_USING_USART + bool "Enable USART (usart0)" + select BSP_USING_UART + select BSP_USING_UART0 + default y +endmenu + +menu "On-chip Peripheral Drivers" + + menuconfig BSP_USING_UART + bool "Enable USART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART0 + bool "Enable USART0" + default y + endif +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/ch32v103/board/SConscript b/bsp/ch32v103/board/SConscript new file mode 100644 index 0000000000..148c99f42c --- /dev/null +++ b/bsp/ch32v103/board/SConscript @@ -0,0 +1,11 @@ +# RT-Thread building script for component + +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/ch32v103/board/board.c b/bsp/ch32v103/board/board.c new file mode 100644 index 0000000000..8003a94e91 --- /dev/null +++ b/bsp/ch32v103/board/board.c @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2017-07-24 Tanek the first version + * 2018-11-12 Ernest Chen modify copyright + */ + +#include "board.h" + +#include +#include "drv_usart.h" + +#include +#include + + +// Updates the variable SystemCoreClock and must be called +// whenever the core clock is changed during program execution. +extern void SystemCoreClockUpdate(void); + +// Holds the system core clock, which is the system clock +// frequency supplied to the SysTick timer and the processor +// core clock. +extern uint32_t SystemCoreClock; + +volatile rt_uint32_t g_ticks=0; + +static uint32_t _SysTick_Config(rt_uint32_t ticks) +{ + if ((ticks - 1) > 0xFFFFFF) + { + return 1; + } + g_ticks=ticks; + PFIC->CFGR=0xFA050003; /* رӲѹջǶ */ + NVIC_SetPriority(SysTicK_IRQn,0xf0); + NVIC_SetPriority(Software_IRQn,0xf0); + SysTick->CTLR=0; + SysTick->CNTL0=0;SysTick->CNTL1=0;SysTick->CNTL2=0;SysTick->CNTL3=0; + SysTick->CNTH0=0;SysTick->CNTH1=0;SysTick->CNTH2=0;SysTick->CNTH3=0; + SysTick->CMPLR0=(rt_uint8_t)(g_ticks-1); + SysTick->CMPLR1=(rt_uint8_t)((g_ticks-1)>>8); + SysTick->CMPLR2=(rt_uint8_t)((g_ticks-1)>>16); + SysTick->CMPLR3=(rt_uint8_t)((g_ticks-1)>>24); + SysTick->CMPHR0=0;SysTick->CMPHR1=0;SysTick->CMPHR2=0;SysTick->CMPHR3=0; + SysTick->CTLR=0x1; + NVIC_EnableIRQ(SysTicK_IRQn); + NVIC_EnableIRQ(Software_IRQn); + return 0; +} + +#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) +#define RT_HEAP_SIZE (1024) +static uint32_t rt_heap[RT_HEAP_SIZE]; // heap default size: 4K(1024 * 4) +RT_WEAK void *rt_heap_begin_get(void) +{ + return rt_heap; +} + +RT_WEAK void *rt_heap_end_get(void) +{ + return rt_heap + RT_HEAP_SIZE; +} +#endif + +/** + * This function will initial your board. + */ +void rt_hw_board_init() +{ + /* System Clock Update */ + SystemCoreClockUpdate(); + + /* System Tick Configuration */ + _SysTick_Config(SystemCoreClock/ 8 / RT_TICK_PER_SECOND); + /* Call components board initial (use INIT_BOARD_EXPORT()) */ +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif +#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) + rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get()); +#endif + +#ifdef RT_USING_CONSOLE + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif +} + + +void SysTick_Handler(void) __attribute__((interrupt())); +void SysTick_Handler(void) +{ + GET_INT_SP(); + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + SysTick->CTLR=0; + SysTick->CNTL0=0;SysTick->CNTL1=0;SysTick->CNTL2=0;SysTick->CNTL3=0; + SysTick->CNTH0=0;SysTick->CNTH1=0;SysTick->CNTH2=0;SysTick->CNTH3=0; + SysTick->CMPLR0=(rt_uint8_t)(g_ticks-1); + SysTick->CMPLR1=(rt_uint8_t)((g_ticks-1)>>8); + SysTick->CMPLR2=(rt_uint8_t)((g_ticks-1)>>16); + SysTick->CMPLR3=(rt_uint8_t)((g_ticks-1)>>24); + SysTick->CMPHR0=0;SysTick->CMPHR1=0;SysTick->CMPHR2=0;SysTick->CMPHR3=0; + SysTick->CTLR=0x1; + + /* leave interrupt */ + rt_interrupt_leave(); + FREE_INT_SP(); + +} diff --git a/bsp/ch32v103/board/board.h b/bsp/ch32v103/board/board.h new file mode 100644 index 0000000000..7e95c52cdf --- /dev/null +++ b/bsp/ch32v103/board/board.h @@ -0,0 +1,56 @@ +/* + * File : board.h + * + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * + * Change Logs: + * Date Author Notes + * 2009-09-22 Bernard add board.h to this bsp + * 2017-10-20 ZYH emmm...setup for HAL Libraries + * 2021-10-01 Walter modify copyright + */ + +// <<< Use Configuration Wizard in Context Menu >>> +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include "ch32v10x.h" + +#define CH32V10X_PIN_NUMBERS 64 +/* board configuration */ +#define SRAM_SIZE 20 +/* whether use board external SRAM memory */ +// Use external SRAM memory on the board +// Enable External SRAM memory +#define EXT_SRAM 0 +// Begin Address of External SRAM +// Default: 0x68000000 +#define EXT_SRAM_BEGIN 0x68000000 /* the begining address of external SRAM */ +// End Address of External SRAM +// Default: 0x68080000 +#define EXT_SRAM_END 0x68080000 /* the end address of external SRAM */ +// +// Internal SRAM memory size[Kbytes] <8-64> +// Default: 64 +#define SRAM_END (0x20000000 + SRAM_SIZE * 1024) + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="HEAP" +#define HEAP_BEGIN (__segment_end("HEAP")) +#else +extern int _ebss; +#define HEAP_BEGIN ((void *)&_ebss) +#endif +#define HEAP_END SRAM_END + + +//extern volatile unsigned long interrupter_sp_saver; +void rt_hw_board_init(void); + +#endif /* __BOARD_H__ */ diff --git a/bsp/ch32v103/drivers/Kconfig b/bsp/ch32v103/drivers/Kconfig new file mode 100644 index 0000000000..3d5d145194 --- /dev/null +++ b/bsp/ch32v103/drivers/Kconfig @@ -0,0 +1,52 @@ +menu "Hardware Drivers Config" + +config SOC_CH32V103R8T6 + bool + select SOC_SERIES_CH32V103 + default y + +menu "Onboard Peripheral Drivers" + + config BSP_USING_UART_CONSOLE + bool "Enable UART CONSOLE" + select BSP_USING_UART + default y + + config BSP_USING_PIN + bool "Enable PIN" + select RT_USING_PIN + default y + +endmenu + +menu "On-chip Peripheral Drivers" + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config RT_USING_UART0 + bool "Enable UART0" + default n + config RT_USING_UART1 + bool "Enable UART1" + default n + config RT_USING_UART2 + bool "Enable UART2" + default n + config RT_USING_UART3 + bool "Enable UART3" + default n + config RT_USING_UART4 + bool "Enable UART4" + default n + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/ch32v103/drivers/SConscript b/bsp/ch32v103/drivers/SConscript new file mode 100644 index 0000000000..148f402a14 --- /dev/null +++ b/bsp/ch32v103/drivers/SConscript @@ -0,0 +1,29 @@ +# RT-Thread building script for component + +Import('rtconfig') +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +src = Split(''' +drv_usart.c +''') +#CPPPATH = [cwd] + + +if GetDepend('RT_USING_PIN'): + src += ['drv_gpio.c'] + +#if GetDepend('RT_USING_I2C'): +# src += ['drv_i2c.c'] + +#if GetDepend('RT_USING_UART'): +# src += ['drv_uart.c'] + +CPPPATH = [RTT_ROOT+'/components/drivers/include/drivers' , + cwd ] + + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/ch32v103/drivers/drv_gpio.c b/bsp/ch32v103/drivers/drv_gpio.c new file mode 100644 index 0000000000..e98381d746 --- /dev/null +++ b/bsp/ch32v103/drivers/drv_gpio.c @@ -0,0 +1,774 @@ +/* + * File : drv_gpio.c + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2017-10-20 ZYH the first version + * 2017-11-15 ZYH update to 3.0.0 + * 2021-10-01 Walter modify License declare. + */ + +#include +#include +#include +#include +#include +#include "drivers/pin.h" + + +#ifdef RT_USING_PIN +#define __CH32_PIN(index, gpio, gpio_index) {index, GPIO##gpio##_CLK_ENABLE, GPIO##gpio, GPIO_Pin_##gpio_index} +#define __CH32_PIN_DEFAULT {-1, 0, 0, 0} + + +static void GPIOA_CLK_ENABLE(void) +{ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); +} + +static void GPIOB_CLK_ENABLE(void) +{ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); +} + +#if (CH32V10X_PIN_NUMBERS >36) +static void GPIOC_CLK_ENABLE(void) +{ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); +} +#endif + +#if (CH32V10X_PIN_NUMBERS >48) +static void GPIOD_CLK_ENABLE(void) +{ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); +} +#endif + +#if (CH32V10X_PIN_NUMBERS >64) +static void GPIOE_CLK_ENABLE(void) +{ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); +} +#endif + + + + + +/* STM32 GPIO driver */ +struct pin_index +{ + int index; + void (*rcc)(void); + GPIO_TypeDef *gpio; + uint32_t pin; +}; + +static const struct pin_index pins[] = +{ +#if (CH32V10X_PIN_NUMBERS == 36) + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(7, A, 0), + __CH32_PIN(8, A, 1), + __CH32_PIN(9, A, 2), + __CH32_PIN(10, A, 3), + __CH32_PIN(11, A, 4), + __CH32_PIN(12, A, 5), + __CH32_PIN(13, A, 6), + __CH32_PIN(14, A, 7), + __CH32_PIN(15, B, 0), + __CH32_PIN(16, B, 1), + __CH32_PIN(17, B, 2), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(20, A, 8), + __CH32_PIN(21, A, 9), + __CH32_PIN(22, A, 10), + __CH32_PIN(23, A, 11), + __CH32_PIN(24, A, 12), + __CH32_PIN(25, A, 13), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(28, A, 14), + __CH32_PIN(29, A, 15), + __CH32_PIN(30, B, 3), + __CH32_PIN(31, B, 4), + __CH32_PIN(32, B, 5), + __CH32_PIN(33, B, 6), + __CH32_PIN(34, B, 7), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, +#endif +#if (CH32V10X_PIN_NUMBERS == 48) + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(2, C, 13), + __CH32_PIN(3, C, 14), + __CH32_PIN(4, C, 15), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(10, A, 0), + __CH32_PIN(11, A, 1), + __CH32_PIN(12, A, 2), + __CH32_PIN(13, A, 3), + __CH32_PIN(14, A, 4), + __CH32_PIN(15, A, 5), + __CH32_PIN(16, A, 6), + __CH32_PIN(17, A, 7), + __CH32_PIN(18, B, 0), + __CH32_PIN(19, B, 1), + __CH32_PIN(20, B, 2), + __CH32_PIN(21, B, 10), + __CH32_PIN(22, B, 11), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(25, B, 12), + __CH32_PIN(26, B, 13), + __CH32_PIN(27, B, 14), + __CH32_PIN(28, B, 15), + __CH32_PIN(29, A, 8), + __CH32_PIN(30, A, 9), + __CH32_PIN(31, A, 10), + __CH32_PIN(32, A, 11), + __CH32_PIN(33, A, 12), + __CH32_PIN(34, A, 13), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(37, A, 14), + __CH32_PIN(38, A, 15), + __CH32_PIN(39, B, 3), + __CH32_PIN(40, B, 4), + __CH32_PIN(41, B, 5), + __CH32_PIN(42, B, 6), + __CH32_PIN(43, B, 7), + __CH32_PIN_DEFAULT, + __CH32_PIN(45, B, 8), + __CH32_PIN(46, B, 9), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, +#endif + +#if (CH32V10X_PIN_NUMBERS == 64) + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(2, C, 13), + __CH32_PIN(3, C, 14), + __CH32_PIN(4, C, 15), + __CH32_PIN(5, D, 0), + __CH32_PIN(6, D, 1), + __CH32_PIN_DEFAULT, + __CH32_PIN(8, C, 0), + __CH32_PIN(9, C, 1), + __CH32_PIN(10, C, 2), + __CH32_PIN(11, C, 3), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(14, A, 0), + __CH32_PIN(15, A, 1), + __CH32_PIN(16, A, 2), + __CH32_PIN(17, A, 3), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(20, A, 4), + __CH32_PIN(21, A, 5), + __CH32_PIN(22, A, 6), + __CH32_PIN(23, A, 7), + __CH32_PIN(24, C, 4), + __CH32_PIN(25, C, 5), + __CH32_PIN(26, B, 0), + __CH32_PIN(27, B, 1), + __CH32_PIN(28, B, 2), + __CH32_PIN(29, B, 10), + __CH32_PIN(30, B, 11), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(33, B, 12), + __CH32_PIN(34, B, 13), + __CH32_PIN(35, B, 14), + __CH32_PIN(36, B, 15), + __CH32_PIN(37, C, 6), + __CH32_PIN(38, C, 7), + __CH32_PIN(39, C, 8), + __CH32_PIN(40, C, 9), + __CH32_PIN(41, A, 8), + __CH32_PIN(42, A, 9), + __CH32_PIN(43, A, 10), + __CH32_PIN(44, A, 11), + __CH32_PIN(45, A, 12), + __CH32_PIN(46, A, 13), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(49, A, 14), + __CH32_PIN(50, A, 15), + __CH32_PIN(51, C, 10), + __CH32_PIN(52, C, 11), + __CH32_PIN(53, C, 12), + __CH32_PIN(54, D, 2), + __CH32_PIN(55, B, 3), + __CH32_PIN(56, B, 4), + __CH32_PIN(57, B, 5), + __CH32_PIN(58, B, 6), + __CH32_PIN(59, B, 7), + __CH32_PIN_DEFAULT, + __CH32_PIN(61, B, 8), + __CH32_PIN(62, B, 9), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, +#endif +#if (CH32V10X_PIN_NUMBERS == 100) + __CH32_PIN_DEFAULT, + __CH32_PIN(1, E, 2), + __CH32_PIN(2, E, 3), + __CH32_PIN(3, E, 4), + __CH32_PIN(4, E, 5), + __CH32_PIN(5, E, 6), + __CH32_PIN_DEFAULT, + __CH32_PIN(7, C, 13), + __CH32_PIN(8, C, 14), + __CH32_PIN(9, C, 15), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(15, C, 0), + __CH32_PIN(16, C, 1), + __CH32_PIN(17, C, 2), + __CH32_PIN(18, C, 3), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(23, A, 0), + __CH32_PIN(24, A, 1), + __CH32_PIN(25, A, 2), + __CH32_PIN(26, A, 3), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(29, A, 4), + __CH32_PIN(30, A, 5), + __CH32_PIN(31, A, 6), + __CH32_PIN(32, A, 7), + __CH32_PIN(33, C, 4), + __CH32_PIN(34, C, 5), + __CH32_PIN(35, B, 0), + __CH32_PIN(36, B, 1), + __CH32_PIN(37, B, 2), + __CH32_PIN(38, E, 7), + __CH32_PIN(39, E, 8), + __CH32_PIN(40, E, 9), + __CH32_PIN(41, E, 10), + __CH32_PIN(42, E, 11), + __CH32_PIN(43, E, 12), + __CH32_PIN(44, E, 13), + __CH32_PIN(45, E, 14), + __CH32_PIN(46, E, 15), + __CH32_PIN(47, B, 10), + __CH32_PIN(48, B, 11), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(51, B, 12), + __CH32_PIN(52, B, 13), + __CH32_PIN(53, B, 14), + __CH32_PIN(54, B, 15), + __CH32_PIN(55, D, 8), + __CH32_PIN(56, D, 9), + __CH32_PIN(57, D, 10), + __CH32_PIN(58, D, 11), + __CH32_PIN(59, D, 12), + __CH32_PIN(60, D, 13), + __CH32_PIN(61, D, 14), + __CH32_PIN(62, D, 15), + __CH32_PIN(63, C, 6), + __CH32_PIN(64, C, 7), + __CH32_PIN(65, C, 8), + __CH32_PIN(66, C, 9), + __CH32_PIN(67, A, 8), + __CH32_PIN(68, A, 9), + __CH32_PIN(69, A, 10), + __CH32_PIN(70, A, 11), + __CH32_PIN(71, A, 12), + __CH32_PIN(72, A, 13), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, + __CH32_PIN(76, A, 14), + __CH32_PIN(77, A, 15), + __CH32_PIN(78, C, 10), + __CH32_PIN(79, C, 11), + __CH32_PIN(80, C, 12), + __CH32_PIN(81, D, 0), + __CH32_PIN(82, D, 1), + __CH32_PIN(83, D, 2), + __CH32_PIN(84, D, 3), + __CH32_PIN(85, D, 4), + __CH32_PIN(86, D, 5), + __CH32_PIN(87, D, 6), + __CH32_PIN(88, D, 7), + __CH32_PIN(89, B, 3), + __CH32_PIN(90, B, 4), + __CH32_PIN(91, B, 5), + __CH32_PIN(92, B, 6), + __CH32_PIN(93, B, 7), + __CH32_PIN_DEFAULT, + __CH32_PIN(95, B, 8), + __CH32_PIN(96, B, 9), + __CH32_PIN(97, E, 0), + __CH32_PIN(98, E, 1), + __CH32_PIN_DEFAULT, + __CH32_PIN_DEFAULT, +#endif +}; + +struct pin_irq_map +{ + rt_uint16_t pinbit; + IRQn_Type irqno; +}; +static const struct pin_irq_map pin_irq_map[] = +{ + {GPIO_Pin_0, EXTI0_IRQn}, + {GPIO_Pin_1, EXTI1_IRQn}, + {GPIO_Pin_2, EXTI2_IRQn}, + {GPIO_Pin_3, EXTI3_IRQn}, + {GPIO_Pin_4, EXTI4_IRQn}, + {GPIO_Pin_5, EXTI9_5_IRQn}, + {GPIO_Pin_6, EXTI9_5_IRQn}, + {GPIO_Pin_7, EXTI9_5_IRQn}, + {GPIO_Pin_8, EXTI9_5_IRQn}, + {GPIO_Pin_9, EXTI9_5_IRQn}, + {GPIO_Pin_10, EXTI15_10_IRQn}, + {GPIO_Pin_11, EXTI15_10_IRQn}, + {GPIO_Pin_12, EXTI15_10_IRQn}, + {GPIO_Pin_13, EXTI15_10_IRQn}, + {GPIO_Pin_14, EXTI15_10_IRQn}, + {GPIO_Pin_15, EXTI15_10_IRQn}, +}; +struct rt_pin_irq_hdr pin_irq_hdr_tab[] = +{ + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, + { -1, 0, RT_NULL, RT_NULL}, +}; + +#define ITEM_NUM(items) sizeof(items) / sizeof(items[0]) +const struct pin_index *get_pin(uint8_t pin) +{ + const struct pin_index *index; + if (pin < ITEM_NUM(pins)) + { + index = &pins[pin]; + if (index->index == -1) + index = RT_NULL; + } + else + { + index = RT_NULL; + } + return index; +}; + +void ch32_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value) +{ + const struct pin_index *index; + index = get_pin(pin); + if (index == RT_NULL) + { + return; + } + GPIO_WriteBit(index->gpio, index->pin, (BitAction)value); +} + +int ch32_pin_read(rt_device_t dev, rt_base_t pin) +{ + int value; + const struct pin_index *index; + value = PIN_LOW; + index = get_pin(pin); + if (index == RT_NULL) + { + return value; + } + value = GPIO_ReadInputDataBit(index->gpio, index->pin); + return value; +} + +void ch32_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) +{ + const struct pin_index *index; + GPIO_InitTypeDef GPIO_InitStruct; + index = get_pin(pin); + if (index == RT_NULL) + { + return; + } + rt_kprintf("get pin index\r\n"); + /* GPIO Periph clock enable */ + index->rcc(); + /* Configure GPIO_InitStructure */ + GPIO_InitStruct.GPIO_Pin = index->pin; + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; + if (mode == PIN_MODE_OUTPUT) + { + /* output setting */ + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; + } + else if (mode == PIN_MODE_INPUT_AIN) + { + /* input setting: not pull. */ + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; + } + else if (mode == PIN_MODE_INPUT) + { + /* input setting: pull up. */ + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; + } + else if (mode == PIN_MODE_INPUT_PULLDOWN) + { + /* input setting: pull down. */ + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD; + } + else if (mode == PIN_MODE_INPUT_PULLUP) + { + /* output setting: od. */ + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; + } + else if (mode == PIN_MODE_OUTPUT_OD) + { + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; + } + else if (mode == PIN_MODE_OUTPUT_AF_OD) + { + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; + } + else if (mode == PIN_MODE_OUTPUT_AF_PP) + { + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; + } + + GPIO_Init(index->gpio, &GPIO_InitStruct); +} + + +rt_inline rt_int32_t bit2bitno(rt_uint32_t bit) +{ + int i; + for (i = 0; i < 32; i++) + { + if ((0x01 << i) == bit) + { + return i; + } + } + return -1; +} + +rt_inline const struct pin_irq_map *get_pin_irq_map(uint32_t pinbit) +{ + rt_int32_t mapindex = bit2bitno(pinbit); + if (mapindex < 0 || mapindex >= ITEM_NUM(pin_irq_map)) + { + return RT_NULL; + } + return &pin_irq_map[mapindex]; +}; +rt_err_t ch32_pin_attach_irq(struct rt_device *device, rt_int32_t pin, + rt_uint32_t mode, void (*hdr)(void *args), void *args) +{ + const struct pin_index *index; + rt_base_t level; + rt_int32_t irqindex = -1; + index = get_pin(pin); + if (index == RT_NULL) + { + return RT_ENOSYS; + } + irqindex = bit2bitno(index->pin); + if (irqindex < 0 || irqindex >= ITEM_NUM(pin_irq_map)) + { + return RT_ENOSYS; + } + level = rt_hw_interrupt_disable(); + if (pin_irq_hdr_tab[irqindex].pin == pin && + pin_irq_hdr_tab[irqindex].hdr == hdr && + pin_irq_hdr_tab[irqindex].mode == mode && + pin_irq_hdr_tab[irqindex].args == args) + { + rt_hw_interrupt_enable(level); + return RT_EOK; + } + if (pin_irq_hdr_tab[irqindex].pin != -1) + { + rt_hw_interrupt_enable(level); + return RT_EBUSY; + } + pin_irq_hdr_tab[irqindex].pin = pin; + pin_irq_hdr_tab[irqindex].hdr = hdr; + pin_irq_hdr_tab[irqindex].mode = mode; + pin_irq_hdr_tab[irqindex].args = args; + rt_hw_interrupt_enable(level); + return RT_EOK; +} + +rt_err_t ch32_pin_dettach_irq(struct rt_device *device, rt_int32_t pin) +{ + const struct pin_index *index; + rt_base_t level; + rt_int32_t irqindex = -1; + index = get_pin(pin); + if (index == RT_NULL) + { + return RT_ENOSYS; + } + irqindex = bit2bitno(index->pin); + if (irqindex < 0 || irqindex >= ITEM_NUM(pin_irq_map)) + { + return RT_ENOSYS; + } + level = rt_hw_interrupt_disable(); + if (pin_irq_hdr_tab[irqindex].pin == -1) + { + rt_hw_interrupt_enable(level); + return RT_EOK; + } + pin_irq_hdr_tab[irqindex].pin = -1; + pin_irq_hdr_tab[irqindex].hdr = RT_NULL; + pin_irq_hdr_tab[irqindex].mode = 0; + pin_irq_hdr_tab[irqindex].args = RT_NULL; + rt_hw_interrupt_enable(level); + return RT_EOK; +} + +rt_err_t ch32_pin_irq_enable(struct rt_device *device, rt_base_t pin, + rt_uint32_t enabled) +{ + const struct pin_index *index; + const struct pin_irq_map *irqmap; + rt_base_t level; + rt_int32_t irqindex = -1; + GPIO_InitTypeDef GPIO_InitStruct; + EXTI_InitTypeDef EXTI_InitStructure; + + index = get_pin(pin); + if (index == RT_NULL) + { + return RT_ENOSYS; + } + if (enabled == PIN_IRQ_ENABLE) + { + irqindex = bit2bitno(index->pin); + if (irqindex < 0 || irqindex >= ITEM_NUM(pin_irq_map)) + { + return RT_ENOSYS; + } + level = rt_hw_interrupt_disable(); + if (pin_irq_hdr_tab[irqindex].pin == -1) + { + rt_hw_interrupt_enable(level); + return RT_ENOSYS; + } + irqmap = &pin_irq_map[irqindex]; + /* GPIO Periph clock enable */ + index->rcc(); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); + + /* Configure GPIO_InitStructure */ + GPIO_InitStruct.GPIO_Pin = index->pin; + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; + + EXTI_InitStructure.EXTI_Line=index->pin;/* ⲿжߺźŶӦ */ + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + switch (pin_irq_hdr_tab[irqindex].mode) + { + case PIN_IRQ_MODE_RISING: + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + break; + case PIN_IRQ_MODE_FALLING: + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; + break; + case PIN_IRQ_MODE_RISING_FALLING: + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; + break; + } + + GPIO_Init(index->gpio, &GPIO_InitStruct); + EXTI_Init(&EXTI_InitStructure); + NVIC_SetPriority(irqmap->irqno,5<<4); + NVIC_EnableIRQ( irqmap->irqno ); + + rt_hw_interrupt_enable(level); + } + else if (enabled == PIN_IRQ_DISABLE) + { + irqmap = get_pin_irq_map(index->pin); + if (irqmap == RT_NULL) + { + return RT_ENOSYS; + } + NVIC_DisableIRQ(irqmap->irqno); + } + else + { + return RT_ENOSYS; + } + return RT_EOK; +} + +const static struct rt_pin_ops _ch32_pin_ops = +{ + ch32_pin_mode, + ch32_pin_write, + ch32_pin_read, + ch32_pin_attach_irq, + ch32_pin_dettach_irq, + ch32_pin_irq_enable, +}; + +int rt_hw_pin_init(void) +{ + int result; + result = rt_device_pin_register("pin", &_ch32_pin_ops, RT_NULL); + return result; +} +INIT_BOARD_EXPORT(rt_hw_pin_init); + +rt_inline void pin_irq_hdr(int irqno) +{ + if (pin_irq_hdr_tab[irqno].hdr) + { + pin_irq_hdr_tab[irqno].hdr(pin_irq_hdr_tab[irqno].args); + } +} + +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) +{ + pin_irq_hdr(bit2bitno(GPIO_Pin)); +} + + +void EXTI0_IRQHandler(void) __attribute__((interrupt())); +void EXTI1_IRQHandler(void) __attribute__((interrupt())); +void EXTI3_IRQHandler(void) __attribute__((interrupt())); +void EXTI4_IRQHandler(void) __attribute__((interrupt())); +void EXTI9_5_IRQHandler(void) __attribute__((interrupt())); + +void EXTI0_IRQHandler(void) +{ + GET_INT_SP(); + rt_interrupt_enter(); + + if(EXTI_GetITStatus(EXTI_Line0)!=RESET) + { + HAL_GPIO_EXTI_Callback(GPIO_Pin_0); + EXTI_ClearITPendingBit(EXTI_Line0); + } + + rt_interrupt_leave(); + FREE_INT_SP(); +} + +void EXTI1_IRQHandler(void) +{ + GET_INT_SP(); + rt_interrupt_enter(); + if(EXTI_GetITStatus(EXTI_Line1)!=RESET) + { + HAL_GPIO_EXTI_Callback(GPIO_Pin_1); + EXTI_ClearITPendingBit(EXTI_Line1); + } + rt_interrupt_leave(); + FREE_INT_SP(); +} + +void EXTI2_IRQHandler(void) +{ + GET_INT_SP(); + rt_interrupt_enter(); + if(EXTI_GetITStatus(EXTI_Line2)!=RESET) + { + HAL_GPIO_EXTI_Callback(GPIO_Pin_2); + EXTI_ClearITPendingBit(EXTI_Line2); + } + rt_interrupt_leave(); + FREE_INT_SP(); +} + +void EXTI3_IRQHandler(void) +{ + GET_INT_SP(); + rt_interrupt_enter(); + if(EXTI_GetITStatus(EXTI_Line3)!=RESET) + { + HAL_GPIO_EXTI_Callback(GPIO_Pin_3); + EXTI_ClearITPendingBit(EXTI_Line3); + } + rt_interrupt_leave(); + FREE_INT_SP(); +} + +void EXTI4_IRQHandler(void) +{ + GET_INT_SP(); + rt_interrupt_enter(); + if(EXTI_GetITStatus(EXTI_Line4)!=RESET) + { + HAL_GPIO_EXTI_Callback(GPIO_Pin_4); + EXTI_ClearITPendingBit(EXTI_Line4); + } + rt_interrupt_leave(); + FREE_INT_SP(); +} + +void EXTI9_5_IRQHandler(void) +{ + GET_INT_SP(); + rt_interrupt_enter(); + if( (EXTI_GetITStatus(EXTI_Line5)!=RESET)|| \ + (EXTI_GetITStatus(EXTI_Line6)!=RESET)|| \ + (EXTI_GetITStatus(EXTI_Line7)!=RESET)|| \ + (EXTI_GetITStatus(EXTI_Line8)!=RESET)|| \ + (EXTI_GetITStatus(EXTI_Line9)!=RESET) ) + { + HAL_GPIO_EXTI_Callback(GPIO_Pin_5); + HAL_GPIO_EXTI_Callback(GPIO_Pin_6); + HAL_GPIO_EXTI_Callback(GPIO_Pin_7); + HAL_GPIO_EXTI_Callback(GPIO_Pin_8); + HAL_GPIO_EXTI_Callback(GPIO_Pin_9); + EXTI_ClearITPendingBit(EXTI_Line5|EXTI_Line6|EXTI_Line7|EXTI_Line8|EXTI_Line9); + } + rt_interrupt_leave(); + FREE_INT_SP(); +} + +#endif diff --git a/bsp/ch32v103/drivers/drv_gpio.h b/bsp/ch32v103/drivers/drv_gpio.h new file mode 100644 index 0000000000..40b3aa4513 --- /dev/null +++ b/bsp/ch32v103/drivers/drv_gpio.h @@ -0,0 +1,29 @@ +/* + * File : drv_gpio.h + * + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2015-01-05 Bernard the first version + * 2017-11-35 ZYH update to 3.0.0 + * 2021-10-01 Walter modify License declare. + */ +#ifndef GPIO_H__ +#define GPIO_H__ +struct stm32_hw_pin_userdata +{ + int pin; + uint32_t mode; +}; +#define PIN_USERDATA_END {-1,0} + +#define PIN_MODE_INPUT_AIN 0x05 +#define PIN_MODE_OUTPUT_AF_OD 0x06 +#define PIN_MODE_OUTPUT_AF_PP 0x07 + +extern struct stm32_hw_pin_userdata stm32_pins[]; +int rt_hw_pin_init(void); +#endif diff --git a/bsp/ch32v103/drivers/drv_usart.c b/bsp/ch32v103/drivers/drv_usart.c new file mode 100644 index 0000000000..191b59e341 --- /dev/null +++ b/bsp/ch32v103/drivers/drv_usart.c @@ -0,0 +1,259 @@ +/* + * File : drv_usart.c + * + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2009-01-05 Bernard the first version + * 2010-03-29 Bernard remove interrupt Tx and DMA Rx mode + * 2013-05-13 aozima update for kehong-lingtai. + * 2015-01-31 armink make sure the serial transmit complete in putc() + * 2016-05-13 armink add DMA Rx mode + * 2017-01-19 aubr.cool add interrupt Tx mode + * 2017-04-13 aubr.cool correct Rx parity err + * 2017-10-20 ZYH porting to HAL Libraries(with out DMA) + * 2017-11-15 ZYH update to 3.0.0 + * 2021-10-01 Walter modify modify License declare. + */ + +#include "board.h" +#include +#include + +/* uart driver */ +struct ch32_uart +{ + USART_InitTypeDef huart; + USART_TypeDef *USARTx; + IRQn_Type irq; +}; + +static rt_err_t ch32_configure(struct rt_serial_device *serial, struct serial_configure *cfg) +{ + struct ch32_uart *uart; + RT_ASSERT(serial != RT_NULL); + RT_ASSERT(cfg != RT_NULL); + uart = (struct ch32_uart *)serial->parent.user_data; + uart->huart.USART_BaudRate = cfg->baud_rate; + uart->huart.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + uart->huart.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; + + switch (cfg->data_bits) + { + case DATA_BITS_8: + uart->huart.USART_WordLength = USART_WordLength_8b; + break; + case DATA_BITS_9: + uart->huart.USART_WordLength = USART_WordLength_9b; + break; + default: + uart->huart.USART_WordLength = USART_WordLength_8b; + break; + } + switch (cfg->stop_bits) + { + case STOP_BITS_1: + uart->huart.USART_StopBits = USART_StopBits_1; + break; + case STOP_BITS_2: + uart->huart.USART_StopBits = USART_StopBits_2; + break; + default: + uart->huart.USART_StopBits = USART_StopBits_1; + break; + } + switch (cfg->parity) + { + case PARITY_NONE: + uart->huart.USART_Parity = USART_Parity_No; + break; + case PARITY_ODD: + uart->huart.USART_Parity = USART_Parity_Odd; + break; + case PARITY_EVEN: + uart->huart.USART_Parity = USART_Parity_Even; + break; + default: + uart->huart.USART_Parity = USART_Parity_No; + break; + } + + if(uart->USARTx == USART1) + { + GPIO_InitTypeDef GPIO_InitStructure; + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOA, &GPIO_InitStructure); + USART_Init(uart->USARTx,&uart->huart); + USART_Cmd(uart->USARTx, ENABLE); + } + + return RT_EOK; +} + +static rt_err_t ch32_control(struct rt_serial_device *serial, int cmd, void *arg) +{ + struct ch32_uart *uart; + RT_ASSERT(serial != RT_NULL); + uart = (struct ch32_uart *)serial->parent.user_data; + switch (cmd) + { + /* disable interrupt */ + case RT_DEVICE_CTRL_CLR_INT: + /* disable rx irq */ + NVIC_DisableIRQ(uart->irq); + /* disable interrupt */ + USART_ITConfig(uart->USARTx,USART_IT_RXNE,DISABLE); + break; + /* enable interrupt */ + case RT_DEVICE_CTRL_SET_INT: + /* enable rx irq */ + NVIC_EnableIRQ(uart->irq); + /* enable interrupt */ + USART_ITConfig(uart->USARTx, USART_IT_RXNE,ENABLE); + break; + } + return RT_EOK; +} + +static int ch32_putc(struct rt_serial_device *serial, char c) +{ + struct ch32_uart *uart; + RT_ASSERT(serial != RT_NULL); + uart = (struct ch32_uart *)serial->parent.user_data; + while (USART_GetFlagStatus(uart->USARTx, USART_FLAG_TC) == RESET); + uart->USARTx->DATAR = c; + return 1; +} + +static int ch32_getc(struct rt_serial_device *serial) +{ + int ch; + struct ch32_uart *uart; + RT_ASSERT(serial != RT_NULL); + uart = (struct ch32_uart *)serial->parent.user_data; + ch = -1; + if (USART_GetFlagStatus(uart->USARTx, USART_FLAG_RXNE) != RESET) + { + ch = uart->USARTx->DATAR & 0xff; + } + return ch; +} + + +rt_size_t ch32dma_transmit(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction) +{ + return RT_EOK; +} + + +/** + * Uart common interrupt process. This need add to uart ISR. + * + * @param serial serial device + */ +static void uart_isr(struct rt_serial_device *serial) +{ + struct ch32_uart *uart = (struct ch32_uart *) serial->parent.user_data; + RT_ASSERT(uart != RT_NULL); + if (USART_GetITStatus(uart->USARTx, USART_IT_RXNE) != RESET) + { + rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); + USART_ClearITPendingBit(uart->USARTx, USART_IT_RXNE); + } +} + +static const struct rt_uart_ops ch32_uart_ops = +{ + ch32_configure, + ch32_control, + ch32_putc, + ch32_getc, + ch32dma_transmit +}; + +#if defined(RT_USING_UART1) +/* UART1 device driver structure */ +struct ch32_uart uart1; +struct rt_serial_device serial1; + + + +void USART1_IRQHandler(void) __attribute__((interrupt())); +void USART1_IRQHandler(void) +{ + GET_INT_SP(); + /* enter interrupt */ + rt_interrupt_enter(); + + uart_isr(&serial1); + + /* leave interrupt */ + rt_interrupt_leave(); + + FREE_INT_SP(); +} +#endif /* RT_USING_UART1 */ + + + + +int rt_hw_usart_init(void) +{ + struct ch32_uart *uart; + struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; + +#if defined(RT_USING_UART1) + uart=&uart1; + uart->irq=USART1_IRQn; + uart->USARTx=USART1; + + config.baud_rate = BAUD_RATE_115200; + serial1.ops = &ch32_uart_ops; + serial1.config = config; + + + uart->huart.USART_BaudRate = 115200; + uart->huart.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + uart->huart.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; + uart->huart.USART_WordLength = USART_WordLength_8b; + uart->huart.USART_StopBits = USART_StopBits_1; + uart->huart.USART_Parity = USART_Parity_No; + + if(uart->USARTx == USART1) + { + GPIO_InitTypeDef GPIO_InitStructure; + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_Init(GPIOA, &GPIO_InitStructure); + USART_Init(uart->USARTx,&uart->huart); + USART_Cmd(uart->USARTx, ENABLE); + } + + /* register UART1 device */ + rt_hw_serial_register(&serial1, "uart1", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + uart); +#endif /* RT_USING_UART1 */ + + return 0; +} +INIT_BOARD_EXPORT(rt_hw_usart_init); + diff --git a/bsp/ch32v103/drivers/drv_usart.h b/bsp/ch32v103/drivers/drv_usart.h new file mode 100644 index 0000000000..eb92cefe96 --- /dev/null +++ b/bsp/ch32v103/drivers/drv_usart.h @@ -0,0 +1,18 @@ +/* + * File : usart.h + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache- + * + * Change Logs: + * Date Author Notes + * 2009-01-05 Bernard the first version + * 2021-10-01 Walter modify modify License declare. + */ +#ifndef __USART_H__ +#define __USART_H__ +#include "rthw.h" +#include "rtthread.h" + +int rt_hw_usart_init(void); +#endif diff --git a/bsp/ch32v103/figures/compile.jpg b/bsp/ch32v103/figures/compile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..257ca6a405f3a47cb0693dae72420cb89bc50355 GIT binary patch literal 54818 zcmbTdbyOVD*Dct%1`F=)65Jt#U?I@By9AoXU4w;&;1ZhP5Zr^iy9bBH8+X?b7=GV- z^JcA?wcdO)x9k2@)wS+ERp;D&_Br*k__6`O`y{U<4?sXb0GPf0058h`SpX6u;(w0U zf&6-)prfE5BcouVp`oHRqmxPpAe{3JM0{8>}~k|DVT87XTj}FpHRsgg_5K#798FM|kN2&;S4kD6gyi z&w~HwKtOz5BPtp?1}4_)1@(9UL!#biIq$tx%-ebUs@*3s3| zH?Xv_{$gVbvU79y@bvQb@eTbJ1__V&9+{Z*BN>|VGd1m3UVcGgQE^FWO>JF$Lt|5O zOHXfK|G?nT@W}Mc?A-jq;u35VzO}uxySIOEcyW1keRF$v|M2)9TnGT9{{icNA^X4K z!hgkuh>VPcjP@T~2#8*<6A2#~g^m}MKt>(S+~qAjUobl1hlJefZVU!~jdLOk*C|Y5 zMuAPHi~m6TFJ%8cU?Km%ko_-U{}(P802>M6_2D7m1Ec|0ardmJ?Irh4w=Hv(*O~HX z%B{~MH9)BmPl!q(T|%>>$ZZwWLBg;S^f(4{KR2)`@HKKA#;id8PE!+wk}l_edYSKD2z7 zpn{u{1zH`{9!{+pEcR0@F)SNm5Xdt2AY%Jik^+ce1+jlb2C3e#DGc)r%s>5Et6I2z z0YGfB)=gIqQ<99=jFi1R_(`BXE3HF=C0`_xPVH_(;p1*SRa;a*f zo&K~*Gyill0yakb@!>{&O=q;fqSSXA>GW|KdC_?3#+{Nw~~A)IfQ(Ok8xMHg=-NJw%D=hd3&T zijqC-`y(4;!c3A}U6Y4sdh2r3Ur5%WkE4yfBh-d-5DAI#stfRysFkMAiO}%S%QvR7 zvslk$wUn!Gp1;0UrP{gRsirknJWGi&OG$A5nKo>9a@V z8(qCA6$#(QwTur6jz8gb&R+9G`Z`4G3hPk2k30D|QO1zQquA$1;?m;(nOc5)?%W8! z`4?!6V=)6qi{uoMr~-1>AV2& zujdF%mQ9sAIKZuJzci8f-dT(?YM`Mgk#1GGX?mloaDAn`pI5Qq7>$x~G5ajU$EcyW zl#b-bflM_FTjh;)rG~u#41>Fc%6x}CA(tBkTWHOi92TBvw4Ktt$Vo{nbD3EE62r}UPUhF8wmY9b0?YbcU#FdG3VGc(%ME}1^ zq=<>e2uCG-D@QHKd$5kF;?>F9ijb|b%=C$+JK^o8WoO>3%+dg~{#fTcW_2;Bh()btH0;1dx-^9&*7i6CxHx$nHfp?xAiIj@)0` znxJqW6Q3P7#>Aoi)Wr-aqOLYI8C&@U5nESY`eMgOt`EH7+~rk*4>Pq?t}&8X`|Qls`YDPo{PVsD$Zf zBL}@h-xEmQPQGjE82=|t=q!B>J<48oD1QOiAJQyizk`Lt^8dejH8moW7_Fg3fuXTOS$gc))zhYn=on2leP5Sw;;W9zMjd5fz-|QNUw_nF9YWA{I%s}lNUhWnSx;x z{E9wSmb`yQ)l$^0=Nyfqi3sF3B0XQaaT_>4F^H0HM@^0Y8Md2RW~W<47brEO9lNS1 z^0)hBo2fP_bM?`SzbLv=LOg&o3#WblNzj3heI%+Bn)m@@yG;p?Aq&AobT7^HyRW?% zFwSEX48|{nag9p0|90M_cS@7MQ|#6#Dml`TqW1QayFh+SJX{cgq9ehUsN|`nPgIR% zaqB);ke_H6BKt3P3F5USHiSZB2cAgN`-<60;CQ-_Vy;o;#) zQ9(~!iu>4Q&DPo6g&W0siuxrt&y*U@S{_Pq$S4jP@-5MdH^;|6*W;E0x8$$!?}nyM z?_hyX!9no&gR+N4n^l)gQo{H5NKKk)-P3iZI4dBr^@z#}LEy2Uas(Gw-M&*E$s5Mf zla!3!Mq7Mo#Y-jiLFO2N6Y#&&?$w9o)7i0^`WT!|>y$nn@`u^W$=MJ(aHe#e?GHQU!*&62-w78VtNCW2D^s%Pw`4 zCyw7NGs6AKBD$xafaUvXKU!il%S`p`2p|N;u$4B~jxFeD3G()(&u*#@oJvzY@m9Iw z)8(%6bcOqj>Zv273;W#>tCwi_#T)puhBKaTxY4Z$ zGiQtTy3(?T9QC{3W)&VdZE==aMM&8y7S^K&=O^>;lJS&Z4$0Z(aA%<0mXZBY`M3~oJe0%- z0BCG%N3%!U{JyTzkfQq2Mwjb-J8|{*!<_k5`3SyRh}(!1?VGU9`}1(t?8EABlQ_$26snuO^%p8J zH265$rE#A)ihx_ppHriLK|70)#(A6VpfWnAMoxL_no;lduYK zOB>8c_pveD!5ku&Xe__1a%u2hO3BeiB|W*36+tQ>KN{ha*fH+duD}a`>OMuOt+}=O z0;kNz!61 zH{I^m4f7c6t%|$YCpRhbgyQn$eaoiy=OOu7LMPks*^x5tM?!*;X)oKa_BqEkQ7_uq zNt16&j-EY(E}8SEUlUP~UjQCyVU=Z%m#8P5H@j+aaN$U<8}WAe1=Cqh9>+OiIG7B! zRJhor@vLt=NHxir2xLqf3@~|A_olwx>_7U>9r|f-(o7lk>sQM}RaGCsnftdrFrBi% zvSn~$9SJny>lQHJ1C?me4@IKcNxm97^`;Z^q-Z1q1JmGZKieme8=S+z^z(C%_eTSJ z*8v-gOCtO>h=lv#8RAw6rYj0nC^$nkuJX`?s+}ZFC)cCU1cjZObJsQ>a6|DUG*sPA zEOWOyfa~Pn%3Wg;)wGe(kX6EDiG>o&k@1)m;dy@cc>>tQ_>kn8e1>3F)`2jJXtriT zBqrZ>Bq+=ZrO%2g4{3L(YD2t2T;qZ|ck_PQkc-AN>ez*8wJSL{8`9|MT#Unni2;++ zb!44?4xG<^w`_W}ux&;|0q!*kaO5&LoYD0_UubY8Wilh=;rzKB#OIq;#5kwCj(3=r zv?jS$;NyN*Sz|0P)0(>U^+*ahCa;Py!EcNf_QYlevx)FoVllbGUPoe zvRm4xQ>j46`oa+KXiDd&Nf)I&xZJ7KjcBmMvGEe3RH9_`jB+y+`zAVN8@pRBh+fo` zd*{t#tbyt1;|n0fXI4t+f~cWhsG7L5RIY5Sm8nyC82PjfTOha*ziT6_ce+HVvADfr zuGVx_uzls1U&QAz4G^mHDL=$KX?QQmB-<-V*a?HgS{weYejbvg-i7O`wHI&xbtI-F zEXuG&N}nJ~Ts4M_Ay!T+vN-ZJce9WQyT{=yo8EKuiS@;?HqY$V$1-XNz56jl;XDu+ zWQpu`r1{l)Ox*ATmGt0OrfJ7h?s9+G(j{Y~F#V#&cBt?V)*gu2k{KG3BwLGajD&2i zvGFRX<+iA3WwqgNYK0Ty_gzsIZmp0(#;gDp&*Af{-i9o`1%a~GVPpH_lfBxyY>kla z%KQX+8yeeWY;c`89{MN%AbMmeJ7X_^i{&p{yHK~PF~0`89ahaq`n3|;;!r$8dK;UQ zf*iQ zT}ZCsfOr6-4N`%7Anv+y+~!~mjb7xXpI}zk!~Zh}CYbX4y}s*nGCtOrLa<`=>1vWA zB~hQWR{U+El0+iVH@02Y;NC08TjModC)v}O6^NoJGc*)81WjYCOyZ}0PW-w0UP}Y# z?XCrHokme_Hm?4Cr~b@oRY4;9amAVYvU2*pz=0$3C}l9UkM=K}kMY}PjvNDGYAL`Y z@Ux8H(LX1rvCBh_*(ai3w!UAgxBT7&_WH)bINgs@85+`V>6ltdO!&-bhll!d5LVd6 zeHx0Gel$*ZWIIV#q%w>`c0JPMNcXslgRZh7*-W)}s~%ne@sHAmUrl$lf3>^-u)Y11 zq=@Du6eNcgn0E2uF44{YS04485C$SiG{X6j0r>CrGa=7f=-*#gg{FW=k!wD zyH&&VFhup&e7LkKRv55BAi`)9`(rJ3eIam2+4N}VA!CP7{XNS6X3|&&cFXx2mU`>n z{=UGyb-yUr^;P+%OMFLsu_D74(F?dxERP96K#s-z^x!%QCvGh|6uygJ{b2Bqm?PcC zelroKWn{03L>Gls=Ro1yv_*7__C&~|G=2Omb>G`hUYOO=UEeTW&SlS(ycL!YMYFgh zT`~&On?U?M%)o+#wlhvW`az0vq0Q7Sw_oC&vEd@j_QXwiXGDBbSp{~y?T{SdWAC)XfJoqDp z-ViJA9=&13W?|^)7StF24nqz(Q6>Y}CjyHAE?`dNm~_fUR5 zGuE%@TqB{8B-^-GBL8UM%=I~7x5IfPmB!AWC0D3PwmN*M2r<}lmRprw&1Y#U;&A5X z{58`R17#b84%V5j7LUfIQI-|!Z-YB|JR;U=@<55Sg?k=8a2-@%ZZ0E&0ZgC zqArg5xY1n>d(qP-shfn&Y%KjlU-^P^J6JT#G0B=yjikPwgkM=8J@QwsJ1H!-KMLES zYgiS#IR;Z%bxP794pJUk7nd&D1VTYb2((97JTf3o_PNmQdnRhEZG=e56Go|cG%Ah>bC4_H83nAr z3;Bi=w`R3RH2y@KU z_FsiN!3re9Y@Ofa4((6?C1X-VL%@ho!ydGQehf$>q)XEQ4Klnx>9QA+GwBAd7Rf}?Ip;CN&rNW9k+4V zO_4z4LIoQ@l9i*kScHvfLj@~B7I60!>yeKIDQ9Lj+<8bPw1~IMkFz)yX9MK@kB9Kx zhrQ={cfT3>GO|yUMIs{`*GNc|?nU=*18I$6^sP}q==xCW;+K%q35w#CTqX*u;t^7- zjo^eNV@rRg+M4DI4m)akLkD4b$ov7fWgVa7iZDRH@2z)lvh{a3&3XC+iS=sUY~!|IWaq)(>lfeC&y(qfI!9!)ow7zUpPR~5?Ynq5`d#e!{tNrj$p_dzjbTPuTwHyo&|kIY20xMh$I=y8 zpp9XDe!3z@x*JV$yu1unyb?o6@o^itSkI2ctJ?5@OK=KRE?vGBDmbW;P$$Rm0tiCL zx~V#U0c^HU##YoDZlopYFOtq}O<2ei#HtM@C0wV;( z)61Hfrp=YZLREeXlQgpK2pu=r$i`Qa4IEeEqGqOn(A+}i1Y1wQy4hOoEr|giKoScX z8N5#Fu|Kx}&hG#RhAnY@tG-WQ+oVBjoO(|F^`(CI( z6c@0Md@wAH*+&q4yYY9{<&s5H>@I%`t-RqVx7NT2Xuq0!sHO5*ZIR!L79F94RicSkmzPgpO2)WjD6kp%FSwH?mb z;jgS7^5*M)cL5>)RxN2X^VY|khKam|U=qR!Dv2k%PoIZt%r<%v2Z>e15 zG5UQdUMwwtuiX~xPNl#O?jTRa-TJ9Flk4Gy`l#G`pIM~nrccdgJU$c%!}NOz z&4^&{zpKfMT${Ar?B<aUD8cZGbWy#o`bjM4JXr}7X!oR!d|m08a<@wtsTo_aRwiRas!&~c%HBEvNT z1(jd6i#$c6u>dMSWzptjNY0#ucqJHEU~q&B@<7ROKGbypTRYPD3Cw(Aj1EFXQE#)( z@DM@Wt=e>8k-1L|EI3GW{9X>y#q0L5_ZU}IR?Ll5oc_!SvBhBc3h=K6P&JPm08^P> z0B;svGm#)%n|~hFLxwB1YxHSnY8O)N4**Y(5j7<$$5%o#6uB@$Kwfnz{^?&?96`)&QBUx)F5Bm2h zb~->FX*Sv*A5sQ}T%y3uv!K`bAeyaVDs@c3;Uc}{KFaIkBW0|M|G`)op_NnC8BJCl zZ7eA^6dF@#vwXj2)NsKx(AGGhqOs?lr4Luq(00~N$TL&_5gL_e z44*a>d2=D3g)&poF`+ND#mOwqMds7X9>V9dJ^zaIiET6B(^-E!m_+OsmDB*-(B)s& zuaD^Ouc*HMX^OY`r_bag>d3+I`5YSK=TLSy114#Brm9Y)aBn7em7KjCA}x*ZKPl@` zRN}M56ibTqGg$3>_517_7q6Qq#fiKE?}pPe?F*Ckvcf8fpjH^j#ppXg4T+y3qQg9>u-=bneAm{!uD;i23R@^)S*aH^ z`t`pd;(j79UP_lf1~qKOulpM|qFc?S&u`CTAdR_4VjV?g!v#yAIK-xqnG=H1-7^6F znM}M|z%CMU#x_8%Ar0w@uKxZz9LpG}*(nS^4fq`D+jx6nEaxmU0*%$SVgjy;Jos6Z z0O1w#-X4nnLv*2#83via6&gK3Vu5ay=pke&GGONf?3c+$w08Fr|Gf>)XfjNK$-L4wZN9qXaI!%E z)n+Z-pxf_ES6)H*UO7XoQdbBeK0|=&r;ssiag{fQ?v=Oj%JN>=Z5fUv34&fOiHAkn4hD@ z<=CzX*UmfjEW?zFR2)j>%y(A=G|F0hT%g9~Bg0K30JBSHe$~;9u`cBzd%Ez(+TQ8B0K)xQrTS@Z1QyZ1+`^^ zer!jz9idWIjL@a`cP0L!TPlV<3C8_JqfXn#$NVy0Hg9Gf)e>WBw5+lDoZk-(S2j3> zUVy~Hqv+=ACy$o{aie_5`qL#EF@#x(`9^d;6FrayVbJ~_u!Clwugz#)Xy2xq7u$)Q zWZ)^d5I&;*a4JeL){2?p4Ayi!sYuyu+N-AeiuctT3mBQjRCmEN8G*7|_c%V#bJu7P z&~}MfR!4Nj;1Etp(8SUK&gz_V6r@r*%g5_=KBo9bfPONiI3Sd7SK2O)aAcCYafaO) z@+`y?#*}?AA&p7417vZ@HMKr-mx3u|_C` zCDHm9RA;=h#b3*`r)Kwl{RY`#+f5EqwsYK;mqj6P^i#T28Dz9bIV*cS^dS)j`jT}! zxAj9lQ;|rDaI+V{{%@uhHY%Zfb8TNw#8#AhkHU(zX7^`$eSg7%K_><~PiPOw8Z=A# z%J;gE{%v#(As#y_0Z5;Sia-Wy&86P1EA=bB`EQ8ReZ1@wR2w<2`reVq+UTb?W_CTZARVs2=XAeh9?o%(Lxnb1oh&mpwc zZxA!yQG}3)?r_7#0Nusu#=7;@3BiUh%N%Qw>9fcEAd>n8fM{tsGMT7CkaB;!rsc5 zeKhSm!#^Mq8@n*+cj2y%YfS$u!u>oI+Js7whi#LABSIZYLEJ$Y*J~m<>yE)$CymGG zM=qY}cyoQ?B;~w`tts~TOQ%U0Ev}r&Juy)oui~g-o zHwRhFcaBDEJpiAg=um#Ti}Beb#(w&-n-I0gyg)X7rsn|IkLqKI5p1cKP>-XLS|cag z_upEcq)+~NQB1uPifR365>vVEH^|$SSC+s3AC}K6`(G@-6aJd(0R6T^pTvvPTUCf} zh$#X(Y|`ydHOKT3_P{?Eis-t>?eAH-sVN)ot7*b+5~NxNyiY#m3Z0ij_`a-ZM^VKj ztK~Z~xQI{~(4QumF5I|`Di^xUOXJ-=MR3SF0lMOK}K5t4%SWKd2exc(jgDx2iBG))BM0szU4;viA2= z%@2YUUS;y3Ats0N0-{T#N`0+8vu{qCMDkMxvg`9vaY2vd5fYoQ?uW9tpK%x z|7j37m6L1*KxmK4CYexmyG-;=R1z3;iI{ybl`eP+x$Q~#fgj_nKB zn2)2tB{)RClA-%hD69)$c1z?zrSXOjcBTC1hNHEe{%$03>!d+_xwVCOxo4Oeu;PQw zpQV7<`T`*Fmz=Khx7nf?Xiif2BLJ!U40`k(r2{2v1HLIn=0O-wH#V@7jD-87F_-UI z2E?G@PG27r^_6x6N4w}a7m=TGmq}SDGaiGd3-%MAJ1fFh64&9t2#2$?%JFSsT>k_G zH=@;yx81DK2xPXIm;|}<6pjiKmu}cnlJoR)RX3srBhQZycaz+&6xqb;1yI8j6XG#I zi1W&kOWFiC#kmwd&U&<4YNUUjc3_HJ6s#z2&eG4v*4E)?v_w!Jw&*2&<*#h_qrEIW zQgqp>Buakhin}2@csWoue5;s-EUjegk*sirta{ahL#EO{0iCfPqfP`y;8B08Ic~4- zJ6Vj$Ou8ug|ZxDF#>hW~?A~Iyye`<$#PN zNr&%(v>dHaoAlNj-Co2K`!C;mJqe8rjbZ(6$gQecbsA-Kw0m!&qcf;g)aP#e#sf8* zXFagOTiTo57;8FpSPr_Vf+!J!L`vP&5abB|w-asY1#qrTLvC~rzWsF}7pkv+2-C?e zI9LbGob^7a4pXal$4t$ouq2yz({7VLxT)NSOQpf;kQAr)rf%p+(-jg$<$m+N0LrX6 zXyf^=uAEl9sQPQbN4WQ_P7wFuK-)>;`zRw}S5SkHfpxwol#kPO1;~i~{))_qzI323 zGbRf_x$WPafA7@WNN&;yH_R=00hsBlpwzd2bCYl6n`Ey==C@}jLKNlMd0M1l--~_~ zCxwqYH@-q2-kcQ$9zEk0B@7)l9+j+*IzyqitczF4hF zkig2b^y9{rwjvP|A}+sE7K^I!;V9$~WmY_i%n2YbQ12S*s4y#gB;{4<}}==Qir_~XFFUV?%vh;EYk%YXv>xN~jt4xoO-;G-*+l=k5z@`$O`pPR9W87Pb!m_*&t3s0uS z-r@ax_Yg~>j$fCI%N3dyWjSh?vFq-X?iEKg->VO#MA|MSi^2sCxc7b-F?!Xg4m+`- zjalIjllJmj)`yyz;iQTiOoj+pUZC}x5LY*7Wf-DOTj?`8tuul-XjfeQ`w0-5-ZoY8 z>d~N=*Zo&ph)!Al@*%Ww%tFdNi9zl%sTtdqMU>$N7KZ+PN`vF+gWvVb&Xbh;sw_! zf|Fbz85u5p^r))E3PzSAk_bZdvGgPn*>;uW)o#Px;@@yE_7HK8k=AUBfCQh7-GAE% z(NbVXiVuvE6zK=cp2ul}&+rXbOb?*Ewo;mF#w)5lJlwLEis@P@$awFOTvh-Y-W4=x z{^B7saC=|kI+#fz@w*FyVGlQKUAUsxfF+bQH3g#k5OUp}Ya4v%2J?!20o2BpAnqF& z!Gv$CGR9)-K^uO)plgrOqfM=o_7yfd%jfpFe*P|e~aP715*iJiBAY77q6u%_txyG7U{Q>JMUCC z)-9wiDMXtxC7JyMk&5%nAH^%tS;V!(w2--iZyU_q! z5>_+kDdFXU%m2W#xJ0Kpx0g~Wei-qbiTzh6+79{O@r?kZnf)S^vspCvfjp6I)K2cj zl{|u-C(<=odLzfY0hv2olcLmyUIS>Kr%euLiVmlrrr)gJOc^!$T|{Zl2|9e){i{5E z#_3_Zp`6LImF!T98TLKNKIEe{QnAZjgaoAy(_Ks@kAS4CVr0+2Ah4|sa^CMify?$Q zW=l>(FY(;`TR_FNC7|DdN|>N#M;K4oa{@S7g!U@c{%MAlKBWe6;CLU z?W34XJ#!x#e5raRYUE#1OO224(U}u>zQp{BBIWHfPvnc#LZPK;$#I|XIO`x^I-tR0 zK8M}=^?jvHwXa|iYVkiJ>f>SLZENjrOxnS|-{uw>77SzlzL`lfkT#Iu^{=d|8)dV$ zhFmM5=gNOanb<0cB?z(fsqf!rtlfBB>-sZ#L(E^p%Rk{g>-eW_B=9A{RT|})3avQX>&b=u@EdHwk&z*{w08s??{$-|Y}Ja8*%h6oIlBLv+tG z5Oetg*lYNPd~^WIGC=U=EZpN`WBiV%lHK1QQh)fUtPl({{Cgv(|2&i4yKcd?i^A%; zK0S(t7QUjVjXFIZu9?m^o2ojBs4 zyCZ!pih8|{AVlvRG0ceaJa1jB1L2&Inr^0^>H~aGb6z6-XL&_kJ5`7gkR#l+f6Ns{ zTX7}($6oCF;R=pUNJAR1&q21g+V*ih%KQ@ERQufD9Aky2Sh~4V&d(7 zQhmNM9VUABYF-e{3Z*QNrzyW#E#F`JSS@zK`r)@304s!4cm&5SO@$whcB^}vfwB3I z-hum3u}I7a?iE62iOi78cQ&;0fPIVuM`s{y-*5sPNU@~!DS5#SIkac&ceBWdxP?Z4 zM=SSX`*-*tb6mb_2MYtw-_4q8rh2S$Q_%o<^V9lzHVj)kS3a7uj*L04`1m7RIExn5 zr=)BKUM)|K8Lww=y(+!;KEzJ>ad7UkfXX9khA9D#qwfGeP{nDNJ$=v!U5FfDt5AXV z9F@cH2iVH2%{C#p$(qYR!1WI)aK9T zG7_QDi0>Qz(4_i36GQSm{K`g47D2H7!s00jSir1mJi|w!KFiBYG9hj?2lLBB9PqpQ z2E}8+Q3@5QiGfia+t2Z`yT8Ln9Yz?qj~9nUR}9Z96zWYsua~5i^S8@UC+yCjeudi(!@g< z4FE;#W*AE(SL4my3!oc`qwASp3UzKlGyIiwiVsEDQa?>bsG>7{bj=Y(yRV&z*0~G! zcgh2;QCwJgku#^A1q!Ac+MYU&ci;`TLG)##9np4^G6$=`QaJZsC`EmX*Ib~w_RpN= z@cP8VUDB$)__OFiPIZ1B?5Zo2gHWSMh(8g}_v?Q^_2=oC>r81?+y1`0OA)MH$K|k( zU%qORssU-Y0P#1^?eD)b7=9sd`>iB2)Zp_0?<0s54Kr7D#q1o#C@@lY z!K)=d4U$@T2=z@|es~NR`9!yli5x4(Mn6}J$wuUEO3m29U2SC24bC{y~X=2 zCZ8@j_-`oHML*UMbzw|Ve_4}+lXPU!pX;bq9U$l6ZutQr3IqNQfvB2mj+M|WX&+v( zTfYz`kBKQ4Q)Z0fduz6rz!c^cG=vcymOTmf=& zJrbE?X2c=W!bsiwZ`__yrW_jnc1uthLq8VLj`*UqPJgMUpx!o=s^YyBH|I*UdMo=S9*2CJT zc&hXTDXi;MPQY6gbRA%+S=V0IUO#=x0MW#7o~R+lV&|aGOjQ%@Mp`amRO0 z(Ip1_zH>ofd=DL&b6*xMg2*Yy)EqMqTp-c#WXWJYMe`VVf!BV79td+wzn&l`Zj}>Cjf+8bbG8C<7Q9m0gK!LMw|a!F|<6wSMOKnA1baJb5F0 z+#Dmy^H11nEY4MCe_T_Um{$midWvR(#|bwT3y`-wt!>?w`1I@!pJe1pnNphC^rM9{ zD%elyo}%)w5f)RlTvw)Ke@d{V(%*~HZ1cS!y02T2eJCtg1Yjvr@)~xZgr5-BH3_x` z!6ip2X_Xb5Cmgz2oAfeNqej2vc5>cp$?;Lf=ZSy6?YFgk)m1#W_;nZRIb!%f&vD;G ze0!_pS}Q*#7flL(H%unSju?--swQS5aToc-EB&qB+)}c?eZ!l+ITHS-I#zG{{eG`& z84juQdqEb61cM9Q_N-EB0bB^0$1hLOz3cB&cNAB5j+_`93?foG^hK0izj*C`A#Qwa ze*rY++}{Rbd#4#&Do@zU`G-x8l|FTp>s({%TG^K4m|k2 z#1arm9@s}bW2h4>z{PG%p}|`RljyVsd$|9NjoE!D?d6(Gow&p$MR=7w>O7L$=FWZ* z-#%vL?a*}wlQA_$^0iuozo~z_Ei)sc#vkIwnZ^QfHzfy?%dOv5b|RBNCWb&73RvS; z$(;I$pR)j%Wmj+SAfgh+=bP6QuNC|#ihG{pI;@?#l#I{XqbNzX$Yw;CE9YY(ySb8t zDW>-{yOCg>Y~a!L-=Wj~l(>41RlC0ie3VPh6bQwpP9!-CyD5x(tr4nK{P|%DKSFEIuS57R##MUg@`XDA+$HfcqGU zL%A*E*-PcOpNb@0QB@3dro{tI&oLY%UjUVzIno2h_9kGjcdzYYN~Myu+4RDQ%R?Fw z^e7XkJz9{}Zb`Nze}ne6SwWvOcL(~%1$93k3Sb(WTpJIf{r5a9TJw4(QcfAE1V8PB>|D5cRw%vafG?!7e81rs*XWg7 zs27jYT@_xgs7Mn~(7~Kn7=M!(ZZ0mCVTJ7~HW*pw@D?sOP?dAgU@#s;`p)ir*u_bp zf_jM&i@}NAsFwMbQ-mdpgQ7PJC#8>=1ojOUmK9U5RHMLk^8!fUd5FtQDE>~h6rm%* z4bV`c{8IG&Nz`jo(sAo^n{Ae@=Wi(5I$`k$8KeAZd3iZ*?lw}ta0|gw%4>6+QXK`> zKQRZfLA~iJVst@SA8w$3#Aac1-gVq+;@LDA9%ano>m9j-q?E#f)mB5 z_gWvRlC@Bf{$P&&is@qg6$$w7%)h43m~>lM#w@qci!b42psLb+7$m!JY^vLtYY$=z z7iWz95Q~O=D5Dv_8Yg(Uo3a(dJ~F94wfCnWyVp0gmmQ`MP_v6+fy@}i8}p+Yd$ZFk zv}uDIRVw#25=7j~uj~FRe9|sIOp5{;aJ}BRpK;3Y;Yyh^J~LsE%nI8%T2=o&Agc*& zr=6!;%=%iaqfDrolbU=6#`+9vFsx)weE;d=?-Z=g9f$Qc7-Aw>(*&V(7{#sWInTXe z<@~;IN9GHl>RwW~Q!{nWk&D}DC$VR$+(87tn{f>s1R%5NS{W>%MM!i8z#Cuntag5d zKlK$1I@6~&ub*se#MftD!iFh68pRs0A)p239O#i(v=`JrRWBOX-xQ&WZikP!qN8D_ zitD-467b<*P|n|dYvU*a8wfR)9=2r8XWA4*@NphPca^YXwaf&ngQI=t_dhR46LNWQ z#P|rt;8(hje>NyJSTYI7Jn8?vj2Uhf&}%cYWR#T?S#5Ix{6s@ga1pQ`UTLCz8B?EJ zm`@)|pMXB}#oMTf7Eug;C2jk99cvt({q_w*ud-C}<=Jad1*CYApP-FZZOzA5iP%Un z3G692&klEZQbDb@rL4&(K7-Vvt+F}AvGMPCCv2}SpF3$U1=`5q|B$+$ zdB~^t(~@U(PN^pr4-?AhV6r}Ow{D%HTbMuZ@{}%O!;6;e9O-WhPdBLc5q51h+3OuNR@2a@KcLr4P!Z-l> zWXW!J@e}(zSDS1xs38vQ;{?LiHHGo5D1hz%d?Nbgdc{`?#c9%T%ZPObEme6vzV`TS zL{CDt{wc7YJa^Y$u*>p8#4m{G{OO^o$J&W$dsyhnVmDIxR`vtX*tGzZi`{+z-cUINTJbTu5N1eMCC;Qeg$NIKpzWtu$a z7Adr&!K$~FP_Nv-b#m~aPGBCcs^q4x3qo{G&-$XRBl`E-9$mPIpo|1UC6(jw&!LUE_K1ef3~?pmO@J3$lNy=Wn5@L&as1Z$Ae$@kA% zv*u{NImpUM4zk|;?!6zm@9Vi&&4$x)uad=m4e=#_xTnGXG)WfC=ne)BrlhDkrhmN_ zh9<=bIf*{9MqFJ*c-uf?*%CjsEOH0pz>?Jhid_fFlChN*X=nR_EdFeI z%`=xC_G!B{+E{h{$xxmEz%( zE4c}%$rkp3p#E=i?phWg4Fj_Vzvs8F1Y>!#3l~ih;$=YP>JF+i80^q9QI(fBRUqj`3atdas^%s};UVVx5JnJID~RqQY`&mAgnZ z_z&Z`@{YP0h|inocMYC>;Bg#`C}%HpJnrJuWN#hY>@PBwxr1-%HbjN>u4jKHJovTp z*33x_uPA}-gz~%*C%M7#OWU4^ooU%QQr_AM&(Ly!ha|<6J}j7N&;ik{V3O@h-aWs? zBPROzio}d->nU4q-^hn8FWtk9tdc-k^m3~5byu1>gei8!POH?`>K!SktS?bJSYcq& zocb@epu-o9kZ5>jm^ZKg{^H$+At}v?@LoPA1&af25bTu_ToCg7fCXS1ev=v`OCYO; zsn=o0UxQji+>d&KipMt?xPEQmjajx(8+<2L{$PzvbrVt*ry2G_2I@7P-+@wjG1XGB z=Fcp8n==f3=&((PXSF=28BV|K2Da^RJdFwiP;B?opvoYiK)LEwTuhPLvr;ABh?u-T zmF>4g<8S+&k$F&MmGkKo1YUv%Os%WCqph`B%s*glAmcGnlR6pl?vRWiC#@|1_&$9> zANgC!DZdMuP;_2bRcPR#Zs*_|;u=7w>bc+b`E{u}_#$C)!xk}UKPLW>5HpZ_8xLsp zeqIEq{Ros&gJf`9EM^q%`&Fb#S*c7E%5rs*8dzb5s(aBE^#8*^DR~D4GX#9fp3$5; z2wi7~G+oy5S!ekU)!=o3q@LJ5i(IoxQ|4be`-ky#>4Eox(51U~yLSe8WOK~;W)`4T z|D(#uh_8tGZ|WlawX=xum#Rqe=;k+X?^~U*G4SoGz(6|0dR}iFbcWQ?h`d#@>>|9m zt+9t#CLaTCh@Ya?eiQLzY-~4CLz#PL6WauZJ)C(*v3lENER>#Rss3x6fx5<{vuCS`72V-P%3KQ|vjTai)Q54tsn zOa3FpeClhT@%CEH1>-3BznAh5o({X8={*RZ*X=&YhY+G-R~Akbf~sK}^S?6=deby@3zRb|n&R_;gwjN!|CvGq~uC%>B$+QExq)h0j4lF-@&GnB0a zW876N)OWR)1j@m@a)^k36|5MA=hH0G(lE|?zs(fNp0Ov)y#@mzQ*yv?l98_@Y5<|kf$DhV7)LL8ZQ!$7N27?pWlbw8&bmhX z2lq-VKr8&WCTlc+lGL{tVjL`u6-Ez$rBkS>riQ4hlY99;jL{vlwP7GRjYUm|A*^ub_dT;J2dex_mOmCVSUUbnniZhIrQ8{^p zU5X-5DP*8c)5TL^`<}ttLFw+10*BXMYCZ4+lOSKVB7mzZ9J2i4l~)DSzx;zT>dQ2X z%*^cdGl@+VUErx@L)t_11ar}DNAD7Ga4J$laehFH0_hh;)D=t{JM%}?I_7{z+dJ(& zE#?9ddLQxLmsmZ=o}!T(1;j=T{KI(R`k?ArC-=9g%(y4h@v`x89%7yH1?#n|INyd} zGHEpkFb7TVNKLc(Kn2Har7VV_*z(0QBWUYuUGl(UKayDF z5;lxA%m|J}YZv~&fS8gRvZcGpSHoq7&WY4~zOXF+VMzR;!qq)KK7NM==Aa<-;-@aEF4NK2I5`SGy7U1*oW^ZKB& z^`o>^fdH@89%CD9EQZ@y`9bWKHLGq{ke$JKcW*erhGL=YY?+Ub$7of9wp7(;^+RXU zcZ*kFIC7OFld6W!IR|#@SmYOr0(PnF1X^hJ{Fzg(+?-368%$x zGPI}&XppjcfH?3}_*%Imb^ij#BF3B!H)~D#(uEG)?F3D|-mK8-m5E4D7(EGcLPRt0 zpH4#-cTJ9b(V=i#{JRyp&Cj>tSJPA&gizVR`skW1HJ}k0FsS3<-Lw6)%Am+org&Aw z%n8rNCb8F;Qu_Ja>@S}>X&;NhO)}0`HVpDwU%GZiE{adPJxSHqIcOo8l%Szt>mBS4 z4l@1(%bu1pPI&VuOM7ud2eO!WW;!=^R3OOWI(6wYMFO+%KSf`-hOi1$f%}fSf_!IN zyKT%?OV}rz$_e6x*5-lVw<7`QC>~+8XoWuKo>vu(x?8j~v)=sh6wiKV!;~;x`L&(l zoBOa2?b2Wzo+c%#esD3(MEWMr=_ZHaq6D{v`G*i`O{5fFQ?l~fs6=f@BrRbIqJYxq z*Ik!>ZDz$ptTFeu@S$Z6&*uq$5+w<}{AkBU#UTEeR%E zTTMB1OeKwjHic6%NL1S~-2_`BuoB%QiLg-vcuCZ#%n{mzo^+d{HD%7WIhk2%zs;yn z;c(*9z=fE&2)w~m<@dY6)aZn6MCNtmG?F8Gj9a*2#mra^eH(GYnaMh8@|MSF#Ahh@ z!yYg;1kPuo>w&8Gws~x=nFl6{Sa@_W#mz<<$t+e_``JG znxL<^j5gDv9X%>S+ObrawGFW@|FG_iEM==?sZrZ7aqH{*>PFvke6mJ-8X--as z?^WMDvr4ww4JyUP;&y?{N!v}c8XDvDB|Od(3Ja-L`ay3 z{ubR1_27iN4uXC43$zla=~Q=MS(K-T-gqI+3T>pNQ~Q1a8gpVUBW`a}pXklE$coWQG(HRn?Se&Am*m&dg%M7sd_Z2gI+*h2-YLunOWC6^*L+9YT z^r<`VvD|i^6s1;mWERwq=gRYnQIp3-wtM9RE)0syVdr9$1UVETls5uC4-O_q(clsLUx5 z$Je90`(Qlt+2=EN#}!8g^Ui0Ftlf1*j>0uKCp;$*L?(Qptg|taTz%U%g$|o$i&%n2 zTzE=WixE3a_ov8&iU?YYpkk9Q3^t;)2Cc-qq$%$gvhclV%BL$77fIT#$2ykbkG(PF z`e~wIUHwP9Yj!A^n-o(@3Ztffg6!*B?61I==hFebj4fgHM$@6|Y9_{p=5S@V+jvN@ zYWjd`s?I}MQ)vo3=jeX@vG=>zRqF#LHK=@gMjnZ#j8)7~gAt5~1myYpB#3lnup$!+mTA5*jx+PNZ5JcqI~B6z2(0*iP~d0fMZD!zzjD6ndu z1{J;a5Rza?ONrYqpmTVnK(d`I^rT2{#P|}WiRJ`=>Q3AB>B>l6i>FZZ9LOd4?~5?V znDX5@sb*tmut2lnUiohxkBe+vE7>c;BSxsSLEw&qw?h}_fqm1N&+M~%rRv`m zr(>}%Dy@>+02sK^P6~sY_aNCj3BjI+$JfxgIJM zX|CG=>ik1g*|M>GA`FZd8*)UMR#pt#=z9L-Y`hm!mGeQYgM={J&TGC@|2;qEKi{`R z=bLfPUMED_vm!x!rfRBP+1!OKt@3b?ZM=Y1cGE+2)20*MNQL^)rOg64d&b>;c z!$@g@USL(pgE>~%VCMr`qw}H~_te8l+ZFqemLpaqkHvgxLND=}mUdIw$&0 z`_iie<(d-hMceMqHOyj9A6U-IcTACi{?EactG~pE_AtOP`<^@jJ9xCMvV3@?SU1qJ{w-T2^t0Hx1D{aU7tOw?JM`=4W9GM^`H{Nxst3C z+UI{4`Xic!w&D*a2nSQfNv0iLi-YS=*J`}39(=^Jxs3-mDCfIAxdV*6a1c0?Fm(X3 zAD=T>43H{RjGz1*A*6ztrhl~=Wpr9EQ^Jrdnl@S?#JfIsgpN#Xqukh3b0#lt@=9IS zO zQz)KyL!u~bk-alDpzU+)vvjeM85VI}EME>9CU2&X&}C5xBkuC3?cQki1#fBTS_HH} zeH6ai)fu@#-AYXLM&+1hJ-3efls-PuQSE;RFx~;=bK@osY{BaX>h!8EbmBff7DfMw zUq%SsmXN$hulGow~DJHfR z6>6oMY7SC;7ejAtTiOyqGc*X5mGq7q_Dtiz!Lo6P-b_>%TNSG0MBS2HM!mX5)7{sb zqE_%!{NvpF@h@pV?KrS8!*oTuN$&@(J#sBq@*+f@jqd=LeaW_%OsL1PCKZ1ml{7gTBlW;ZR22FaN62ay|Z=00S4Qg?~ zRei=)0V&9ZfXeiIYGr}yT~|I{r>VR+OThR2XrWX4z+vsWCfSMoz%GyFgF{)=YyL2P zfaksSF|Bv*&0>UCoP>2-m#smG7HNE=?q{LNYVo7N3Zq+N#dEgB3P!N>-bs0sP1#t( zy6F+4%W(SlhgW6cMcC;UC7#!=$N>0r;V&96FSt z_LV;KeGSXG(6CN&yM&a-^0bh9+Df1>a=0}d-I#@|)f`I_j1)KEcoUEcT#PnO2*~zC zZ-ph&wt?m0Qc^30k*9R1los$*n>&5jfg*YWCNi1`%(cgEwXT4w2sCm{q(r(n0j!(~Rge&%BwJ_8wbk_NvOdBBcJq>$k zm+Aog^@n%RI>5ceq78P5#YM$(eAsUXr7(A2uxL(c!O3A$U<=GL{b7sBovSt$g+c03 zQdIRIyWNXYarTai^k~hX>~&Hz&AQytd-{R?Tvy}40!2p69z|9LTjE_e!cdobNOi_;y!exnSu+`c0SJgJw!UUZN* zr&2eL5z9#^knp3gvhI-)6iGy8YEOA*I#N-!TA4gtKC&dW!$gtpgZb^%x5z6?O`VfN z6r1Zne?Scyj@bFgp!)oCkX{=|6w<5}b)JNa^&Wzr+%Exd-sxJ! zEQeA_FyRvi{H%99?g&Zz`ZqXAq3S{I{7=kG4CMYe;DkkO-W7NTK6U0rWN5Lf%%-tQ z?Z{gbP7fOZUA}&;5#1yW6!fh-ZuQL$%-C=i&BzAMXWR6YpZ7n-8MC*uWc;HeZ(!$u zMM&W8D@zn8_cB(5hzNd|DcMqCt(ircMP_32D;VUIock9Mv*L@{ueZm~q#X}k%qCB@Lb z#FV;O4AboaVvKPl#Hs?b%=#B2FU&Pis`}RkN5=xKRMrXK=T3-X+c!TPWOQ`O5?<4X zr?{(-z*2XUlZpuMn){XCCtd;fIc;pjQ?3Nfkd!giCp2%zKFd)9c4<>#{qVn!jWQ{~ zq9c9UT8u2`&ybXgBd#j~W4 z(;LNNC=Cev=>--=W<~~b+aZ9ms<2l}Xv_ApO^oXha+snz(w#(<%&SfcAQC zcrvNtC&(RfXg*gD*<|UsFGOiTxZx8^dw=;SHPy|p|C*egK8ls4pZ3;(0ylrbM{40g zlliKvq*KJM(yAMVB|c1FR;D%10;Rb};Ll@_rd_IbPJWar9C@6O<$P;R9=_VRON-*p zTv9nWHVvZDiyvdE#`su_D!VK);&~d6n@LY0hj_}$x7Q?!ucoz{les^AKq&?V?Vx>| z_$E%08dM=Dx3T%kGzhfnENQ*s;VD#KNq^9l433f-5jBGT z_EZDD_)y#Mnon)umjEti4dGvI?m?sL(TMB6vUHA`Rb&AN00WMkq;!x5teJM>luh?z}6zqTz~6 ziAMs;Igqi+t>V-n@?CBp8j%30n|~NlY&A6uiE&75#q->J&e^LeHEkFqPYJ<2C95}A zNZ@O$FWa%oq7=NFKqu5ukQq8YL?>!a3#3&Ko|#_o!jmd%HkH+aX-m}eKI;m8pJ*u9 zBjii&&6Fx*p&}EsU5`D5;Fh{S>80Y`Uyb)02ZL>1FDkr_W zyz9smr&5T6d*wPH$z??2GwvQs^O^Z~%iv$Eh&bt9Ft01@&Z^h^c(TB34&8H&l^jAN z${ya-nmc?f)f1p|Qson66=Z&GtH>nykvd7QZgbl%{F>n9pcxkoI)mrvt34wfCz|S& zRp%m_B#~j>T-zZ2QJ>NF!L!w2J!RL7<9z)f+sX)J5Q21wQt~zK2wp=6UNNfxaQq${r3*tS`Y~5!z7cc=tyLUN@kXPfph`iU}a} z)Irk)HisCclC&}vVRihU8zaj7m_wEEmC!YsPnWsp6*T=-@5k499#0~#eJ{;JuB*DY z&S-xHQ$dy>Awqs$$14{3o7!!&ynK6l@dAVJ$=~0ZmG`X2`i^iZO3EMfo5jpn!gShF zk9d{T3@zt32XEd;`r%mVIEl$<*NrlfyXo7bf7!o^;vYf_ap3@3!V1y)r>7YMQWCVF zQF@4l3uel^FC&yNXB+5bxWJC)AI06DC^2jR^PtT?gab6_JTO%Hw|3ne>o#ZZ{yuA* zb%ei+d1N~l>zGb2J7#2SS!=*s1=5YbWag^=zO|N;T%`0V98~#W5+dt??#It?+>b=^9<2*6M45r0ao#7S#&~CdqxrpWmvcl>tnP0wLCDlU3_Vhq%Rh|7g5BPlEPod$Rd|=F zL$!S-*}9^Qq&j}48xKDdHLDP|+ml@@_niyyF*<><&lX8a@XBK}+;3cDZ3$r4;bKX! z7NXu=lN;aV#|YJz7I0#p==;;0=f8L)l^|s}2kx2oTFvoDRr!+i=2bM8E?uyIM^O@W zEtuo&g2;h2On9|haUuN${Ow%wq+7`zcB@EwHGpY6OrEoNh%1Cr^{vGeCY&&G2g*Y0^cSW~Tg z*0ro@o|mJcEBq^4_oO;~w943c13FSZSd6^ZoH$>4#9=Ej3rV`RDn9p(;}t$})z8sa zC57oVwKeBm9fKB%gz%$OzP{_Tka??PB|b{7T<;)h9tlt{UQzY)$-IQC0^OxM zwOo_Rz%G%YE2EBa{hI_2ayw(*G+sba#Dx?!tpnq0R<|K5k}6#Z&wQ%*t%W@P?cmm` z6(>t){v|`0ZEMs$y`hweiVb1#!3MR?v}kTv{%fa-%9v$x0$klUTWbjqkLr$$|by>dd3-1axOar@|t>M0E4!(WuBD7RqA(P;A^GmzS>yy zolK72nZ)Dz_9Jr4?cA=o$G)vglzMlfMbal-#kgPu)F)K}mx<*y4ZaEsc5av^ zq*k-k*xo;Vqy~fCm>SILuru8zJ4wO-H+6Q;t;Ztf#x9ykZZ|;vvBwO{gI3H6X3RAdSUp` zY?JG|Ct)o#{uY5Zzi1I>I$>F33@fuoSs9*(ggI>8UC%ck z^gj#hz5eUs@F2Sg;NRwFP^>XIqU~A~6~b=0fGl^dT$BoUi(x2-f(B)RDt|(g@Ron| zu>Gv7zxHnE%~(`(T81oVo3Fd_FtWHkJqV%pIW!C*dZ6G>6q&VE|4k`aqUsr7Q=t|J zoaf{+5+89hcsApF0OgPD!VW@AQR#KUND(&|;|9!$1B)wVsUdGBe?0M{duM$m8_9Va zV*C%|yRV(PFOowAiS@|VIB(V4FncXtTO5j5Aw?ia?7uQ^#E-r7IB+9u6K4_cH^*JI zC)hHlAC@VrQZB{Ilbz^D(oCqM%X0tzVOu%m);@%Gn-?HhYktgMYIG>JBnfdIyCGhc z(kKf)7yQ~r5|%GMtci{8hbmG~upKJ(zO ziLB<}*omtQ^Djo0Hl%c28D&X@Lw0ndu_2H-5n*ktd+}2;Bf;bFhXqJFx;BXVm!H^`V0{*t z^leY2zklmauRLpOH3tQ)EF&{K%JweoHpVUFx>S0R2}qXHvG_}xmI(y=z-$>uiQZ0bc67U7=9y|GR#%PDY@(+hub&nCMm$ZtTCIj}D?y!3q|Rt5}zg&#VEyF&t$c z`twxCO5fsrmCKjp+P7z6hw?rPn5G2Z0l*NV#LQts^VYb{mUPTL)|U5H_ieZChomsP|iK5DvnKoZEbkk2j*9ek*a(sx4jHl`^vlrXH5t8uqJ zrl%%d|Fx&;-uoM3^vHf?bdy+q&% zmraD+pV1%DUib7OUgF)hoGXxbs5f;@Q?e@SF(af)UgMw@9La(Pclv`2PP&bY0|uK3 zb|12F2$NehmPlzZ(=PsQ>9D&)&I3L-3-{uKr%Sx8svTSMY1>;}c}o_G+X;HbIirg` zN=c@-I7j}#LQqfb?217<1K6WRXbm|XT_?@=nnOWjLq$(=(yPm|_#ec!)c6>;zJjb4 z7W*LI;X9dhgsFqK#5J$);2k8uWj`A$@kpPrDT;HyVSS(PP1pI*y`FXOlWc+jojGry zx!O-VSouAm$^89qFgrpZl-0+wU#jHY24s7$4ee=8AuRB`QHx1YdzX44 ze@1T|!Rr6T@l%t!5A5!&`T-ERa9V&?pj=-{COt*%s6kNQ0?iSsXQ|emVxa_*v+SgA zT*gx`%KL-_6E-7E&ZCBS`3HPtUd;l%)osVe?+jdkBAwjg88^7Z#Df!;Js-z^mzEZ8 z`QlHQ{KE);q;~4zTU`2(`1WL{!hU^j)*YPi5K>tb~KX_;5WYYwLm!xj_n}ax$zh$qz-HDr$Wl+zDE!u=t*= ze|c_>)$&|uBun;-u^N)?F|PL5-!{h6ejKaSEHFib+QvvUl2b;z%zzRzRC@U3dHpG( z2PvB6{yNTJmc_wn7QV7I5!>zX$dnU!u6o>79xvbC!9m zlv4L^CNwfotCiY15cl}42E6>08OMn^fJ8Og-AkEPZswT!9Jgh9eNW<5H1$WnR|Y$? znq|1gXgtSHy6#n})tTrH?C4W~rc;$-}X_`B;4_SL>n%Z6TwMW{vwOz(|Eow;hGOURb&qZs$|&H5out* z1m?@6gH8gSIBin=2ftL1GLE}}M6z7BdWqMaKG~n!OXkA6@H&ife(yT$(0j~&Z6j3H zTJxXX+q~=DLg!xRgsXa}q#{t0bb$JN@w`_z*O8M%Z5=Oj;y&nc3iqp?!Ndr-9hWtd z+VW?ZE@-`Gjd)wIKu z_LC9fS|2i62&`}&tO9SHQ4L$xI1<%O1$a7zl&hAjx>K@elfR~TQPY4=^*Ny|YNC(j zX_bQ@N{^r1dHz%+uAUHMvj-CT+GY9oZLpHB+@+PQ;Lb*K-4%hRrqgf-tnMWH$D&k` zFn%Pq^NIf0t!jUt_%wmxf1=1rbCLAAs4A0c}sOhh&jS_SGN;cJPLY$-%b~&6g{s?~GRrodjmIYb*%#mC9 z-T7$^!l?y1do?koxA$@E=kjXTG&wOI#YYVxWf?@(I$YDzTLd~OWV|N7FYzkWe^*_EnmN{ki6)}ck<&E(_ zqs{+;)$&%MMsG$Jyw;hQP0eI7ZMX4bsQbdLGdwUJG+Dn$h+LFMY@O&2xq^7MBS9MK0bO4XAP9 zg+wL$308kIIeD_88^cxBN}=uX1T!(L1Z9rk=4FvXDt^1G%Pcc9=WSitG=RY`)>~AD z`{nQl#Q~(f32y!o@!2-N7n_CodDNlV8(!H$AuC>N1_7ap4k*w5j*8f#?(BZxJ4#D} zp{2~9Mx%@f`Mol4`ee{^Xky&kjLvK$-659I6X6Z6xOdT6xJ$xL5-bUxbRjh{r0gF@ zcl*$&l@V_K{taf=7oZ%?1wBC_;~)3SnyR0fYEueq<;R1e1(k;vhrTeQ4?h8o47H1} zQe?p&Q#|eH`OqxLO67p0_{ z0hPvZrj&lJ!YSt6WH1`EKE5a%u#TzI4ujG;@SK5jM|nu&g#`X#NC(U|H(xxEs{Y;l z&Rf@8)3Uj9%a}%#D7+ppyn*I)G5pOn5^W~OW!ul97<}6#*D%Ul`(<2J*NZJuH94)H zy$)oD;H@jO*~#LAnsO`7iv+Byo_sQd!SB{T$B&CXBYyvU!TRI-MC|8X{;gdSTM5R) zdYP?0xc0ox*&_J?6DVF5rJ&X4hk0@wPHxhiHCK;N^K;@iJ&Rqs+cOj|X$~74ciz!v z6aj-MO9IHx2$nJun`)d5**;D`e&)o&w>V+axj+^4Ke8aHVq9F$n7%>u^lm(yY_E(> zZv~_G@)edTPffldCATAsjo!zpdFP0M+pqwWk=31*xmW+jIM`GAL8~f{Z2HbM+1dcmUNJC*KZX(TrI~^xT57rp|fZld>_ayc*V66Aaw(U8~%!`PJ)t$b;x( zmN9zP4eTEVnnd$Li zhe2OW{!fGXue*^VM^|uYrDfzhLqU#Aexy>rfxs(+ry{JV`qJY}8P?VyrA54U#sO0) zqorE2Qwi4As2_f;Z<`oS@q{v!M>Kp|a4uwtK$@SBYUs$-ZWuRl0dq!rVN&ns5FT2? zhVCY(x;>GQuHNe%tS2^cyvxsCZr#GWJ{thnwlJP=JjfIO~D4|zuYE{^&HDqpc zx8*i62QB}+;y@K4zIR#f(B;YF?srC5hOW5O$z8etDpTKZTc>4k8K>p@)wOO*I&g0B zQ|9?-0n1HHmj@3Z7sd!hp)qn*da{;a%?_*4puUJ1#(XAZ(qLTYIw^sb!TD9ghu~Rs z^M#d*wGS&f{t4@oOJC{(>Pi?wKdxk+tyh!6$tj4(i9D0La+1wU`+XH~g^5&!p~*f@ zP4}<&W6wW~SDoE6N|$NxQP=MEpc+G%a8NVbBL$xgnIeyI+5{f1bA-*zcj8N!MBSTy zUw{3m>l07S&P8DMG`g7E){vwd$(jAk_oHs?_n{n*PR$=Fxm&RVvtGwZbf9#L&P86H z(|TG}n|be?;*?XkNfxVw#Am^@`IKW_;VIHT24bPpB(lpV8%LiRl$JB;a#G*SyGc~3 zWr!Zy{Q=$*9Gxv5qxI%dQfF9>kBmPd^<=2v$4ix-dy|&A!4Oa;V#GViXIJKJqMOHd z;YsIavi9Y^>Wu&qi zT~hML`PIX8JcBT&GCv|!vyxJ63|tqnB^KAweHM7O!ANf1%euRO&NEP8;g^`82~D*n zNcRFuOQdkTsBOH;hgcPAOa?jhzRMo}`QVAr#5d}0NkS0ltG4)FqT3rQuaumhv_)9p z_F>8lR2`c!EdW$OeAj5+scr`jv1WkOhkGSAF+mRceCZ<~koaM`dB9A_RKaXv7fD&l z1XNQ_Q=_^VF#OCcVh|TS-$( zT~3e7iWE40BFnDi8Ooh8cV)cpbW&gyHGR+4xvqZ6^*hGBy`4pTY|B$Avv}j!-1(kf z#&?BxIcn;GG?}`>AlDWy3U)K>HX*M9|op^zT84uUylf+yS1Zr;pBvk zZnxDCOJ7i6C?eqXDO4DpHSlHC#*k^>3+rjG3c5m8{UXMjUk~KP z7kx{a)}Pm>Dgy=Y7{Z{&oxW&3l454btx%1JhJ)}f>yF6onjZ*WmACMWB=!vcz3`@?caDuzBvqdUX{%nT9&iAbq=BB6+hDUj zMwlAXw9Pbzwft0^`rMaqG4eyA@}%HWVq}$rKkq5@W~OoQASiYHwEQ;R=N;P7o|0?r zCQ&UceYUuX?!$-TIr%-tT{W(t$V_3p*WKRyW(=e-U09v-j+d%+=tAz(FG>0GSs&YP zb8;`Wmz_k>VgT28F9VV9rxiUJV~V_~lZ|U55i5^(oP9i9;xsH@+)e8K9}hc!bg)(I z@#TU@^u{Y-#SeUs60+|2vd|Oi(R2FU#B~SR*`TF=7*e5sL+JQX*d?GOgh+T565|kF z8mjKNsS(QlE=9fXot9*(GJRO?j<2+*Zr975V}?&^NP>cx@`jAZ2Se&pZ?6u@Ic1kJ zEY};MCc9@itO9H@E^dPp_SG5#(jJ>bXt5k+FCu4#*vx*$&;3RhviY~P!+Jc-sh#8> zM(LX`RL|v~u>CmEd(cJ9;G=p!BJ)aVulyBT&?5e|!5|TEzv@mTY12Dhg&yAq3p%E6 zdmUsu#}&8uSLksw7t^ad(?&dzZQ;n%l6%2<#q=DR+uCR8{Z!;DU*v?*?p>V34DjJTfN|VGz1Bhx&ob+GZ^i z5eV_DAE4zzo-D28p3ev3$D7Yqe+(x0R9&5jXY53yM;--w&rAH2!Wdp2?=q80=m3NFw?xHWu7wfW%zs1oUZ>H?< zkrtU0RWRHl${WH~kRGtN5tP42+$s6ckU3%qvZi5f+rymY^J%oeTJ4ZsA zEsbL=S#J|)+#Q9Z|giwkB$%pI@55 z%9a2UzNPDm^q&Yc@Gf0_FtI<;M7|PAw_)(HThoguuiv)M8I`0=uab!?cdRE`7NPsK z=Y3J)F-7)$p%mv9iy{0Wu8mOTQb<5$O#GDd^_r;Y33?2USj}2(hQE0%xNkX$vm=r6 zmv7x-q^9e4f8N{wv1XfBqjW578-a74mTJw_$ zFFA*Wf1cM%Vmr+k+4FS3tMt0K?jng#E=q&g_dQxGSKwnBVReE);C3|hI6w-h(&y}* z%4nbe%#$PiRgB@1M-%DOTmXp4n_eb;`#!-=W5MNQ0WA?Aw(-(6PGgQQT{t`*06Xb6{GJjB2|yeh9CKs z4an`yFLz_fg6LXkNDOU8yCs5`PE&!PO%+WsRVzym7mVVH+%OTamKDUfBTF-3ONw%F zeUPnoBI%M})l8+{Q{wpFuYS^Dp!*+P)*GE-Ya(*jF7=p>RG zP@Kv*Ri$;vKMdK4bI$dRzi4Om@%)wf6I8uMFRH7DcS$6`lys4<7vlG36i{o`ubU{# zC3YVN30zge7*^lvC3RqAM9b3(TN+FLf=|I`kQ3X}fq)!=Uo<9uKoW~pYjJ)&47p!E z4O0c8G=B+ z;=21z2?gBH+ppAL;{*TaHB8BO;Be7DzC_1-*oEusOBJ{L$DWPnrf4n{3)1Su6O=u$ zsRXM7tOi7peOMxHO3exUzV;lWZfn)eLo$?`ebBJ^d^0T2s<^*))LZ(hMV`|+!zOWG zm~ZCKti}_Y?YB4&g~g z@F)C|Lq`?jBKrNby-^Te?xDw*yveSXHCZ4^P56-WB(J?#wTKn=pXN)I70dg_+?Sp#YY9CfP2ko)+4=? z&0~@kVDlD+U|~Uq z+VIK|(P!9z*1+ARg4s`V!y)ENYyRv}h@22|doxzpgJRuq#in^28O6y$R}vjtoAq+w zH>*xd6Vk2|2@4HPn~=)Ge69vm3SS=LHRObS8xkGycUPaJwmPNhn{@(1yY*qHkmQvJ z;?68C036i(+wFGKx;3Dx$Hp{;PfU!}j)tDl5vRV+5|Y0t6=T(sTch@(9ru;V2~Rhn zkb8cXi27M@@6s<8*dDSaruso1Nj??0nC((l(vn75=82bVYLP(cK;kP-IBUHnNEby< zdnv6k$BlPr5qd+Q#LC3G&@{%9mRP7#y|Gq#sO#jZfSic|2s+-tWurw**;h6v?VVk% zBWN0)BPhObVBp`sFh06BM)n>J+SvScaGhm181S0=)Mv&k`MY@aLtAHK)QrP!>rkvs z^6OM_4(EpguhGQ&uXuSxWJhHHxt$Yk^LghhY2_j2#Zv}()@-#9j+l2JbOApZXov)N zn+W>sSf>A5Lgn=Q;$lauGyCY&kFT!WlePK7-i8tfTUHWl+SEtpvyIlY234|P?p5uJ*O+bR`6XrRAa2w1y$vvBgr~PJ(3jz4 zQoHL7>t{tl*>8zES(r)R;;W_!xsrx9iH$%7BVzh3LKE)J%%N+hA8-P~$T?}gg^g`| zYz17-h>XuFENtGv`yh{9r{r3S7(s{k0Y|iaVfXSN#Gj7~r^2iE6AWDA%ge^2o^Fld zWGWlRYK-LHcT87Km59V|m$W%;P>!Z-;T^a0!e@ei*VR( z@SCt?zpG6YCpckh=|mraThy9i0KDqN&VDC9LHd0lbjS-UStuZx8|^zE@IQz(vYGV) zD(Kt46^g^t&mAFj@3a@6CNh6NN(6r0%Z~~f{pfFg_t;4#!(?cm?Hlhc6+$@eA{@Q@ zlyN9doET9>=Tv1VDwB|2;|CM>EcJ+OIXaJp#hXX2W`Md%;TIsW5dxQlFaWD z-CmxH44I8UG3C*MEvrfVe2C!)BOa{P3BG7@;WNgHi3MUMx(#sbwB`Z4YtaD-L}{zb}YS4OE$Px-#hXe83a|X`ie43t3<0`crlrJH`_|TM z-P1CBso%BP!uh7-qBLU8)EpdA#)Z=894@UTzo6tV=@rrO-D9it^rd;?fi7|o^l2#B z0F=0Y16R4m6~XyE+0u`bPt9jAl0#|Ej{)S1F15zghC9;QoFxMEs~sMholNDJo8x@4 zYK(vF-vML!%GIiL67oMcQ)p#w{4d(RDypro+cy+iN^y$21SnqIy+A326nEDE!Cea! zhhPPYmllWM?i6>2;ts{#<$rh2`NkRd;oft;`*1VH&d5{thO9N`Tyy>eThahqhUf6n zr){nC?!o^0>TK-V5YJ0Eip)Q4DX#}HEsvSEWudDI1BzO(- z5nzoEs+`K?hu5$un)G%qb2cXR>pYfebZ^$aGyhgn+PPz)rT;5qcm#=rU{l>&XB@yL z12B(0oX5;Fa?iLUjUEZ(fp{U@<@j-3V8P!aPcL2=zV;Xxh1_g;m!KD1`Z9PDk`)>| z?K|6pS;&8j$}*~EcV>KX=<5EJ z+p6)3QGv4$b0@uDT*Zl(Ycjtko$Eheq)9y^CV7l~zu$b%4yoZesNQ|_&sy%-y9DCd zIAue@P3W&w(b;H@BvIimQl&E2ygkm{iACb{;uK1Abo|f7Ke?YZ7&VZfm{eZ0=q%4( z1*WOC%-SB8Z1Zz7X~F8%Yzb7FjqAHT?SiunJ(AUf6eo@DWj4DG6bFJp zcwJRE_#iZJEC?k*arz?VLSd)6-Wy6Ufo7vnP-?nq8BS}VdPB(!v++5+*1e!Onwxqc znPPKk3u}Z89}e*)^%L|#^J8hB!8Vb>r~TBvie@+1U7Q}K-F%vLZ_LY0X0GF~Z=v?I zUlaZDEqYs7vVIhb+9_ztRoyr%m7i>sZ4DgWuA{hUmh=f4&NZvTGw_ z#shdUnGxrt4%H_A^~2ZQDjubyZZSoBHVkPzX#O6otQ?u>&KSc@oP|i=D!+Sl5Ytf; zh>MPYczkF>*FAfxrb>M(YnXd5m_lGxqv|UmFY%E zQAV1&CxR$qWT*N=UL{XdO;Fa=NcHN>mkd#a?jD_^JWQduQ3VN(^I|I5#UmHu#D+Is zK)VKZQD|zptaud%b-QgR7a8Y9>XmSug)16HuDdlM>!FZ-3fwS`pS&mRTi|9mEZe*l z({i8)IcX|)OjnmVJ77GfEY90srmlbden|oJf>j{cbHmIn69)SZQt|WEmIGu_*%m5% z=?q&W8&R56Crx_OK4gF)o>WYiLXLuaK7<_GzL-`g4UzrRUXW@4^RtBSZarmH9C^GzdAJMk+Ji1{-Jcn4nUufldI4OxJ5$(E@8!z6HOkFhv;QAHos z%0`-3!;{IGa#(A)aFet=p`A_E+^ukpC+o>+F8!>-0ee7g_m3abWZvup%o#*V6vm!Y z!-*;0m6T+6S|H{(_z#HnmqKf=xqezh$74KeN9Vmf}~=hx!htx<+qRfc2-q=M&jX~ zdYia24K3I`L{F48-rl;t%vy8T3BEZx`mGMA*gPNG9mmLBHxkq?5q2Af%|!g10J2;n z&9)@F<|786QSrVw(`$p5MG@-BvAUq_N{y(^pE zot?l87P@01W+4(aDT2I#jcfJ9c*+}m9BE!RRf8#Hrdx#w3DIqdFtw=H#_+BU%pP>` z=qqFRkv4l&xAWv5TYGz};s<^>7o@DV&Ev44nIM42@%1s(1C5n5F73j;MiNeY{RH$Uqx zAN@Ow7cWPjJ*duHLSB1B$n&lo2oLLihzENd>r9~86VjuxG&mH~*@_F}o^x(m)JGN< z{5<8o$b5TmA7=Lr34A3q^zrD1*wnGoH5RrJGa9AID}(LwfOzx;EJs~{8$fR}Q%nxZox{W87wLguWl9WdaJ>OKV64wo$QTsgmA%$;tH4Mr1=+rss4SjHAeWIZ{ zNf>oBA-rOfVYdS#4=s)lm2`)xe6Qq_5Eun(CMioFZ`t>(jh6{$u9e*Eu~D9{%Vy_T zC&ld%o$i)BAHt)F%caqQ($f75VO8K@mKPxnYR?o=^n&19Yr4yJcDn}-fv z1s+;-+CbxDH~n54=DtsGnu~5ok4# z&VJ0p+9}Yd@>|qV#YYUL*_lasnv|BeuVay1R$XiGalb@II+4=u9J3>qUBU=Wb_9*0 zuk6i_jP`3Z9|frAI)oIm_Gr-4+f9U{om*RCmo#qfs!oK!KT=oDacpulU*tE+_{}Rq zz#rZdv@vHivkJjQPouaineVO_xy?>tUsi02NH;eGml8TxxO-}D4*Ki*9C|M5ZqPjGqwlz}fGMmo`Fv?J)wa#5p%Feq zR!FN-$Mv(nM#;=%xde@xwD*)T;(*66+R2)8v7_kEwg4LtSbWD9b!&=b-l{(B+RdT3 z(Kc5`5XRhH+Rt+1y4-XY65u0GCQsw`r}F_QkS*MvvVuWNqj z&t0Kx`1XXp)Y{9sRK|g%*kHYHsp=y{;3%xX=DP^O&zHi#pJ=)nyZL9gqgURiN<-{RB$Yfh>>s_oxibNfC)hIZYh9Pv}Pym%sqH z?EFGBrkxU;(A7ptH?yK#GwJe%gD&pp6fZGMohF)8Kunv$JrR<;g%XuzU~(c+QGT)$ zAtLJ2$a__pTw8ZlTi4j7{ChE2Qv*}zJ?>SwG|IUq<1AEl^Y852UthdWXytDI$r9la z@+409@Ua!3WjqL$(bv=Nz5Gy1ZfqcF9YmSj z;|IJ7F#c|q&C=w;VV9&#^V;$!2xTws51$)5SWC zqxqc1srT1}?fl>3mQ(m%*Z+EtorJyuCD@$$lmSGZot01fK)3$D+pcM&&n0_fa0y*I z5K{xn(?wKkThTAFPllKp!wuvYbkgUH-KlamS?G1vefW6lqXP*K$)K#rBMk9yMY4y{ zpX>H4%u93-42Hj0mnDviOFb!ibL>~N5?qb7tnncHlwak6tR3HDNEofElL{dox?12k zd{D55vW`VBo8;by(}{em%nmRDq!*dZ%TF~jMYPusrF9j^3^5ix(S3i&_&(oX9!*>T zThJB_5sO6Af_}2Lbw`|jV9K`<-@kiweXaSoyK1_?10k_VHSD4y)^3ZYJFih-34r=S z3&U79)2!a&bX>`NAyeZd6EI-ufB1O!HT7`8`g&zvC(d|B-?zqIq%$B0$jg3jxri@% ztp^dq|5K@9pm^)-6&s>O+2-2dX)tr-&nRkfhR8aJ*)q)*F>_3e+t>7 zjd>;ie1sw~L{fH+dZXyo1=G*!FRsswgsds)NJxSN8i+V8h{%Lis}R&abAx7qWUq|#>^&Ci0TfcN=3g`$Tq{xPC^qPNw?0Gp7K{&eglFBn?5uW`-C z@;pte+m)iFd7OkHks5Xy&}MRUn@Dg&jboE=6SD@>?D+>o#v9EcR|~&a{#IO~EKf@J zJU~05f`;?+`;OjRPhSW@^w3PglAJwj(inlZg&I8_TSj);_Yo}a*%$f1`sRvJyb=7N zV@(PP+g9-8sQFF01Up1rSh;#8;pq;$)Fw{r#*rp<5@3#5(iwIvQ>Ljrey2;5JXuCq z8bck*oMG&lH1edm{U?hii5B z1>P9HC?g`FBgmPkjRR^wPh1M>ps*RL5w0&g&do%B!}BLSu(o!X1}-LqOvmkg){Ee} z>e*3j^tNg8gxS3&Tg!MQv}tBWDThKDm@u8cWe*h6-`HLoxIeV@y(wI;Xh@y#E;!tZ zpMO@&I`AdOysDbpg`}g$YjqNa$ZKhcSYBq#^wa}8zROMdoelzR#(RH4QB$jPOZcs? z2y@0ry2fdMzc*JYjlz0WE)s}ss;mO~5yA9XSq2~UAD2e;f452T`wrO6YcjXkw!E!g zl~gg~#U+i5^?qkWCD{*>!1=E)`TJ$6-KNgGIoHYygY?zUHMA4a-Va(@S^VJ+in{D5 zcmv$@@0Iy~``bZ*5iANaCo^U1aw$B~%-3ojuZI$C5zD4PiRoDz6mVpP%okB%YV2HO zAPqIQXIokv!h1t4b@smZyE=Ko0kgiL%#?_@&y`MY@JO1+XTrMX;2&|4Bq+roSs9SZ zzi!S#mV#hxgfDBeeP^y5D)=C)D=f_~nNDt5iV2eZFLyMEx2bd9l4#9Rb8Q`3^vOst zg%cMSHeDbluGZo(RCLPitRIG?o@6ei!ZkNf(ulFTA?jfD?0=Wz_<#8&tSl<174OLaZNM=~S+zL$%EqrBvv%=f+6USU>Os+gMf8{xx z*QP1VqS6`r*r$;88y~+tvZrm~rX}xz;fbov{x@;!Xuo-uaMQZ_Nq|l#gzto>SYhst z6^a^{nRs>-v_9xJWH0>K94`^> zAsEq!lgO{VC*x?@MW5BJNyj~G8t5rQp_a}Nwka@X~ zWvF?Fo`G^8bW&&gUtXZa_zpr1JWXtgPh!3+e-?dT^~-w^*L%CvHK z-zGjKl$l&|quS|5U{AavpN)Q84gi+=Vfjn?19;O%w3hKCueh4NFjA;j1~DEZTSG#h zNGEv>Nmlv^vnb%1S5ot{nn{<4??jxpUn*))_kc6-^0tO|F_2@9yQ*T0_L~%+@^YC z5B$CxY_gbCU4%M*Vb2EboxPG3N$Az8ZE6W)gH76rBx4&yGToYy*VynBsk-iJe>&%^ zbmu{yS92MrZB^0A`V7f5qLsTn*I#&HnCXx|3KVDOTCJ&9PkY|`{qS9Ob~CQ`JJa9d zAseayP;Od;*Te22`osB$#y6iv&4qt$DRJ>Lp^{^X7RtTDR-G52Uu{FOo=+;dx)NVV zHET@QsGUSl3v2%3EuR<5AXNqPxGEO9AfcYpEVs%eKIx6Hqa8EK9N3)bX}|vHrchX_t23pu4Sjd^(QcFd>^U<9+)3AlYx6u%&MW!j z>1;TUcBZ~~mk{Dh8M#B%g25mekJa0-59I>|t5~01em*|& zgzCgZx}s&5hs?BVy*zMD;rK`hb0$imZJP`F;P&=x))AR;8@x&`UrmKR4=7c&5dIR! z|GluR4Vb13%(A>9nO+K?H%N$B+I7mSroucjAFA zZB$*2T+7-a6PAk1N85_A@~n2-jAqOSbnJuC11oR(SAzn)?Q?E8)_-Z~T4`M4K-j*< zb-Fvc#P5#M${vKBevED)83^nSn-|^@kxkry;QZ0lbk_k!J-gTZu-0uG-F{k6xcp!u zbwxj8ma0ZG%Q`0G2LOOs{U7GII?eDkb`#D$+UJ&-^|uY-b7zj}T$#=1aSl*L`M<%$ z$t*2W;qDwj*i_70i&0G+^8Nz~Pwid`vhn}j7!ZMuUbxM?Y<84sJ5mBRsz(;?VBL@R zBKO6bl~4G!Ona)=N>SBn<2`8ezPgNWRcC=UyZ>wA*AJdiZw5EmodIBt;s%?AINtL9 zRci1^O3~6VctTI><4HLeCo3{jANj>FeOa`Kv}uVRFsi=Fw=Y^`(k}ba9B28J+>AS@ z9*(N|+e_oq1e54N8w7yf7UrZn!C=l4yjf^B_P>TV$Y#f6PAi^<<7br`o4(RlEq0B9 zx$w>1Un+4X+J5i9Z?99kf#q3?(VmKjTttg>l+tRi{Fay$vQ{L>Q8TFGOcP*J` z)`Jl%;OxF89-8`;yS5}bsT!&gIN__Q$R)dPts>P#9_%9LO46s|RzO!{`CzIH zpl`n=z3&o=y5dXN;|xZRtP3F3`}~5qVi5b7u+;S3DPi$iT5aR_rSLHGR&39t)}jcz zTI`1;6)Y}P%3p;Lkz`eQo(Z0+_ub2KCPPC?^59GGq*vR1O&bNkzYs4Iej@Xtm~Fog zOI~M4gV7g!UE-FiLvwbt=WSK49B<~LL4ji(M7{3TK6(C_nQ^kyQ%5v!>(y){8nOW0 ziWis*PkTOOt{2e%tMVM~80)cw+MT)+oN6)dnj!rj`WY_`J^ypx3&$oXNe{$O2Y%nB zQ(H*CvApM=Z12%`%_iE}knz=6A>PkK`1M2vfFAlrS;q)Sv13A0%c71qBO&l!h&K() zrg+e6W(@t?!!NA`ro`G++IWfERud(pp|JXVLIluPJ;-^nkmkpLZCo<6WVU>AIn(8-*9V<}K~R-4V_NRkMc-VS-!#X?4_vA;R1wG!@Maky?U8lvyog2(O5bsg!Kr`6FKc^{wF z^Ph)<>&V}dYo($pgK z$snl;KyuD~#mIU)Ag3DhmV6`K!KH=+-9xvtu2rll?H&IZw9u3<%i>z4#F1x}Q_kFI zD9BCdh(>M*jiI^mzg<2lj-}R`Qk#$h{g3Q{Xk7{1p4kG5x8i(@7?%0gLW?B3nUrG> zG>CXYXcOJ7I=FnJZ1F3$t}kz0RV0X2bionlEks?U`5|SP%W;JUP)(UvBnSB( zdWAi*fM{1hZ;f8{-xU3*bgW!+id76N(ErTNzSfdRpZ0i-ne?D2T>Q6-LgOMz)wPT= z{ysn##ZEgw8U6gmA3tN<(AcRH5*G@FyQ4KOdMhJ&2CekUIO%L2|FOj84JS;ibZFUTVI_N|sRViaI;~psc1|gLJh8U_@|v`*mb=tt`YPas}%q zQg^zoD(hZM!HOy}#X2zbAwt_Fq?$!DHT)arVouzh;GTdn|3|sKej}paoMS~rc z`YH2i4)ZB?<)4{{N92Rdm51h*jI6I7a$fhXS3yN}{4^d6Zv)49cb?>&SA{V#JRsev zJ!QH6HjsR_vN;;)@|)}CV5P?|c=dZosPI=iyp#X#ZZuFNxEvy^T99#Mb-O0>`J>z? z&zD}hHnw`kJ&~1XUDrr|q1ouVc|{b5XIfvA_%jZTSiqbbjz$$tL3)&W-(3Y67O%g^ z3T}LiT=M9j{dK2{#-p2}u_*6eqb_9^?eAY-*kK~i){B9PKZ<6fH=?WR zn1Ab~Gb*&eV)2Q~r;~|7Nu=Ew?%1*V59q(&+k?lr*7G^ZG2VsC`YjuDi`Cay+iuFi z?DDr^2Y@M!KZ_s#Q|r^uKeIp(=Qw*R@q*{B*`s^7UH8s9TZPsTr5ai;`0ejB}d!aofV#IrRkp~Vg-My zLOPG`6+j(2;vN3*M=$&my)bx8QXt;Ko`(^wjd6P+AnM{!X&i8-@URBf7HQ&kqRXf3 z%mMe{fpjxF6)XXAZ&jU_7YbCs6K!-+f~Tt64$_X%=RDCVdMen?7J9);bn3x`>r%u* zh13{KZ1FONr~Cmt{x9~PxavdS>Dy`<%xTX<-SPBZuJhwo2d9~W5!I#LD22DJws8^X zkq`>N({~DR2r|UktDO)2{cQb+Y)(bHZN*{EzH5^8!F(N4>}maKR(}dnW@n14=#04- z4lV#8X$SNZgN*K8=@S85oQt-kvcH@h3j6LQvQIOuZ}*dQ{L&nqy+*!h>-;)<&-scF z$MNLg^86B*|L*iutw7`U#!Ie{V3tYmH&{Qm6P*n-ASVQy?~rd$pYko!O_$Ut z7cT52ms?A~?#(o@s!Z(`?NP2`??bBrsrs;ws{&0pCjavw{OD*P`RZ~ zvc8BY0x%I=sD_*n8k{AJcPm~-Uto)$2Jc{nO!!-XD`rOM{oMHi6_HJ&MZsN0W=+Ao zH9+8K4m^675(|2kj0!eZGZhWZmGfSQnW`vsH%*t7CY{NoZYnw*F}f0K`edbiW<)t- zT4DrBa{tdYKtkSk8jW6!nCwo?ttOSWQq~``%7w>KCX`sJ}k)No}i$H%N1D%&y zD6e9H{SmVzckXm4%kU$~Kv%lywxkU3E+S_9R7*5Ih^JsXigr#Y6aPY+@5p6Mjogef z@gVC&<+iBb3C25K z>uGg3^~rilGxK%!Z#iaO{%0S2Db*jlS^TF*$c8Fu%LqdV58GFh&5Y(f zR+KBJ?2b+ACP-}%ttNv%=KAqgjclWTFj2L(bFc6K*ae}-(u#sTe>)-~ofx7>cNBM= zMT|h?ZrVzmmnfKR>@PSYR_eYt-6dDIVE_o+2_HGWILr&7;7CbF8*`prL2oxl@_=u$ zY3bZOk{}Gbji^c2w&%Z|xTdOMSbK}z#$n4aRpq)`%{U3|56w{#aw$z#B*Kof3EK1a z(XPH^U5cez5P%u75MX1YWg3ZM6o6yMigknD0fNigV8nODJ3+vyfCJs^9>vH)rvd(W z!n;%U+_JR6m;=wlRRF58M^RNBB11RQS&AefU0@_Zhbl-WG~3yN{42pD;ZvJXQg)8k zlFt0x{DM-f(zZv`fZ5lcy=OmS9kRG_qklACE$FmVO_aI(wwN>b8gD*@sW$gE8TXSA zFD|{@AGTe1kUzz2dAyu!4p}>ne{*EgR2Aq!kNcU9?RB=4+M7;T-%h5I;pMI2C2~pI zjq6$)cGhbH!~SCZ-8+x+%#meOI7tqCkB&A6t{zw!*kF`Hk-v3YS)05@mnm*^zDQYMzi*HNw+imt}4KEM&tdMII;NS#4b z%8h(u3)!(<55ve5q~0e+cN2&ydv|>p2cf@k>~cN+5B$6g!#y2_y9#Ro~ zh{RIw1Z=axCii~qQc>t?0#w=U>|CVtE0{#>@LWfdtnp~xjk8}xjv#l{Kh$kLH?zgJ zs1ib$!lM!SytT^GEPh~XL}sY_Co>`6eRiao>1RcUJ9svGp)c>^;4=lL#X;CJN#cJ% zt~ktPV@R40qU%el07Af87wyNHU80J&O|ey}(O0H{qX=~~Fr_3NUAk*71>yHm)iE*b z82Njeu+nE4Wmc&`?KEdvk{3N!M<~E@vzjZ44#R(B}ohOdLrAT83#Gyud=6s z1qB3t+T=zc!4d9ZMaxtEEzC>8s0IP^PqIqb3^9;>`?dmLuiR4bcT>FZ$Mw;kU90dG0GzwUt9f6tNfd*=@Ya30ERGxDjoaO7ui4}x^gB+#2x&KXEfY^dO}3fy;R!Oo*m)xWR~pi z#&^w*7-ia~vt8ZT>?NiEiqPsM%-0E~%a=%QZpeJ%cxNc3+$nc7C;$;O; zW|=mku?9OcnOe&y%QmJ;Oqs_PWtczkRffzPa4DxaS0@V4D>3U*QP~K=uCkqNuN)&U z)f=jxM(S+j`C>Ksw#8YfqXLPjKik@X;*`CjRNjwnLS^Yk zU`L#eTin0_>%f8+b{Z=A$r4NMNpNVuKcE^Py*O>d{Zt*qN?Y>G5Sf)^<+zg-q&$`reVw#J<_8(Wv33V zFGc8)C}p|L_xqg7i5#igvHG%5gkC%}CZO4s=gKS9YJCI3IoIn>rpGz-9ho!i4N3oK zk_U0Ga43=ahNz~}?A8nnTwB|mNGga&_C^I&R=*?!l&P&ERJur6KP>0E-tyrHQ|Z}> zw0%Ldie3i{ijP|*m+?*Q(`&MrS1+7Lto(l%M)!`Fakn(yIIm?8-uG1Q5eelq`bE?x zXm{ILPkb86nPaRbK||%Vy)<{R@qSBHfB3qqA@mFxB#uJuA*@R zoOY%Bj?E&^ve_MEUnn~AKk>}C@=nccpAVD9x7QgqN^ZZDz`Xz>^d!k~s%2=iZjp!K zp@K1wf#O6F1m+4O7{Ut{)F1y)@+GJbY~~EFo{j|y9{{=)FxPRiqDaX+yZX7m%qrEZ zYtYrcM0@UCrqOc^g$90^db84LR7VXukXqw)XEb)ld}xFnFJs%33xaEVerA4oWcy8C zTz=F*?)Dt5v9cCkkvqBRvj#=}b;_C?y*;k^mI$_cxCTx8%O##^Pe6* z&0<&&l33LilgEnW^eDaXr%}3bU)2@I-6ico6l^QlkkHh@=Uf5k%uu}I4uf}8!K;e8 z0sQ#)e~{=HM%Tr|4nz!=nL<^K%ihwI8Gzkv^EzV()Z&{hDIcw~LLUr^JdBniNr2=q z#nugIB5A%=2x?G}VXnl(rjCmn;Y=ln6@|#2pvZL?Qm|ELpzFnNC}e($q0gPKguIq( zmZN*u4W3t;4Af+PU$XM~YF_@7ZR>FB@-XkGY5ww(&SPpngBlZz=3JVmNILuWt7$yy zP>W6SxF5~F80Ad%qIWhUzXxfOaeeCkLNzk8!Oz&rY%lf73*PsASXon8-Ov_gm77f$og1ifFiwLd%*46_6wPB0>|X&6HCU3lg{{%MzrCkuCf@)0e?CL$=7z5g`Y-*a?rD(&Q|k5 zvS(K3zS)TJNnr}A;dAv6-7N0d11wpPUDn262F70WPc7{~lZIcPc}sI9%@G87I&$}Q zOLG;1x9WQ&z=Vi=0IZYz?LUWjBWb_P0yx8itjQSnhW%0|zjL7^xA6s`sWb@Xvii%MTU% zs--c5rvR`nM(V2W}41EW&SlJ<)s6;-@&F?dL8*{R%B}M@KFn2b}rN_hjg-o zemZ@Z)#3Py37;~4n4D^l+xcWbM5Pa8D*rV2A5fTOCGd}aTAbI{`j!IA4eP4-I$uH} zO8^<@L~(?FZPe|5yn1RAz4Eo+Zav<=D+i`-`pFTO3;X&)`fg7nFT3J0#NXX3ZbW@n zkf=PAK{@*vT8lJF(kgh8vy6Ib@bd?RBl8LlitRCFEy@0xC{j4z$?|*CIbwXm58x@8 z_Lj`|u01lq7}Y$?k`)q5KfW0^%hq^}CR9bv9qT+95S2xEleynxK;1aQVNw^ey-IC$ zsA^_v&5T)`0LOQnoWyqnkZJw~a?X_hI&)(E18Pqdi!Qi9@17;?`Uhm904=H2@3vrP zf9;seM4Duvi!A6$Od$^J<@WsA{UwtG! z8+E8aP;!wyxxsnVKdGpV1dg@)NFpgeMc;~<^aiYeH*bD+CAV^%KEJ9e;Nsod43QV9 zng3Z1@&bW&7~%3FQ#R%|iHn1Om-k=O>Rli1H5*aL`>C2}UF9^z3EP~AXIHg9wxJdY zj%sS`L1fCmD~zM-Nf-(K2mv0AE~gwZB06`zH4i$n-)8#Ct-K_gGE(1nd@847F8I~N zO$c%jWMvt7;NFn;;Wzd*x`TyO7`vT*ylRYi-&fh&WENR5wux#S_#w6n$41FMBKa;P zw`6h8%Oa&n*LoN~nU4tfeXM6(6gYgVQRppM=s>%1SdRdy!{FZB8J8C6~~j&GmOuWSlRAplc)wH*}s%=dz*1i=MM zfWH9G$y`T%*A5HJRqukn*O#TA-wm2)R62Ta8xjaA;zI6If#L`+*w*&pzP1iWkH`#PJIa&x)|MXt3wfDoIS@+BtrU(fb@Oj~tZ=B3HY5@Gsjp zq;2{;61w%wi0Ob}LK}C&?CfeVr9Vdf*4EdTGcV}iDW(Hs4IC7cvCzK77*Kjo{Avla z4HU^{zdpp|?Ve-(T7XlR%=bB!V!bH|l?X{4GiXPcyB;}c>ZFzAly^4R-p&q27b4Hj z##m|075_|uOt#AiE@2wu*Hh|2)nnN{-?-JiHnK6l5&dHfl>fhL#6%)MCj!h zkzcHjxY@tcO02qk;CZyOeIQDqzX{I!J!)y{Y3Z}gv<9H{R|)2Ox6TP_$*=XOyvk1Q z*J?)LFjs}K#apa_4bV;W(p9+DSh1mPy_7)brpYLuj>7k>DsEc+S;q!XkL z9fzxlM?)Gp&#;D+h<8Me*$yLOlulQ!9H*)E(G}8Ur%3q|m)#G$2My_t;c_pGPNAY@ z?m=^|C1tWyP2+AF)V$+pdc*<~V>6U@EUCFl$g_59EU&qj$!O0oS+YwrF)~fm6&R5; z!SZtXrLo7q>5@bRir076p5%Cte#~M^+|!oo=|~&qKpu(OaNv9hKga$S=)iAMH1C5Q zfAtUOlZ_2RQ)L2yust$OP#B-zJ~FKC0n3~beq_hz+vYMdGNu1qGI?61Cxn>EzEb2- zbaW+Hp#3!vuu4YIzToz2UI8iqT&X0^=H--gWNz6#-m0_`EL z{8%Sp4Fc^cyC1EssUEhglk3ijwYBV~F>?x4{M$XnYKR&#APju_e`$dJpBkmu#Qdf`7?Jp7Xl>wUySlD*5YsNi}38&6aicvu8#6)Kf7^X5FxPL0`I~K^)7^tsQ@+kfE zuElqy(EZLkV8t&)Up3^45dJiUzcD~av}>()p3$A1;BNP=x5f3fkL4_QrtBDxLPTeI zsn?x8vHJ_r2U6ab-=J~7ae~OIGUfLaU3-&L`JZb40R=6NXl?-_Ic0G_^L=czhvN`Efo-AnZ5)yHCdb?!WFvW64U)#RoXU-NE^ZS&SmF**VQk#2fvH|eg`Biqe zw_t}d*>XuzecAzEk%@6*C5^DwUrd9Nbgrq0)~1gi)b8@4{sEcI+L<=6QurAP4m1B%p;UboHUo~jm3Ys!h|udS<_LXmW17#cWyouXBMQa7Mr zcHKV0Uv0l&*m<|VIm~zkn0dC9NeizXciuEZ>`ScOTTP*?n-H5c~q^^rX_m@WA$e6aG(KVAReam*1y%Wil5srCuL@XKzo+4J$;D1`B({TEt z&=<2bg&+|SEm>IprO!TMj)Ast&Li%@g4+g4kN0FiIGxMY8FoIQVLem=q8!-&fIt(K zH|l1tqXa#ym%dIbAE%WPP4l7fVpoT)9O0CQd?XElZ&?ZPa+0Z=t>7D34&koAe z_vWc3&I?M~x;`qjjpnh5Cdi-<>3C@5n(~gP$@eDv-4)jJs`5ay-laZi^kcmO6Rnw3 z|9OdwVF*oKj{-TLBuOcM_cA!4JN4o&p*^W+kX%`}M_%hkG@-yGV?wYx$?;63X5~|( ze^y~}&C2EML)&Z8h&M%GmYN&q)qQaS>7sr%#8s8IHSN7vWbPuENRuXfg*FMU*a0F@ zm-4gSe9qggsSC^iN$0Id87gwDNqvWxl75_gnApAkF|kI*Pi!^qU0X*>BKuf7qH z21f9~-SGSpPkv5qU8t8ZN`0m#)>h=V%~wTn4dP6r^XYtY2kh|A$D4ICRTT=E!2dBo!(n^5w430ch$yTJMwQmb+g=N{7KMB53`mgs|- z@#-8RX1E$5U=WJct|`ya1GBkTS+`=lxVhN12vp8r)RJ^5pox;f!Q`=%R3l#GoXWf$ z_1NfExmoDeNvdJ1<_kG<|0;=M6@X+SK~Eq}>1o2X1mWd4SQxzkG}m}%o(vH~%s~8w z7XvmWum|NL1%_PVd8?!k^evgR$g#TCa+H!}OJT|#z2GP&gpK`kZS1f{fW1dE=6Z~W z$XG0wBusFs7%7Mc04qme6jKs`PuMdRK5VC`8YhW`Rn>&5TA~B`^7fwj3yUGH#3&@D zCOOX}=<*;4y%`@UpvKYN*i%>br;ZDKE~z{Bg6pIBrri_iFo!*Xp5-bT!?t=GZu%p(*d?mtF}q)1W- zu6m#A2tj@olOepjqwH2bja8FnRfd~31r8pv5A9Q0e!F$Vj*ai)Q^Ln6r^}r3G0gSI z>blFTT4!Up+B%y1_-QvaaN%WO^mlG~jNGSB%_mN1g2RUOH(6K>zUv%-Am1_1p^26q zW=rBq94nsGtDb(koRnLV#5yLn^i9&R2hLU?HFMmEUhb(b0ev&WnUK816NJINzReQ4 zZpy(iZAHykiJkJ%X1t8$q9slxzSf4tV#Qiz4vt`{<~rny$%%NBy-TroR;_kXuW0pF zVqG^aOP)5G2K8H%!Vc=VZWr;By6&@^kWST!?F7l`iD|KJV;|Vo7u`4S<-RF*J_KQq zU~L5Q#j?bnx`%^-2q~6xLSIzbi?4ASukq%m44kKbb4^{=`!f3iI1q||(zk!~Z?DUa zmcduW(Z~z>(OIJSrhfW>$IA56$LnpWoP=M&;S~M*eR>#9awLPL3v07o>L>KI2(;SP zB|q9{=kilxo$ffY;2(oq4Zr8ez9MB5kK#`^hTjs=-gsKBr5WNb-6Y!C&&oH}Rq5(e zZkclN42&d@=BjMvxUQ@-Z3a%pUji76qLAR!e~Qgq2PIKxF8HknGZZHfN!;Nfz;%u2f z9Qn;z6q8>~CTXnThn1$7(QAEf$IC|vlp`1e4u2~|gX?6N5QS7lR80l7dxGH8x+GlN zY#K^qIqWlxw`Ridm-7;((*HxmO#tNm?)-lK>!))5<%iOE>Kan!OK};JVV(o0B>FIKTRq5Cnh%)!;(Tke?U+{*e7U)oHJ?{qv`~ zhAI6J_q$|CdS?9F^o69ep7+$BZ~wg9&N*2L;6VV~W!88_(~nE}iWW38X5L@w)cm>q zUJv4Nf|)l48R@7^87i8^*IR@;Q=hVVTa%snB7LE3Uu#tj3e(^1A<-J+=y!akzV+BZ zp{yY}RZPqaUB{$@Ozwn?s;16s4G&KYf@#@qQA(_+=trs9IhRB4H~>iKrdZ7E$y2Gd z%t@r0P-xiU5ibS%00ruR_uydoqLgXuLp%dc)w7q>NcBe`CJ{ANANJ#nlH`iBo~bIXvc0c{4K$7RUewCw+? z?M$QDTGu$vF%#8NbAv++6){t!M_Z2RsBoxx3R-H2d1`AYZA?X5YG|so=6NcDC?bjq z)f$2rYwDE{QbWMkX zpIF2)L&;^LT=a?ad|EcHCD+)QvAWPw``ShD=X}9iQoF{SqgsK0pw>V=<>l()0g|J5 zwxPCD`=b}gY;u(KwdgVsv!O^Tct-t6?{+UoL3mBjZr|ycH3@Y9GeL~kX;x(F9*E~X zeHEFV|1i!;qa%XIB#dS)@N8vVp~rt0wxRP*l;hx(@(b?e*mX*Xk`GP10g`LCDy8_v z@5Gt{v~ycA7F9<{u0B^W6oOqLX=m%BpPa5VhI0h@+(}!xR`e_9!q9PoC=@8Lq9nsu zRtnKxpBp47U9764OVyl-{<`j7Hu_Mgn&~K|4%0ZBijH(lcXRM10x7QiF=#yqmkUMx1F_1#D=R_~cz zorVdI-bJ>lLm{4yX=dY4;-q}?sr2TF`{SE*{SvQQY803Bd(`3ETTUKma?GX^yLw1E zQci8LnQ>)>s>0)cl0z%1Km^bN0t39T9XR_eHBFePm-N8vMu!46(ajx$NT(g2Z*y1g z)la)e*<5<}TN5?!+#_DN#cZoZcTRX93g5eaQ=N$WWp~X-CNt-$(fKERX$s|1#ebQR z{x&83&nwH8`;o#RIzm$5l;kEQbdJzGXV#eIORFz#OVUz9i3iIwnJ8^` znW?|vLb%Qw)NW7z^re%!qQl#XsEbo7n2iku8SFfl^*Ef3J92lH9NKKArLa0n(D$VpiDqmz9Gj_2gG+i7VHX}G)NmghLR-`0{wrd|h-nFF{# zY0YuS67?afBqZIVJAjURG_blOi|%()zeQ&@&Mp+nWQEX|$>c;(b{GeXyr|_hs0MN^*?zmDJjX z>>Cr|ZxJ-oDS2g4fhLz`TCDagdL*T`6dr?5U^C%>fB@QDjPb+)j!%G$_YL{U9jq@d z_1!r@yD1<4qriXRb?f~c`1kVwch#J(_^=o-%-ok{z#1L@&w;=dEH z(&BA&wfb^?>aV?4s->9QH z7eiwx>P|$#cj#i5oUiE*lk9T!af4EYId3EA!az1)H>71sz`AiFg0;!qvCivHFxd?N zO!np#u|hUs`Ow2~$&%_101-KWzWI6Ha!=A%iiEDKuuI!ZI|au3?b?Pq=}zRQpvS{| z1<>qgvcUY_fL|T~%wa;ed;|bUoS++-2kF5?pU@}yFIZ{FPu=vvYgnqQQPE=tO#a;< z{T7jOn0xjPJDCJEt;jj-ZEB2Ef8~yQa#eR&jc0~x)g;o0PIm`@6%neU? z?)eNq!B5UJOK`1%jt@(Mb;tOkZLI0nI={189otnx3Rfr_(A%D@=>I0i*K}f!9D$;a zC-55~Ah3QPXW5#hy8+dJ zY)(Op@(-0s$Y@W2WCK(q2R;UeC15@1ECh9iD-eT|QR6r}2nlrtwx3}C{3Ve&r8 zIYyh#`{7NsZ@g#PBK5kIn>el=na1y+xZw!4qCrpu@Pe_Cxy0Mj%{URd_M=;}>wvk> zSGKkPaFYuv^mT61^tlcqQ)cbLpMXfdaz%1DkN?wT_&*F z^y3ZXE*<9|C+5K0D@&L17^*LtKA+0%ekfV~;kRlw^*VFO3M*xPK5S6cz&O}ZG%40N z6iymU&Qm!OQ z>5*o$l7Wo4dXkztJ2L(G%nc0`G@WjHnQcWJ%wjcZW8<9QQR%xkV-72Z5`}hEDe1%F ztY>&Y>3hF}J$K#~EqRue=J_|YH~22sA->({Y)oz0ldWWToU>_j_9#GdjU-AVqM1{5 z^pl0QfNNmPcdMzb;tB4t(z7az+0_gfULN#e_-p!;>7Y?(mcY# zz8p&r-st!Q3xZ@^le5*H_|40Do@p-sepl?O{bdh2++w<%PH@EE3B>%X(c#><7Fmj? zOUHmo)J;1*d^x;g#`Qy}WRjZ<;M@o&+yV*f-7T4aJGyliFB1BiuYe{4$12aOEfi{4 z=6w!I**+LGH^Y#~Ja4sZ8^lls3sTtmt5$oWtRAUSYzqZnGI^txI54hJeQ}Dyhr-0z?_lDTZ@<6Qq9h$qO@4890mdz9-Yw&S`}giZ za>eJ`rM)8tg!!aDp9$LlRjw8qc{v;j*iS}?Q{f?=+nxzDWkgv(TT|jy$xU`kg|$W| z_O-Q0t&imBlW})ZYE)*}W7KK_V93N2)LYwL$sdei`L=hzC`j6<+R)4?~6u%sAFKI$O@&&@URvTav z12lhMG3_jQg;7wABL5kEdu!X|c8J8l>-tWVNuO9xKM#>ejNC#e`$Vy>VE(96YCE2k-C2{Wj6u_x-C(! eKbVTqF|UmT{~lRTDDGtar@!I1f>%J0qKEIq<1(JL8OD!NC~}&geD-; zrIXM*p&1~+ji=1LckbMO&Y7A2+?hLu?C0Sj$(L_!*4}Ha_kGvC{C2qjpnRyJt^&Zp z!2wuce*l-$03`q(F7A&f_JNOm5?mo5z{e-JN<>6>h4d;ZDaln55;AfsN;2|mB)6ra~qM@bvaS}T)^hzSUYX~;;(X#Vo!@+08d6`VF)Ej%1{ z0PZy$ylXg@Z~!X+fJ1=2+aEXl`vV6Tdyj-fSBS5YVBY|v1mNP};o;)r{kUuFyZx}Q z1MsgAP~8-{Pe}db84<& z^6ot;r3cC?s%q*Fb)V|#8yFfHTUuG$*xK1UxV>`s@bvQb34R?C8WtWAnV9rTa!P92 zoAlhg{DQ)w_r)bu)ito%y84F3PaW{iuI`@R&%-05W8)LwCZ`a{#iiwy)wT5v)c(QY z(eZcm$>|TfZ~%C}ne{K0{VTh!VeP`j$H&7b`e7Fit|xZjUBf51DMCnf{|V7E7ixCV zz$-M02|1PR#2j~Y_Gq8G4qc_=6hm;Kewg;FWq;1Fp#P9%|6X7?5?{Cw^q>d6ZVz{qe07qz%rJ$gC2l$5%R` z%Jh9=nOYr}8XPUY^m(C9;I5fLw#F<3vM_uO!Q1eYgfp5~xQ*wgvE^{DR8#%*Vd=34kd z8|?j_hJ}WXXRQwu(o`GyioBSY=n20gQ-F$!UI4FOIKF2-EanmbT@N1mmQooPBO}v# zi-l3@I88=n$S>P&WnUhab_r-(TJ@g?KX2~tnvz}Kg?B=5zHKrJMfQDicXThG5};F4 z49Z=(2QZnK+%K*>-`Kt~^05Z2fPzcO!*}t^S2B=%--iZzM+Fa|S2sK*KK40=+(Id_ zf8cis@#Gtdy`KYe-rQl*zi5-+#Kf6pJ*|edz^c=Ct~d*RKYur;PHUB6*SDqP`VF5t zHrb(BquXDwW^c7CjsmDm6l)!OeI-m!Q(k=>DmKD&KTR$2*4%7{3xk!;$33{kVl4WM zC>*S`n9(C9YuPpBH+s#)Wa^uJqgEwtOJ5>$H2rb4K)y-vmTglckiS^|6^`Np?>$&U;U!(jjHLyVH>Hvn}hL}0{i^+ugO$%K&=m-GSYZ= zJlIGp0ap8JwEnHn&}1&7`9-J`=-Dec1Cawp4!E z3_e@kJ2Cp`O!}xJp>UtjV%8`bO+*Gm;`riyNBK|2$GHg|%N(qtOd7ugsIQzfWzy{S5Kp4!U+U&CMssJ%B1E6aB&Q*Y`wA*poO_x@zo=R&eXyBr^o@3#p7 zj_iav&5w7F9tGy3@jjhWgbN*Q-|6sC$*cf|(x+z@L_aZ|*|8W{d04`*|B*V;RYAN> zndSNZ)mym%f9JSILArSg43(o>V@#ah_+ZUgwbeN5n84FckEW{UciuTq= z_cUeQo0}vIDKWP?g#agxS_a*6n<A@WCVVeHhiEr4H$hBTb%!(+jcDGfv!tC%>%QlbE)98U9M%y>IX6EuqlD7! zti7heA!R&0wYGBi{=F*&TMXgMge#WaobNy_xq-D-M+$|M*qPc;iOrrzHjl6{&dk_{cU(K)ncg!{?8g1jm)y2uAdJH=e zP1{e~1x9r>8*k&^5oqQMdyRCv0lZTw(_>%Y5icLoI=_;-;oC{O$Vw&FqSDbR+2|KC zS8LMk(OYEFOJ4k{G=D}piGPT-+H6*Vb{P|3eVC-Q*VRxum0PC1!kl8DIGHg>Z7rDn{3&!!2lxEp>#Ex_ ziLxT69=TJd8QUvTk+<@Ne>48a1Yk!q36fJnDz5AORt1bTLPE-PTuu+^2P?Tr;T>+wlgwH*wU?J`1&-Oz&K&?s7lclFuKlLPUjo@jjII@WifMUkO!CxlJRb_L|n3gDprZ7$}EP`|wrJUv}NI zvAhmW7%9u>>%CKRrCFi2RJzaMYY8lC=Ob?w-Bpie)i(zO-Ct`2Ec;LA_dG5EK|C#~ z*60x0g)HjqGlR%xRq_@W6gNqjT589@LIRlW+Vxb=0VlHhw1Jf%XMcrXx4#m98Botr zCfI=rqZ9>yqD+rr-^^8g-x7($7dhz~(=2VMKfuod@z>+!TTuzOd|mx78h;SK{!F1;S|G)z>XKmAw1yNI;}nCjIRmXGvOy)ev(+?l1h~%b}=fm93AA za-vikQ1E>eLGmCx$NkwcQzrYDae)`cZ_;kN(Kc4}{_^25D%ookZ@T!Hz*Gv)vUe0{Ag@x!MEBh@<8`ee%G09{>jj%u}?#19KE!r zvjq8TUN4-4w(Mt?RY;=5n%ih!=0@HIJW;0k&kUSFjO-;Kfv5v`Oj>&h7}78!@OBQX zfrcB%UH{7Y6{C&Fl-7{4E=qQM@8yczaXH6$W$SY)3NI;9?tXy6Dg*m?hqM%5^u!@F+*7Ki%I@8*y)RjX zl&xm9If$mH;$OCzsO-Fxb^1D#&B=0S6+vdf12Wn$5dG8j$ol~jZ=Ryg!0}! zj-~7PNjHjS69_Q(~W;Pm6Y+0N0=9x;>2LP#PWPVlc*Js`4GcKNfn zko0H2olRQmHodfp8czcrZ5KN1Av(mZbbvby2_apdGMZjCabUSo-<0XaRQE6y#b>n? z{i}gV<$=tZv|WGp&NU$q(P3_-8r%`cIMVggXC%wh4lGRdjc>GunnVjQ3QJ3I@fMW# zy3_*xN6p(m!Etc%-1k;LdCu{M!N1GV4^_yhlgpIbn8|TBKO!ZorkxWezQGcj^=Ffz zROmX8a>w1?YDne@B2)g+O>mQ=QimtK?(Hc_o2PBzH{K@flj0KH?G^vC>t&5;$K#a& z!+-g8@v3v{2mYj&sQ=k-r~Ln^kG|`5tFa35jTcc>po?6TQ7Ql{HjJ$#DWT*;Uv2Ym z@0Y_U$W6_@G?PsiXrPm;TvaH4EUrI2ZFIE^lS8I9Z3SSZhOvUA2PoChSLebZ``a)I zvKg~SMRv1qbS~IjT~&L8uiRMV{Ii>9xavP?`}$`r!+**IkbjB1m5uwK9OMwhE+$-# z@e=UCy6z&Evd_WKgy>jb-zjs>F^TpE7P)s$~l@PrjsT!ty!eeBIM{)QBi8< zo_*W|n1ZN55xTB33IUBWr)#MX?y5FzcjlBru1o2|ybEqj2Q#Q4W46DYgzd8NONm^+ zYY#ldw3$yR9C}%s8R9_q)1&nvIuM~Qqb%9E zd8Q_F-`3ehCJIuditzoOWGph($s8AdVeqB+CD%;P4Vvl1;?NwBpg~~kr|?87^X>eU%bPNA(`#o~7mbM52Y>e|C2LpV`{j&#KuYvVw+1=~L1sQR z(Y-=Z)wq#hvgWf@t0-AVM(8+BO_9bB`Z8m5N$v`p8-&#YMG+2m^Ck={^P1Lf4B`X% znvhAVkF(b`xGGf!U5s1TM7{Kj{_di&oXoQmz+1k{wd%at@Qc}E|KTt;2|7IbONnNM z_Ft^Ct66>KCl1f@RLakNSXEgWy}ZGXWyIXKg}q{O&lH9RmLMRJO8}(z%Xurhlc?(* z3y_9_jM?`Q3x{3nS1~tl)~SBT{JvY8bE}BCJ&LK@!w1-@P54F(N^RDi-!fuuYJWjL zTCs3npqBbYg2KiLCoWB95!)hRTm*}B)rcG~`fh7767;?%wGq@8Bme0%dFB>ZE!-=S z&qKABjX8h&9?^9%ffwpqzZmpoF^L1|r@^X?qlc*|uhWZDFHdI=D^v&P7`3XGI0EJm!N3g5nHcJnJXKabNH zVe05D9>jfE98s%zZIbb};((K(^L4mWKTbD#L;Mmz>-BlTjh+-hucEZKQeu&w6+SS!cW;W^Agb6hG*~34J0>5 zk93T`yJ@e3lRsGUG1W%33%(z z6UYwk@T`-lt9soqOaJbsaNyZmyXVVbmp-!caHna$6L;%Qv&r?!@?q6qzklXij{A#H#{Z?-E~!oBsf;N_ z&v(3I9k1DDeL8X2BB?)`;TRJ#yXB(&$}L)%N!a!t8#sG>*2@6i2MUL=vaS{9I~e$M zN0x7M3=6$DER9NgT;grNYRYeO3tuNJ^?PhRMT58aPEE=L)6A{hNWg#fSn#L*f!C1- z=YytfLl0x5P1}aIJ6DSAEolrSrSnvrMfDyJrU2e1CE`?^wi=BcXBqpKsz}N*BjB+iLU&j$ks@wxl;scQ>&WFGcZt zXcorzJgW?288o-}82#p1{;WMhaPe!odwx~QaF$#_8f;J|9#@(eshb(xbY(&Ophx&T_K{BkhGPp9K0Vp>yuhnf-YUc(^sC z-OUiB8B+&#h0EM=6(e)my_vi;>RdBOGCx~-vo?X9LWWYRm1GeocDDQON=s;}M!=7f z+dvkId9YU$B5opZ#{?x2m*-%RCsFGYf_bcY_lw*E4}ylp08kF}`k2rmlw`A2dZbx< zVb%a12B#+$Be6!D!0w7mJF|<$&Z*N$M2f~%2~JK@I?u;5gd5NGo$jCeE9uW(0?Z*3 zZewB)YP*Y@iTkpA`jw+g)h@K3Cui~tiFmK`h49$(-f!Q!ziaG%pc+&D&?~CDar+k* z=@I9{v{$=ZP0Z|lI+0_`dH|%f7pCdsl`EegRh9&QB#6jCC7Gg}G5o}^m>X!Q_8CpB zfVFjzUHbCI+_e9WdI9_G#Lt3^Pen9ItNpj$I@yit$5hOZx0N@6hLXy&Ud8?Of9Q(8 z=sdbx6CEtO^F}^$dwIB^QbWT}T5a5&X4G+_&wEwCS=5kQ=~3vtn<+}miG;@D#30bR z?*$nYEwQx=+nP54SwmWQPS4j)(Vjs0@27U6pJ7Vty_Es_xyHP?F8;n3W^Fz=%cl(Q+uP`#rVUza-X<~Q$-aT`q z?Dzx$_YwR5BpHvj^oqM z-!xx6dQPfA`XW9=-^M27E7g@>>iE<_eXEdm;O@H9v66>@e^!*nQCrULSnoW>WKSX$ zX}!0+8zUoYkEBaxV|;X4M(kk)exZG<^?ab=rASgjENs*SZc!I0k-TE{xKLfBVNdEU zK-4b)N{C8nv36V>jF_^?LqI4uUv8X=Cx_HfdO01hj2}NvmCikYb5qLuT^HP;bh`Hp z_96eoW1_DuTiMO{)IY3s2*`=9>u95Vl|{vA42{7k<(p0!edEsb&G!PCj$1ejUV&Hi zS-%pP?cWr!ZVZgj2R7#u>|U^gWhZ!0?z1VWe#q1+R6tz}v|PLoz4&$RwoG3HC4c)f zD&>I4Y_bi#s`A?M?x#r`Sc=2$q5t+gX!`Wx&35%hibq{-t(#dp+49^apnAHOy)4O* z!7ozF1Q6shTy7BhmoV{C@S~{hcehbA##n}hD*N4oa4+{}8ljYH*CIUK0B3jK{)!yx z0r_J}>qkB6j@D;SXi{o@SWc9|l_+TqR0&3DRFD(p9MLR}%T>AtEkc8g$93+GbIz^^ zgnWZ}%OC`o>qGXh?)NAFiyx;b^CYSk%4?134=)`vV=?RN*u4TLtQfu7;Ug5zFUG72 zm(mMucuzXHo@!93>gFn{Vi}QkXaC9qOK2V6C;yx1*bx(Sl;mr!y>~^{`MvIzE~TKn zPZQrQb-iY-La*Bd5k}+l2CgP_r-)v2OO2a-Z`^eWz)ql}g^x4=%@c+H>T%-|&@q2P z3C1Qs7Jbg=G_bD*ol}HS1khfi0vQ+t|2r`!{^^FKN! z0@PL7iHL~s8QXx8V5J}>oC@MRg(fI{|O zcBQ6dQPDCS-7N)<7OpZZPWy-@77mLB+as1y3VTBnHSI`= zsBJt|$%ON=?(<6kkM!}`BJGNt#L%vgKQ|wmyxVXHtZz!Q;i{EH-})*c$7kmE&39WuV(oOK9@qwrV5;ZJ=c|UxRtH zD;bFi1o(2Q?g+~u0GE7aA5Vy%3w1D>PW{e!aXqL@9VrtoT)Enm8IH%Vz#x-I0G>rT zYojtS+G9I|QO!z-J`2bEAR1x}K>J}^Jv_EV?oi{I-`cM6_ z^QX(-Nt!ZrN5P(j8>NM3p@1ho&fZ?YZ&}bQT#O7UP=rK*BZJ7A16K4p!X6Hq> z=aM=PcH-(DH&{GP{H&lOHI3zoF)h9zO@|4~jfZ^g%`VyYjjUbLnf_;*SQ=a~uW*v& zI!4mBKxS!_BtUP-k5Dgtr0{x*I8(mN~h-K(zI@lW4%!=&xrke!VmVss$T6@h<; zIXsYzm}Nt!qNJwGw2@Ei#t-gu2hxQ|6uVhFyB;U>bWrX_xN+PRnTcb&&GZzH%l$$C z^&AaCPJ}?6*idB?!dQ~4zELZ=+}vJOVxddtZl14)+_SSD67pyja(w8yKM)GaX<=@w z$T*(YI<{?m0u)DY%-LZyQ1r&IMs(cqfJj-0?{R903e6E)L-zyKayIc8d_9nWZ6my+Ku{LT{cJ9_AHRTQmnztFE!1sd6EIVhI7Ess57ZMMfiFFP=Cg{~TLm-8ACN@#>%sh**GSRydBv&av)}*d|*8 zi`}ZzjPet(R#fL{DqL3SXs~Jy=nPpZ{XJ z#8izO?I_syS>BYXk&;*K@J0%%%wYpX*#ACzInWf~3L4v7osMHRS~nj2lzD0pQIR{$ zPx1q)xIPMHyDt#=dYWHiD=tw%nz+5^ZhIMPln*3&9_bJD0GlCM$xZMaxg)p}5Poj@ zf$Z0cpZ8+(jW?Jf!KH@42m=58h1<+88nFaCb6vw>Yy))N|N8LCC@k~gi26tlFIRJG z=Ccqj9Y+kzN5A=y75JAxl^zuC+~Qf zQ9ts&%Ntc`k+VGDBSUl5_ur;x;Z^y%T~)b*Bpqy|qIetuJu~}dI7C4>IUpwN7QJ_V zCj7N~7>tAPBZAYP9=}1faA-{kb&w2b4R_tDaPkzkIpESGJ+UC}y~oBl56!yZQhz0* zjSTjcjMIf*p+p;cxiYKQe8uOrJdo=zoJ{)_zEJtvfGcCm(Umgsa`O^E2}^E7hn*J} zoQFC}jA$~B7&5&TO1B81>3$g!6#7WUAv?3Qp^vy+9=b8>E1Z%FnK+tmEgC*FV7mlR zzq$mV4UJWU5hF*^nM#jGSoJ|6wZsIO^%fwg-$-G6lxAZJ2+$7ONOke2A1s7{qhox593ec7s z89L+ce40F3uiyVJ1!^~Ns{~kwZR`v>87~$q11K2=|c2;&Hfr{(#SN zg)rntg4pqWt3%P}Bgz?0L4qbE@y2K)H90!sXGGMj#-O<{BSX^oLKOx!58B0fs{BS4 z9@PDojP7D2{uMA5tR&B$vcshnImxooebMhE^AUN#VP_i1a)$^mE3cfj*qY#7KJ9gw zR-<0NQvtrm8cvWtBU4*W#W5Mje_QXD54v@{GJ|P?1iN<&CNLRihpnV8dfrKQ5lw`15LAzx&}IA(^faGTnVo%lu!0^G%B71*3GI$;Eq#b}IR ztCxTX9Wx4QboSi9;wTCiUyhFDMwpJH7|zu+%wYBH zS{q3g3m5N%8bO6Ph8|P_Y(@$T{0dk*wcfl0IM_p;WoXunsML%Tu9B>z-BcEtxoMG; zM8Wv}M;`U5Hua(n(Rlpa2P-h^`;SMK9AMEA>=M9DV-N(^3f?y7Mct4(>V~HYGP46I zB!iUq0vU8Ypt1Ysxghy{L)^mfT~$aLVpg zCOwIYmBoH4zp|r?;#fBq=*o6rU2{hjeY#;-r#)m&HR(LVT=&OBRX{I zY1pehlPWC8$@Ck@859ERc>kXi7X4LG5>5wL4pkJEs=n798rxDxajiDa@#Sx%m;Xb| zg_h^`_b$E$XqJVPdCA}sCo z!Czqg;tnL@v}F?I84kYpf~+Q;GhH?0XuudhT%{n2EBR}!?ZJbl#1%qL+OxiZ+_8cg zkD1dyr$@FxZxSq@XT>cvYllm+aHdoLsx38BF~e$0>+V-3(t`B)S6tZY`|~o>&WE6d z{6ZX~FC2G}Mmo0_jh@(sAmRxba1uURIeF^?g4+RKe^r^I{m;|vv<+DVu-qyH(C#cB zfl<%*a%Bp=O_~ln)Gy`3Nu=rN;3WUl?2CMwssz8dC0XrtB%=^W5fT=5b2LK}pjaq> zXX~@$o0#sj8|GGyB=HFAqP;C;HGM4+mS7bSa zw<_g#_1(voRhmX@<_GalsZ;5;s+iYCvxYW$$~wc%MfW5FIipM`V1pE1KAJjWp|ToJ znu11WbDga2b0jnirNK$#B@?C6H~CiEB77iWtLXDWbBC09N>UNKgXuxHY*lEKUgk2) z?umK7w*`$634ye0UjIqZ;@U&H%9UM6`}74xzqYEgLT=tB{JUbNOvep{+aiwdr=_=^tkh;1T>=h0?G2X+)nb>is|s4E2Ac;}}Wver@f|(-Y6p zQ}f6rR-{uFmT)3b+XGAa7rDK6V6@yAcv;)dR$WI*`{-=ajNx0d-jtSJ6(O1X;Wk!D zSv8+qU#6a!)(rt6yoSIY*dzJvxb?BVPltvZvNcc?BzaUa2FTd1P~NU$Twu zSG0Fbo<)4g=S!n+OQN;oMBO74L!)_ zkf*=0xUKWL&#}4f*F%FZZ8Ywhx*dayns+C?R?c)<&R7ZxCBu?*-{B|gQol&&sQN*q z&3u>>37<{FQ|(ezci#<{W2*Ws3LG}T!irF(}!@Ohoyq-e@j7Evf;fWKZ} zqQDP%XxmZEVcXF;#Jug%6LX?P0j7r|a)NzGlX9W%(}b~CO>`rOuYxe^Sd+Bn4B^iS zpW~-vpv2Q|%bh9lZ&`&WT8cjh-PiGD8Qr#aX^SXWM(1M-)qZ2XFBq3g0GA130uu}I zzXV(;K=z3)0Xp(aJlmH5nYQTxA1=XEqP)ug!ITyY+qatM`ihe-%tb;ZCG7LPEv)dMGuX=ScLCHE}G(lYe^Y zN-hi{Le6C^N}{t$XS3+N!a7nuPOIl)H*KKlShm`02g52OGZGt!m_~!3#q;~X=K8Aw z#%A4)gZb_Q5RJXAREdJJ4gGYjOyVa3%ZHn!w;O^gR-Xg4^^H>Q)*zRQL>!U#Ad^ijJ9x2@c zIt!kz8g{e(d30=ilJE9oKQO69t&7+tnarA^ zUF9iB#Ou8sjX71TSqybbZ(9^OJ@w8KHYJ&J(SV*veqRT@dg1YK`|uJFhz1q8jboG- zh48$n)L;X?rhDJR^2a#TEJtBX^#Ynx+$#^L?lFBjiB{;v^X4e7sA}~^rxv08A#qdI zE5(i|KnGo%Z1Z<1d>=H-XwF1Ggm$Yt1xGplk77ygbq&KbJd_!sXO_Qg!e%i6)S3dG4ox2@wrOvIE*{;2;-fQ(rkeGTcilJR zB7{w)9<;JJ<3}L?;qazb&`U>n*RP#51p7TxO){N%*oN6gN7y zB&C!y%Z$Il?g;Cw@VT2M-L}YC?zBv2qY>$I#|sC+&j2=ul1h z9pqLkSK}}SQp{|iQRyhhjJv6CxZDtHR83lZqnNCIYA>@+&eX`Bxcz|4cj}LRzHtL4 zbhi|H{e~@7jKTHydzZT?{G~XY<^r@KNpSF+2GSWQ3m{7 zGnOqJ28$r_p!UIV$GmA%vKw=%$JMNfZSqN(XMU*29ne1!3%>=k_hhb`ghxepe*QQuCFNhNV2UtS#3%- zCB!pCk308>0%dVr|Cwlpjit*95&at`#ic8#G`XAWr~H=y=EJA~r|Ite&Rk7rcQ-^2 zMuC4EfvqJHSo*!6JuE8-%4~SD0&agPHt95g}EM>mr# zsIyOqZ@YEOu_Qf>xf!Q3>a+lpw99xyskY=yvLb@VNwySQ*!cNm7ipe_IJuCwPfahV zgX57J%N!rftXk8I1upmJ!e?wrkD2KajJiKcxyO^KSaJT`Bm0dT9FV-|cz- zmWTiJ#^1bg2q=$vn7HPZ)k%2l%u*Cid2{c>-jY<3efE{7-79`?G^<7G5AdS;V{%;a zy}qc%2vi^@E^dPO+))%~x*BJsQ;vn{;)Ne1?*hfzuilPDkPwijd5ztdHgHR!t!X>D z1dvTsQ;(cpw3;2srRFvep)-mu0iQk%%dnDX70+xihNhiXn+kkT z^GHg55g2UdCv6YeRCOM>dM;lMJrT}rrbfPEbwC+}BPJ^3INM*YQ=z?^sf1qRVq1Jq z%G>Lx8JfRp?)K34aX9RVYj?+Zvs6Q46oKI`UXizQF9EO3Ua1|?SDGq>%HN$ThIwM4 zzNBsIRKTm~Ae}Mb>7m(tf~L{*sd-E4n?qUJ1866+?$f;k^oW*(`MuUrsDF2{eGFo0 zbTyFcDSVncd@F_~$EJ>7GWxls4PXcrpJ?WbqzLD)@aG~arT8$jPUlexdOq6Uu8~$g z=JBW?C@i|PE1Nahbtww6dAfV+lCZZe;3=wDRb)tob%97RHJRyabHKoe-Zv28E6f%p)`k+Sj(Q6w<8Z1CaQrJBbNlOTCH46L+aD z+sr^dDkl!Ncyb!6w=8!{#}4MZv#z2eSy}AlIO@g-&Z`|5U(xwEcxiptP107|d7g-T zBHr9?NdYrTSKEK^Ov&KuFRF&~>sx4|AfbW!ejp{z}lbi*#Am+ zY+zHK3e15Rq%>NSs*9{K6Eba{Ja!a4coNF==6mhvB(<>3%*VjM-s`l(2BDb84OkU7 zivxWtb3F3661i&u{T*`X!5Y)fr28Yuj~3*G6~`b_GgSY z^zFa8U*O-n9-@`iYowzuA8py8YCb{~KCN0?&v>snZretl%OCQa?r~;fu#QEldKi`! zB7KPMK2pv%q-(Ap!H5)_D+HO)64x3!PO@?acu)t&y967`(_!%)hBo-Q`4+kfE_b7r za7vR(ljGCrN;&QW4xP@#&ub=kPIAq9-SDWco-coV;xN1;?c~Q%0m2^iA=UsBu+^y< zezo>6!da-u@R?>mt*104p<#fiH|NzhpfK1yX#Zlcd(WH)&J;(bNgQ>*Zg0CHPcTEE z)Fk^`?^ReSo!i}bQ=2DW`u*1?M(F4hHY6mzyYLs&pvvA?f79c< zu=`a{i;?&57vm|Tpu;HawFOwzWx+47Qp$T|9WPCe>D`rO89M*=#)sJx@kVTfHeZU0lUk;d<&$b$Jnq#2~Qtxdxu z&$7zExd=niVJ7{q4k^Uo#q=>zxdJq`8rCe!UCgM&Qt*DZ-N9){Qj{&BXO6!AIiVU; zFSDk5^1(d3MZV(z<3A!KuHhU`c)iAZd$r*!$3$nzm;I@lTTmOB4_Em^elML|4!KAS z4?Nozus|@;3Qt~LHkO0A^6$CJKl}Bc?ucbbes#y(R>+?(o8QJUnwWJ!F^c2*n@HB< z!qj7inrTfjkfw#x%U1g!8eQg3bU)OaB|#n)tNeV}O5}nGYQs}>bPjIX@DoyYr9eq) zUjjlx^1bAk<#iiI#mPjDZ0b!c;*F+5uNL}kRYY$+EZOGaox~$-JoUixIODPN>9nU1 z6X5ao_RI&X|uEN>Le`amb2e z+?TZlGQMu3M53^@>?Pnz<66Ro(DV90QhyhiuEUO#Ogqn1pCDkJ0l%Q6?P#s3jXk}( z?y$ud+sxq={3a+>#H3{FjRpY)gF%df zJnwQZ-4C(Y{OObr@Dz(20t;_J@lYu-1@>9=)+mAT)WvhPjYhL5`@J=KD2_`WVdP6=urdkY#NSQ2{v=rcAXtCW{Xgmc|32cApY_cD%6g_3 z1fd5LBQkx@s0~rjuvg`vTk_RVnBmR(zD0}u$qw-3^~JZ*1}3JeaWw>E%fp9Jj(3?H zflnhB4eDbll5+wdWVKibd!|{0k&PL~1~vKk;p|{zIoscPG~iw5usJd8>1=Y>e{a|t z+O8msb>=uTit7bt{dTH?r})8kcWl{Vxh+ELoDV+n#GZ}-DkyddAayW^XG`f+bWCCT z^)!Un3rjaF#wj{mgs`@X_Hhw(KDQN?nH&bMDU=^1`;`*AwqVQ0vaPfSe9 zj0Uf=42YM1uUQn(!6tf_G-iz$!{ULM)D4 z>1F55B>mRNF>4D^#W&Zj0>2r=f&Vlv-p@*Tcuoh2Jyl+*b6gyLKEz$u*s!v?_f>Vxtij(=LfU(nO8{$4-+<0E5+_uE1$$`R zt1Cw+hwA3q@~eDUDKu`>%|8SMe#DC7GPApAX-NA?#M<^6*7tD#PT%{tzU!wy{^5^n z|HPJ;t5|ma5)isM8L^IK90X6ZG=@xrF`6Tn0K_wU7K$+K(H(a(rAK~76?ES?={yiY z#aX_5dD2uRP3oU(71}FWGqF5QUfoKFf7bW}ChdtiF-nR8=2Z%RxjDf~Wl{es0xUB} zO#cZ7+b|3sUzm=Fp0nfrzC^N|0P|!lTI_0$Gn(ki5rW@sR;GCZ`6SrL=@a#>f=!9_ zt>e?Fri?gY_2a6(04bIGw;iD8K7zYFg=O34Lgsz_r!0{t6Uf-&5-)FzeG!w;jd=%y zHp|hPuDyK+w~vV>&mEHJnk92H2r{)CF5mL~uF-d8&}Huy0PUqNELB zl@2x*1^xOPP24)|N?m%3k10MkxGH1eBhQQ4cUaLjbaP@olJ6tNI?vwNwsR7!;a-4k z#nq9jNPRv9mLeE0tL$^TQEkJZb5DoK1%{Az0@qg!QwOgweuv$Atj4QtIrYbZgEU#2 zCsE4Y^ReC>UNi^bkIBX7&OpOo*M+ z>!Qe$i$GElxP4kpEs=atxmrZ2*n>1y<9=ZQxwd+uEAzF5;$Uz+l#Hu`Mv=FaO+udd zm#i{x?RY^b-MG>VC2OyD%-KX2?4Y$s>@EjAI`;=0di+~U?w|R$pUe4=<@__e{0uMu zozk73;pJy|`F{;B-sppz4TGt{a4{&k*<4`(GDdFd3v#ykraR=Cl`UnnPtbN9Y|89S zbfIP%dC7Hb%Bl1iW^ja!n;#vGe$+63YaaPC$ovd4|D9@>dsu;P+ddl_bkUwNe|j5~ z4Gjd#FAh*Vsc(eAP~W4d8T-~ojP92^JW<9YW9z#i0_f;tbqq3p9Dw@*|G~5|w!aV( z$4C)(bj~=Uf-WjuzhG}2Iqa!9rb8DS8q}V%E;xg}>-T@YLXr z21fowwDDxxeT}LH!rG2)UXaC<`85=xgEhtlq1$ERd>WgXazOTdCi`*K+9aG>H5@J` z{2MoJP&%B0!%(`&)S$yG28{9eGODnyVB>;@(T=W`o<8MxNb6;ZRV){YOG9mrkqo^1 zSqjgl?42id<6_eqXZK__HQpzBSxp(Z3X>M${q%6eQ5L6VbLuGJ1ZtP_RwwaO(|Iv-Nq(GR85Csvm1_p|VpCqfni~ zl3#hc9OXy+JUb;BKH!%SlBZc%UniBomIDxA&N<6P7liR>aEj;n#U2DML}k2wY&>3h zJXmwTpbIq(P4<={sWh7n)#u{j_vXo7@HGQt+Z^%hv8`IvXzNRWi~PBi*~Hk>|IZ1# KAB5oL-a%y*Xeo%4B~H`hO|R{+!xwRE)r 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 TF$E=B0$?TntNon#YyAHM*Or4> literal 0 HcmV?d00001 diff --git a/bsp/ch32v103/libraries/Core/core_riscv.c b/bsp/ch32v103/libraries/Core/core_riscv.c new file mode 100644 index 0000000000..63d6d39433 --- /dev/null +++ b/bsp/ch32v103/libraries/Core/core_riscv.c @@ -0,0 +1,380 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : core_riscv.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : RISC-V Core Peripheral Access Layer Source File +*******************************************************************************/ +#include + +/* define compiler specific symbols */ +#if defined ( __CC_ARM ) + #define __ASM __asm /*!< asm keyword for ARM Compiler */ + #define __INLINE __inline /*!< inline keyword for ARM Compiler */ + +#elif defined ( __ICCARM__ ) + #define __ASM __asm /*!< asm keyword for IAR Compiler */ + #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */ + +#elif defined ( __GNUC__ ) + #define __ASM __asm /*!< asm keyword for GNU Compiler */ + #define __INLINE inline /*!< inline keyword for GNU Compiler */ + +#elif defined ( __TASKING__ ) + #define __ASM __asm /*!< asm keyword for TASKING Compiler */ + #define __INLINE inline /*!< inline keyword for TASKING Compiler */ + +#endif + + +/** + * @brief Return the Floating-Point Accrued Exceptions + */ +uint32_t __get_FFLAGS(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "fflags" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Floating-Point Accrued Exceptions + */ +void __set_FFLAGS(uint32_t value) +{ + __ASM volatile ("csrw fflags, %0" : : "r" (value) ); +} + +/** + * @brief Return the Floating-Point Dynamic Rounding Mode + */ +uint32_t __get_FRM(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "frm" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Floating-Point Dynamic Rounding Mode + */ +void __set_FRM(uint32_t value) +{ + __ASM volatile ("csrw frm, %0" : : "r" (value) ); +} + +/** + * @brief Return the Floating-Point Control and Status Register + */ +uint32_t __get_FCSR(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "fcsr" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Floating-Point Control and Status Register + */ +void __set_FCSR(uint32_t value) +{ + __ASM volatile ("csrw fcsr, %0" : : "r" (value) ); +} + +/** + * @brief Return the Machine Status Register + */ +uint32_t __get_MSTATUS(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mstatus" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine Status Register + */ +void __set_MSTATUS(uint32_t value) +{ + __ASM volatile ("csrw mstatus, %0" : : "r" (value) ); +} + +/** + * @brief Return the Machine ISA Register + */ +uint32_t __get_MISA(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "misa" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine ISA Register + */ +void __set_MISA(uint32_t value) +{ + __ASM volatile ("csrw misa, %0" : : "r" (value) ); +} + +/** + * @brief Return the Machine Interrupt Enable Register + */ +uint32_t __get_MIE(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mie" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine ISA Register + */ +void __set_MIE(uint32_t value) +{ + __ASM volatile ("csrw mie, %0" : : "r" (value) ); +} + + +/** + * @brief Return the Machine Trap-Vector Base-Address Register + */ +uint32_t __get_MTVEC(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mtvec" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine Trap-Vector Base-Address Register + */ +void __set_MTVEC(uint32_t value) +{ + __ASM volatile ("csrw mtvec, %0" : : "r" (value) ); +} + +/** + * @brief Return the Machine Seratch Register + */ +uint32_t __get_MSCRATCH(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mscratch" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine Seratch Register + */ +void __set_MSCRATCH(uint32_t value) +{ + __ASM volatile ("csrw mscratch, %0" : : "r" (value) ); +} + +/** + * @brief Return the Machine Exception Program Register + */ +uint32_t __get_MEPC(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mepc" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine Exception Program Register + */ +void __set_MEPC(uint32_t value) +{ + __ASM volatile ("csrw mepc, %0" : : "r" (value) ); +} + +/** + * @brief Return the Machine Cause Register + */ +uint32_t __get_MCAUSE(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mcause" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine Cause Register + */ +void __set_MCAUSE(uint32_t value) +{ + __ASM volatile ("csrw mcause, %0" : : "r" (value) ); +} + +/** + * @brief Return the Machine Trap Value Register + */ +uint32_t __get_MTVAL(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mtval" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine Trap Value Register + */ +void __set_MTVAL(uint32_t value) +{ + __ASM volatile ("csrw mtval, %0" : : "r" (value) ); +} + +/** + * @brief Return the Machine Interrupt Pending Register + */ +uint32_t __get_MIP(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mip" : "=r" (result) ); + return (result); +} + +/** + * @brief Set the Machine Interrupt Pending Register + */ +void __set_MIP(uint32_t value) +{ + __ASM volatile ("csrw mip, %0" : : "r" (value) ); +} + +/** + * @brief Return Lower 32 bits of Cycle counter + */ +uint32_t __get_MCYCLE(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mcycle" : "=r" (result) ); + return (result); +} + +/** + * @brief Set Lower 32 bits of Cycle counter + */ +void __set_MCYCLE(uint32_t value) +{ + __ASM volatile ("csrw mcycle, %0" : : "r" (value) ); +} + +/** + * @brief Return Upper 32 bits of Cycle counter + */ +uint32_t __get_MCYCLEH(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mcycleh" : "=r" (result) ); + return (result); +} + +/** + * @brief Set Upper 32 bits of Cycle counter + */ +void __set_MCYCLEH(uint32_t value) +{ + __ASM volatile ("csrw mcycleh, %0" : : "r" (value) ); +} + +/** + * @brief Return Lower 32 bits of Instructions-retired counter + */ +uint32_t __get_MINSTRET(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "minstret" : "=r" (result) ); + return (result); +} + +/** + * @brief Set Lower 32 bits of Instructions-retired counter + */ +void __set_MINSTRET(uint32_t value) +{ + __ASM volatile ("csrw minstret, %0" : : "r" (value) ); +} + +/** + * @brief Return Upper 32 bits of Instructions-retired counter + */ +uint32_t __get_MINSTRETH(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "minstreth" : "=r" (result) ); + return (result); +} + +/** + * @brief Set Upper 32 bits of Instructions-retired counter + */ +void __set_MINSTRETH(uint32_t value) +{ + __ASM volatile ("csrw minstreth, %0" : : "r" (value) ); +} + +/** + * @brief Return Vendor ID Register + */ +uint32_t __get_MVENDORID(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mvendorid" : "=r" (result) ); + return (result); +} + +/** + * @brief Return Machine Architecture ID Register + */ +uint32_t __get_MARCHID(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "marchid" : "=r" (result) ); + return (result); +} + +/** + * @brief Return Machine Implementation ID Register + */ +uint32_t __get_MIMPID(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mimpid" : "=r" (result) ); + return (result); +} + +/** + * @brief Return Hart ID Register + */ +uint32_t __get_MHARTID(void) +{ + uint32_t result; + + __ASM volatile ( "csrr %0," "mhartid" : "=r" (result) ); + return (result); +} + + + diff --git a/bsp/ch32v103/libraries/Core/core_riscv.h b/bsp/ch32v103/libraries/Core/core_riscv.h new file mode 100644 index 0000000000..1b76b6e09f --- /dev/null +++ b/bsp/ch32v103/libraries/Core/core_riscv.h @@ -0,0 +1,303 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : core_riscv.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : RISC-V Core Peripheral Access Layer Header File +*******************************************************************************/ +#ifndef __CORE_RISCV_H__ +#define __CORE_RISCV_H__ + +/* IO definitions */ +#ifdef __cplusplus + #define __I volatile /*!< defines 'read only' permissions */ +#else + #define __I volatile const /*!< defines 'read only' permissions */ +#endif +#define __O volatile /*!< defines 'write only' permissions */ +#define __IO volatile /*!< defines 'read / write' permissions */ + +/* Standard Peripheral Library old types (maintained for legacy purpose) */ +typedef __I uint32_t vuc32; /* Read Only */ +typedef __I uint16_t vuc16; /* Read Only */ +typedef __I uint8_t vuc8; /* Read Only */ + +typedef const uint32_t uc32; /* Read Only */ +typedef const uint16_t uc16; /* Read Only */ +typedef const uint8_t uc8; /* Read Only */ + +typedef __I int32_t vsc32; /* Read Only */ +typedef __I int16_t vsc16; /* Read Only */ +typedef __I int8_t vsc8; /* Read Only */ + +typedef const int32_t sc32; /* Read Only */ +typedef const int16_t sc16; /* Read Only */ +typedef const int8_t sc8; /* Read Only */ + +typedef __IO uint32_t vu32; +typedef __IO uint16_t vu16; +typedef __IO uint8_t vu8; + +typedef uint32_t u32; +typedef uint16_t u16; +typedef uint8_t u8; + +typedef __IO int32_t vs32; +typedef __IO int16_t vs16; +typedef __IO int8_t vs8; + +typedef int32_t s32; +typedef int16_t s16; +typedef int8_t s8; + +typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; + +typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; + +typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; + +#define RV_STATIC_INLINE static inline + +/* memory mapped structure for Program Fast Interrupt Controller (PFIC) */ +typedef struct{ + __I uint32_t ISR[8]; + __I uint32_t IPR[8]; + __IO uint32_t ITHRESDR; + __IO uint32_t FIBADDRR; + __IO uint32_t CFGR; + __I uint32_t GISR; + uint8_t RESERVED0[0x10]; + __IO uint32_t FIOFADDRR[4]; + uint8_t RESERVED1[0x90]; + __O uint32_t IENR[8]; + uint8_t RESERVED2[0x60]; + __O uint32_t IRER[8]; + uint8_t RESERVED3[0x60]; + __O uint32_t IPSR[8]; + uint8_t RESERVED4[0x60]; + __O uint32_t IPRR[8]; + uint8_t RESERVED5[0x60]; + __IO uint32_t IACTR[8]; + uint8_t RESERVED6[0xE0]; + __IO uint8_t IPRIOR[256]; + uint8_t RESERVED7[0x810]; + __IO uint32_t SCTLR; +}PFIC_Type; + +/* memory mapped structure for SysTick */ +typedef struct +{ + __IO uint32_t CTLR; + __IO uint8_t CNTL0; + __IO uint8_t CNTL1; + __IO uint8_t CNTL2; + __IO uint8_t CNTL3; + __IO uint8_t CNTH0; + __IO uint8_t CNTH1; + __IO uint8_t CNTH2; + __IO uint8_t CNTH3; + __IO uint8_t CMPLR0; + __IO uint8_t CMPLR1; + __IO uint8_t CMPLR2; + __IO uint8_t CMPLR3; + __IO uint8_t CMPHR0; + __IO uint8_t CMPHR1; + __IO uint8_t CMPHR2; + __IO uint8_t CMPHR3; +}SysTick_Type; + + +#define PFIC ((PFIC_Type *) 0xE000E000 ) +#define NVIC PFIC +#define NVIC_KEY1 ((uint32_t)0xFA050000) +#define NVIC_KEY2 ((uint32_t)0xBCAF0000) +#define NVIC_KEY3 ((uint32_t)0xBEEF0000) + +#define SysTick ((SysTick_Type *) 0xE000F000) + +/* ########################## NVIC functions #################################### */ + +/******************************************************************************* +* Function Name : NVIC_EnableIRQ +* Description : Enable Interrupt +* Input : IRQn: Interrupt Numbers +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn){ + NVIC->IENR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + +/******************************************************************************* +* Function Name : NVIC_DisableIRQ +* Description : Disable Interrupt +* Input : IRQn: Interrupt Numbers +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) +{ + NVIC->IRER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + +/******************************************************************************* +* Function Name : NVIC_GetStatusIRQ +* Description : Get Interrupt Enable State +* Input : IRQn: Interrupt Numbers +* Return : 1: Interrupt Enable +* 0: Interrupt Disable +*******************************************************************************/ +RV_STATIC_INLINE uint32_t NVIC_GetStatusIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->ISR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + +/******************************************************************************* +* Function Name : NVIC_GetPendingIRQ +* Description : Get Interrupt Pending State +* Input : IRQn: Interrupt Numbers +* Return : 1: Interrupt Pending Enable +* 0: Interrupt Pending Disable +*******************************************************************************/ +RV_STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + return((uint32_t) ((NVIC->IPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + +/******************************************************************************* +* Function Name : NVIC_SetPendingIRQ +* Description : Set Interrupt Pending +* Input : IRQn: Interrupt Numbers +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + NVIC->IPSR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + +/******************************************************************************* +* Function Name : NVIC_ClearPendingIRQ +* Description : Clear Interrupt Pending +* Input : IRQn: Interrupt Numbers +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + NVIC->IPRR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); +} + +/******************************************************************************* +* Function Name : NVIC_GetActive +* Description : Get Interrupt Active State +* Input : IRQn: Interrupt Numbers +* Return : 1: Interrupt Active +* 0: Interrupt No Active +*******************************************************************************/ +RV_STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) +{ + return((uint32_t)((NVIC->IACTR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); +} + +/******************************************************************************* +* Function Name : NVIC_SetPriority +* Description : Set Interrupt Priority +* Input : IRQn: Interrupt Numbers +* priority: bit7:pre-emption priority +* bit6-bit4: subpriority +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint8_t priority) +{ + NVIC->IPRIOR[(uint32_t)(IRQn)] = priority; +} + +/******************************************************************************* +* Function Name : __WFI +* Description : Wait for Interrupt +* Input : None +* Return : None +*******************************************************************************/ +__attribute__( ( always_inline ) ) RV_STATIC_INLINE void __WFI(void) +{ + NVIC->SCTLR &= ~(1<<3); // wfi + asm volatile ("wfi"); +} + +/******************************************************************************* +* Function Name : __WFE +* Description : Wait for Events +* Input : None +* Return : None +*******************************************************************************/ +__attribute__( ( always_inline ) ) RV_STATIC_INLINE void __WFE(void) +{ + NVIC->SCTLR |= (1<<3)|(1<<5); // (wfi->wfe)+(__sev) + asm volatile ("wfi"); + NVIC->SCTLR |= (1<<3); + asm volatile ("wfi"); +} + +/******************************************************************************* +* Function Name : NVIC_SetFastIRQ +* Description : Set Fast Interrupt +* Input : addrFast interrupt service function base address. +* IRQnInterrupt Numbers +* numFast Interrupt Numbers +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_SetFastIRQ(uint32_t addr, IRQn_Type IRQn, uint8_t num){ + if(num > 3) return ; + NVIC->FIBADDRR = addr; + NVIC->FIOFADDRR[num] = ((uint32_t)IRQn<<24)|(addr&0xfffff); +} + +/******************************************************************************* +* Function Name : NVIC_SystemReset +* Description : Initiate a system reset request +* Input : None +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_SystemReset(void) +{ + NVIC->CFGR = NVIC_KEY3|(1<<7); +} + +/******************************************************************************* +* Function Name : NVIC_HaltPushCfg +* Description : Enable Hardware Stack +* Input : NewState: DISABLE or ENABLE +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_HaltPushCfg(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + NVIC->CFGR = NVIC_KEY1; + } + else{ + NVIC->CFGR = NVIC_KEY1|(1<<0); + } +} + +/******************************************************************************* +* Function Name : NVIC_INTNestCfg +* Description : Enable Interrupt Nesting +* Input : NewState: DISABLE or ENABLE +* Return : None +*******************************************************************************/ +RV_STATIC_INLINE void NVIC_INTNestCfg(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + NVIC->CFGR = NVIC_KEY1; + } + else + { + NVIC->CFGR = NVIC_KEY1|(1<<1); + } +} + +#endif/* __CORE_RISCV_H__ */ + + + + + diff --git a/bsp/ch32v103/libraries/SConscript b/bsp/ch32v103/libraries/SConscript new file mode 100644 index 0000000000..2a59d8e51f --- /dev/null +++ b/bsp/ch32v103/libraries/SConscript @@ -0,0 +1,25 @@ +# RT-Thread building script for component + +Import('rtconfig') +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() + +src = Glob('WCH32V103_std_peripheral/src/*.c') +#src += Glob('n22/stubs/*.c') +src += ['WCH32V103_std_peripheral/system_ch32v10x.c', + 'WCH32V103_std_peripheral/ch32v10x_it.c', + 'Core/core_riscv.c', + 'Startup/startup_ch32v10x.s'] + +CPPPATH = [ cwd + '/WCH32V103_std_peripheral/inc', + cwd + '/WCH32V103_std_peripheral', + cwd + '/Core'] + + +CPPDEFINES = [] + +group = DefineGroup('Libraries', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES) + +Return('group') diff --git a/bsp/ch32v103/libraries/Startup/startup_ch32v10x.S b/bsp/ch32v103/libraries/Startup/startup_ch32v10x.S new file mode 100644 index 0000000000..bc436cbd82 --- /dev/null +++ b/bsp/ch32v103/libraries/Startup/startup_ch32v10x.S @@ -0,0 +1,187 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : startup_ch32v10x.s +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : CH32V10x vector table for eclipse toolchain. +*******************************************************************************/ + + .section .init,"ax",@progbits + .global _start + .align 1 +_start: + j handle_reset + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00000013 + .word 0x00100073 + .section .vector,"ax",@progbits + .align 1 +_vector_base: + .option norvc; + j _start + .word 0 + j NMI_Handler /* NMI Handler */ + j HardFault_Handler /* Hard Fault Handler */ + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + j SysTick_Handler /* SysTick Handler */ + .word 0 + j SW_handler /* SW Handler */ + .word 0 + /* External Interrupts */ + j WWDG_IRQHandler /* Window Watchdog */ + j PVD_IRQHandler /* PVD through EXTI Line detect */ + j TAMPER_IRQHandler /* TAMPER */ + j RTC_IRQHandler /* RTC */ + j FLASH_IRQHandler /* Flash */ + j RCC_IRQHandler /* RCC */ + j EXTI0_IRQHandler /* EXTI Line 0 */ + j EXTI1_IRQHandler /* EXTI Line 1 */ + j EXTI2_IRQHandler /* EXTI Line 2 */ + j EXTI3_IRQHandler /* EXTI Line 3 */ + j EXTI4_IRQHandler /* EXTI Line 4 */ + j DMA1_Channel1_IRQHandler /* DMA1 Channel 1 */ + j DMA1_Channel2_IRQHandler /* DMA1 Channel 2 */ + j DMA1_Channel3_IRQHandler /* DMA1 Channel 3 */ + j DMA1_Channel4_IRQHandler /* DMA1 Channel 4 */ + j DMA1_Channel5_IRQHandler /* DMA1 Channel 5 */ + j DMA1_Channel6_IRQHandler /* DMA1 Channel 6 */ + j DMA1_Channel7_IRQHandler /* DMA1 Channel 7 */ + j ADC1_2_IRQHandler /* ADC1_2 */ + .word 0 + .word 0 + .word 0 + .word 0 + j EXTI9_5_IRQHandler /* EXTI Line 9..5 */ + j TIM1_BRK_IRQHandler /* TIM1 Break */ + j TIM1_UP_IRQHandler /* TIM1 Update */ + j TIM1_TRG_COM_IRQHandler /* TIM1 Trigger and Commutation */ + j TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + j TIM2_IRQHandler /* TIM2 */ + j TIM3_IRQHandler /* TIM3 */ + j TIM4_IRQHandler /* TIM4 */ + j I2C1_EV_IRQHandler /* I2C1 Event */ + j I2C1_ER_IRQHandler /* I2C1 Error */ + j I2C2_EV_IRQHandler /* I2C2 Event */ + j I2C2_ER_IRQHandler /* I2C2 Error */ + j SPI1_IRQHandler /* SPI1 */ + j SPI2_IRQHandler /* SPI2 */ + j USART1_IRQHandler /* USART1 */ + j USART2_IRQHandler /* USART2 */ + j USART3_IRQHandler /* USART3 */ + j EXTI15_10_IRQHandler /* EXTI Line 15..10 */ + j RTCAlarm_IRQHandler /* RTC Alarm through EXTI Line */ + j USBWakeUp_IRQHandler /* USB Wakeup from suspend */ + j USBHD_IRQHandler /* USBHD */ + + .option rvc; + + .section .text.vector_handler, "ax", @progbits + .weak NMI_Handler + .weak HardFault_Handler + .weak SysTick_Handler + .weak SW_handler + .weak WWDG_IRQHandler + .weak PVD_IRQHandler + .weak TAMPER_IRQHandler + .weak RTC_IRQHandler + .weak FLASH_IRQHandler + .weak RCC_IRQHandler + .weak EXTI0_IRQHandler + .weak EXTI1_IRQHandler + .weak EXTI2_IRQHandler + .weak EXTI3_IRQHandler + .weak EXTI4_IRQHandler + .weak DMA1_Channel1_IRQHandler + .weak DMA1_Channel2_IRQHandler + .weak DMA1_Channel3_IRQHandler + .weak DMA1_Channel4_IRQHandler + .weak DMA1_Channel5_IRQHandler + .weak DMA1_Channel6_IRQHandler + .weak DMA1_Channel7_IRQHandler + .weak ADC1_2_IRQHandler + .weak EXTI9_5_IRQHandler + .weak TIM1_BRK_IRQHandler + .weak TIM1_UP_IRQHandler + .weak TIM1_TRG_COM_IRQHandler + .weak TIM1_CC_IRQHandler + .weak TIM2_IRQHandler + .weak TIM3_IRQHandler + .weak TIM4_IRQHandler + .weak I2C1_EV_IRQHandler + .weak I2C1_ER_IRQHandler + .weak I2C2_EV_IRQHandler + .weak I2C2_ER_IRQHandler + .weak SPI1_IRQHandler + .weak SPI2_IRQHandler + .weak USART1_IRQHandler + .weak USART2_IRQHandler + .weak USART3_IRQHandler + .weak EXTI15_10_IRQHandler + .weak RTCAlarm_IRQHandler + .weak USBWakeUp_IRQHandler + .weak USBHD_IRQHandler + + .section .text.handle_reset,"ax",@progbits + .weak handle_reset + .align 1 +handle_reset: +.option push +.option norelax + la gp, __global_pointer$ +.option pop +1: + la sp, _eusrstack +2: + /* Load data section from flash to RAM */ + la a0, _data_lma + la a1, _data_vma + la a2, _edata + bgeu a1, a2, 2f +1: + lw t0, (a0) + sw t0, (a1) + addi a0, a0, 4 + addi a1, a1, 4 + bltu a1, a2, 1b +2: + /* clear bss section */ + la a0, _sbss + la a1, _ebss + bgeu a0, a1, 2f +1: + sw zero, (a0) + addi a0, a0, 4 + bltu a0, a1, 1b +2: + /* enable all interrupt */ +# li t0, 0x88 + li t0, 0x1888 + csrs mstatus, t0 + la t0, _vector_base + ori t0, t0, 1 + csrw mtvec, t0 + + jal SystemInit /* ϵͳʱӳʼ */ + #la t0, main + la t0,entry /* rtt */ + csrw mepc, t0 + mret + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_conf.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_conf.h new file mode 100644 index 0000000000..c75bc99588 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_conf.h @@ -0,0 +1,39 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_conf.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : Library configuration file. +*******************************************************************************/ +#ifndef __CH32V10x_CONF_H +#define __CH32V10x_CONF_H + +#include "ch32v10x_adc.h" +#include "ch32v10x_bkp.h" +#include "ch32v10x_crc.h" +#include "ch32v10x_dbgmcu.h" +#include "ch32v10x_dma.h" +#include "ch32v10x_exti.h" +#include "ch32v10x_flash.h" +#include "ch32v10x_gpio.h" +#include "ch32v10x_i2c.h" +#include "ch32v10x_iwdg.h" +#include "ch32v10x_pwr.h" +#include "ch32v10x_rcc.h" +#include "ch32v10x_rtc.h" +#include "ch32v10x_spi.h" +#include "ch32v10x_tim.h" +#include "ch32v10x_usart.h" +#include "ch32v10x_wwdg.h" +#include "ch32v10x_usb.h" +#include "ch32v10x_usb_host.h" +#include "ch32v10x_it.h" +#include "ch32v10x_misc.h" + + +#endif /* __CH32V10x_CONF_H */ + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_it.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_it.c new file mode 100644 index 0000000000..07d0a304ab --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_it.c @@ -0,0 +1,50 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_it.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : Main Interrupt Service Routines. +*******************************************************************************/ +#include "ch32v10x_it.h" +#include "board.h" +#include + +void NMI_Handler(void) __attribute__((interrupt())); +void HardFault_Handler(void) __attribute__((interrupt())); + +/******************************************************************************* +* Function Name : NMI_Handler +* Description : This function handles NMI exception. +* Input : None +* Return : None +*******************************************************************************/ +void NMI_Handler(void) +{ + GET_INT_SP(); + rt_interrupt_enter(); + + rt_kprintf(" NMI Handler\r\n"); + + rt_interrupt_leave(); + FREE_INT_SP(); +} + +/******************************************************************************* +* Function Name : HardFault_Handler +* Description : This function handles Hard Fault exception. +* Input : None +* Return : None +*******************************************************************************/ +void HardFault_Handler(void) +{ + GET_INT_SP(); + rt_interrupt_enter(); + + rt_kprintf(" hardfult\r\n"); + rt_interrupt_leave(); + FREE_INT_SP(); + + +} + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_it.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_it.h new file mode 100644 index 0000000000..0f65df7a81 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/ch32v10x_it.h @@ -0,0 +1,17 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_it.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains the headers of the interrupt handlers. +*******************************************************************************/ +#ifndef __CH32V10x_IT_H +#define __CH32V10x_IT_H + + +#define GET_INT_SP() asm("csrrw sp,mscratch,sp") +#define FREE_INT_SP() asm("csrrw sp,mscratch,sp") + +#endif /* __CH32V10x_IT_H */ + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/debug.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/debug.c new file mode 100644 index 0000000000..4ff40007d3 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/debug.c @@ -0,0 +1,162 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : debug.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for UART +* Printf , Delay functions. +*******************************************************************************/ +#include "debug.h" + +static uint8_t p_us=0; +static uint16_t p_ms=0; + +/******************************************************************************* +* Function Name : Delay_Init +* Description : Initializes Delay Funcation. +* Input : None +* Return : None +*******************************************************************************/ +void Delay_Init(void) +{ + p_us=SystemCoreClock/8000000; + p_ms=(uint16_t)p_us*1000; +} + +/******************************************************************************* +* Function Name : Delay_Us +* Description : Microsecond Delay Time. +* Input : nMicrosecond number. +* Return : None +*******************************************************************************/ +void Delay_Us(uint32_t n) +{ + uint32_t i; + + SysTick->CTLR = 0; + i = (uint32_t)n*p_us; + + SysTick->CNTL0 = 0; + SysTick->CNTL1 = 0; + SysTick->CNTL2 = 0; + SysTick->CNTL3 = 0; + SysTick->CTLR = 1; + + while((*(__IO uint32_t*)0xE000F004) <= i); + +} + +/******************************************************************************* +* Function Name : Delay_Ms +* Description : Millisecond Delay Time. +* Input : nMillisecond number. +* Return : None +*******************************************************************************/ +void Delay_Ms (uint32_t n) +{ + uint32_t i; + + SysTick->CTLR = 0; + i = (uint32_t)n*p_ms; + + SysTick->CNTL0 = 0; + SysTick->CNTL1 = 0; + SysTick->CNTL2 = 0; + SysTick->CNTL3 = 0; + SysTick->CTLR = 1; + + while((*(__IO uint32_t*)0xE000F004) <= i); +} + +/******************************************************************************* +* Function Name : USART_Printf_Init +* Description : Initializes the USARTx peripheral. +* Input : baudrate: USART communication baud rate. +* Return : None +*******************************************************************************/ +void USART_Printf_Init(uint32_t baudrate) +{ + GPIO_InitTypeDef GPIO_InitStructure; + USART_InitTypeDef USART_InitStructure; + +#if (DEBUG == DEBUG_UART1) + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + +#elif (DEBUG == DEBUG_UART2) + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOA, &GPIO_InitStructure); + +#elif (DEBUG == DEBUG_UART3) + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_Init(GPIOB, &GPIO_InitStructure); + +#endif + + USART_InitStructure.USART_BaudRate = baudrate; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Tx; + +#if (DEBUG == DEBUG_UART1) + USART_Init(USART1, &USART_InitStructure); + USART_Cmd(USART1, ENABLE); + +#elif (DEBUG == DEBUG_UART2) + USART_Init(USART2, &USART_InitStructure); + USART_Cmd(USART2, ENABLE); + +#elif (DEBUG == DEBUG_UART3) + USART_Init(USART3, &USART_InitStructure); + USART_Cmd(USART3, ENABLE); + +#endif +} + +/******************************************************************************* +* Function Name : _write +* Description : Support Printf Function +* Input : *buf: UART send Data. +* size: Data length +* Return : size: Data length +*******************************************************************************/ +int _write(int fd, char *buf, int size) +{ + int i; + + for(i=0; i +#include "core_riscv.h" +#include "system_ch32v10x.h" + + +/* Standard Peripheral Library old definitions (maintained for legacy purpose) */ +#define HSI_Value HSI_VALUE +#define HSE_Value HSE_VALUE +#define HSEStartUp_TimeOut HSE_STARTUP_TIMEOUT + +/* Analog to Digital Converter */ +typedef struct +{ + __IO uint32_t STATR; + __IO uint32_t CTLR1; + __IO uint32_t CTLR2; + __IO uint32_t SAMPTR1; + __IO uint32_t SAMPTR2; + __IO uint32_t IOFR1; + __IO uint32_t IOFR2; + __IO uint32_t IOFR3; + __IO uint32_t IOFR4; + __IO uint32_t WDHTR; + __IO uint32_t WDLTR; + __IO uint32_t RSQR1; + __IO uint32_t RSQR2; + __IO uint32_t RSQR3; + __IO uint32_t ISQR; + __IO uint32_t IDATAR1; + __IO uint32_t IDATAR2; + __IO uint32_t IDATAR3; + __IO uint32_t IDATAR4; + __IO uint32_t RDATAR; +} ADC_TypeDef; + +/* Backup Registers */ +typedef struct +{ + uint32_t RESERVED0; + __IO uint16_t DATAR1; + uint16_t RESERVED1; + __IO uint16_t DATAR2; + uint16_t RESERVED2; + __IO uint16_t DATAR3; + uint16_t RESERVED3; + __IO uint16_t DATAR4; + uint16_t RESERVED4; + __IO uint16_t DATAR5; + uint16_t RESERVED5; + __IO uint16_t DATAR6; + uint16_t RESERVED6; + __IO uint16_t DATAR7; + uint16_t RESERVED7; + __IO uint16_t DATAR8; + uint16_t RESERVED8; + __IO uint16_t DATAR9; + uint16_t RESERVED9; + __IO uint16_t DATAR10; + uint16_t RESERVED10; + __IO uint16_t OCTLR; + uint16_t RESERVED11; + __IO uint16_t TPCTLR; + uint16_t RESERVED12; + __IO uint16_t TPCSR; + uint16_t RESERVED13[5]; + __IO uint16_t DATAR11; + uint16_t RESERVED14; + __IO uint16_t DATAR12; + uint16_t RESERVED15; + __IO uint16_t DATAR13; + uint16_t RESERVED16; + __IO uint16_t DATAR14; + uint16_t RESERVED17; + __IO uint16_t DATAR15; + uint16_t RESERVED18; + __IO uint16_t DATAR16; + uint16_t RESERVED19; + __IO uint16_t DATAR17; + uint16_t RESERVED20; + __IO uint16_t DATAR18; + uint16_t RESERVED21; + __IO uint16_t DATAR19; + uint16_t RESERVED22; + __IO uint16_t DATAR20; + uint16_t RESERVED23; + __IO uint16_t DATAR21; + uint16_t RESERVED24; + __IO uint16_t DATAR22; + uint16_t RESERVED25; + __IO uint16_t DATAR23; + uint16_t RESERVED26; + __IO uint16_t DATAR24; + uint16_t RESERVED27; + __IO uint16_t DATAR25; + uint16_t RESERVED28; + __IO uint16_t DATAR26; + uint16_t RESERVED29; + __IO uint16_t DATAR27; + uint16_t RESERVED30; + __IO uint16_t DATAR28; + uint16_t RESERVED31; + __IO uint16_t DATAR29; + uint16_t RESERVED32; + __IO uint16_t DATAR30; + uint16_t RESERVED33; + __IO uint16_t DATAR31; + uint16_t RESERVED34; + __IO uint16_t DATAR32; + uint16_t RESERVED35; + __IO uint16_t DATAR33; + uint16_t RESERVED36; + __IO uint16_t DATAR34; + uint16_t RESERVED37; + __IO uint16_t DATAR35; + uint16_t RESERVED38; + __IO uint16_t DATAR36; + uint16_t RESERVED39; + __IO uint16_t DATAR37; + uint16_t RESERVED40; + __IO uint16_t DATAR38; + uint16_t RESERVED41; + __IO uint16_t DATAR39; + uint16_t RESERVED42; + __IO uint16_t DATAR40; + uint16_t RESERVED43; + __IO uint16_t DATAR41; + uint16_t RESERVED44; + __IO uint16_t DATAR42; + uint16_t RESERVED45; +} BKP_TypeDef; + +/* CRC Calculation Unit */ +typedef struct +{ + __IO uint32_t DATAR; + __IO uint8_t IDATAR; + uint8_t RESERVED0; + uint16_t RESERVED1; + __IO uint32_t CTLR; +} CRC_TypeDef; + +/* Digital to Analog Converter */ +typedef struct +{ + __IO uint32_t CTLR; + __IO uint32_t SWTR; + __IO uint32_t R12BDHR1; + __IO uint32_t L12BDHR1; + __IO uint32_t R8BDHR1; + __IO uint32_t R12BDHR2; + __IO uint32_t L12BDHR2; + __IO uint32_t R8BDHR2; + __IO uint32_t RD12BDHR; + __IO uint32_t LD12BDHR; + __IO uint32_t RD8BDHR; + __IO uint32_t DOR1; + __IO uint32_t DOR2; +} DAC_TypeDef; + +/* Debug MCU */ +typedef struct +{ + __IO uint32_t CFGR0; + __IO uint32_t CFGR1; +}DBGMCU_TypeDef; + +/* DMA Controller */ +typedef struct +{ + __IO uint32_t CFGR; + __IO uint32_t CNTR; + __IO uint32_t PADDR; + __IO uint32_t MADDR; +} DMA_Channel_TypeDef; + +typedef struct +{ + __IO uint32_t INTFR; + __IO uint32_t INTFCR; +} DMA_TypeDef; + +/* External Interrupt/Event Controller */ +typedef struct +{ + __IO uint32_t INTENR; + __IO uint32_t EVENR; + __IO uint32_t RTENR; + __IO uint32_t FTENR; + __IO uint32_t SWIEVR; + __IO uint32_t INTFR; +} EXTI_TypeDef; + +/* FLASH Registers */ +typedef struct +{ + __IO uint32_t ACTLR; + __IO uint32_t KEYR; + __IO uint32_t OBKEYR; + __IO uint32_t STATR; + __IO uint32_t CTLR; + __IO uint32_t ADDR; + __IO uint32_t RESERVED; + __IO uint32_t OBR; + __IO uint32_t WPR; + __IO uint32_t MODEKEYR; +} FLASH_TypeDef; + +/* Option Bytes Registers */ +typedef struct +{ + __IO uint16_t RDPR; + __IO uint16_t USER; + __IO uint16_t Data0; + __IO uint16_t Data1; + __IO uint16_t WRPR0; + __IO uint16_t WRPR1; + __IO uint16_t WRPR2; + __IO uint16_t WRPR3; +} OB_TypeDef; + +/* General Purpose I/O */ +typedef struct +{ + __IO uint32_t CFGLR; + __IO uint32_t CFGHR; + __IO uint32_t INDR; + __IO uint32_t OUTDR; + __IO uint32_t BSHR; + __IO uint32_t BCR; + __IO uint32_t LCKR; +} GPIO_TypeDef; + +/* Alternate Function I/O */ +typedef struct +{ + __IO uint32_t ECR; + __IO uint32_t PCFR1; + __IO uint32_t EXTICR[4]; + uint32_t RESERVED0; + __IO uint32_t PCFR2; +} AFIO_TypeDef; + +/* Inter Integrated Circuit Interface */ +typedef struct +{ + __IO uint16_t CTLR1; + uint16_t RESERVED0; + __IO uint16_t CTLR2; + uint16_t RESERVED1; + __IO uint16_t OADDR1; + uint16_t RESERVED2; + __IO uint16_t OADDR2; + uint16_t RESERVED3; + __IO uint16_t DATAR; + uint16_t RESERVED4; + __IO uint16_t STAR1; + uint16_t RESERVED5; + __IO uint16_t STAR2; + uint16_t RESERVED6; + __IO uint16_t CKCFGR; + uint16_t RESERVED7; + __IO uint16_t RTR; + uint16_t RESERVED8; +} I2C_TypeDef; + +/* Independent WatchDog */ +typedef struct +{ + __IO uint32_t CTLR; + __IO uint32_t PSCR; + __IO uint32_t RLDR; + __IO uint32_t STATR; +} IWDG_TypeDef; + +/* Power Control */ +typedef struct +{ + __IO uint32_t CTLR; + __IO uint32_t CSR; +} PWR_TypeDef; + +/* Reset and Clock Control */ +typedef struct +{ + __IO uint32_t CTLR; + __IO uint32_t CFGR0; + __IO uint32_t INTR; + __IO uint32_t APB2PRSTR; + __IO uint32_t APB1PRSTR; + __IO uint32_t AHBPCENR; + __IO uint32_t APB2PCENR; + __IO uint32_t APB1PCENR; + __IO uint32_t BDCTLR; + __IO uint32_t RSTSCKR; +} RCC_TypeDef; + +/* Real-Time Clock */ +typedef struct +{ + __IO uint16_t CTLRH; + uint16_t RESERVED0; + __IO uint16_t CTLRL; + uint16_t RESERVED1; + __IO uint16_t PSCRH; + uint16_t RESERVED2; + __IO uint16_t PSCRL; + uint16_t RESERVED3; + __IO uint16_t DIVH; + uint16_t RESERVED4; + __IO uint16_t DIVL; + uint16_t RESERVED5; + __IO uint16_t CNTH; + uint16_t RESERVED6; + __IO uint16_t CNTL; + uint16_t RESERVED7; + __IO uint16_t ALRMH; + uint16_t RESERVED8; + __IO uint16_t ALRML; + uint16_t RESERVED9; +} RTC_TypeDef; + +/* Serial Peripheral Interface */ +typedef struct +{ + __IO uint16_t CTLR1; + uint16_t RESERVED0; + __IO uint16_t CTLR2; + uint16_t RESERVED1; + __IO uint16_t STATR; + uint16_t RESERVED2; + __IO uint16_t DATAR; + uint16_t RESERVED3; + __IO uint16_t CRCR; + uint16_t RESERVED4; + __IO uint16_t RCRCR; + uint16_t RESERVED5; + __IO uint16_t TCRCR; + uint16_t RESERVED6; + __IO uint16_t I2SCFGR; + uint16_t RESERVED7; + __IO uint16_t I2SPR; + uint16_t RESERVED8; +} SPI_TypeDef; + +/* TIM */ +typedef struct +{ + __IO uint16_t CTLR1; + uint16_t RESERVED0; + __IO uint16_t CTLR2; + uint16_t RESERVED1; + __IO uint16_t SMCFGR; + uint16_t RESERVED2; + __IO uint16_t DMAINTENR; + uint16_t RESERVED3; + __IO uint16_t INTFR; + uint16_t RESERVED4; + __IO uint16_t SWEVGR; + uint16_t RESERVED5; + __IO uint16_t CHCTLR1; + uint16_t RESERVED6; + __IO uint16_t CHCTLR2; + uint16_t RESERVED7; + __IO uint16_t CCER; + uint16_t RESERVED8; + __IO uint16_t CNT; + uint16_t RESERVED9; + __IO uint16_t PSC; + uint16_t RESERVED10; + __IO uint16_t ATRLR; + uint16_t RESERVED11; + __IO uint16_t RPTCR; + uint16_t RESERVED12; + __IO uint16_t CH1CVR; + uint16_t RESERVED13; + __IO uint16_t CH2CVR; + uint16_t RESERVED14; + __IO uint16_t CH3CVR; + uint16_t RESERVED15; + __IO uint16_t CH4CVR; + uint16_t RESERVED16; + __IO uint16_t BDTR; + uint16_t RESERVED17; + __IO uint16_t DMACFGR; + uint16_t RESERVED18; + __IO uint16_t DMAADR; + uint16_t RESERVED19; +} TIM_TypeDef; + +/* Universal Synchronous Asynchronous Receiver Transmitter */ +typedef struct +{ + __IO uint16_t STATR; + uint16_t RESERVED0; + __IO uint16_t DATAR; + uint16_t RESERVED1; + __IO uint16_t BRR; + uint16_t RESERVED2; + __IO uint16_t CTLR1; + uint16_t RESERVED3; + __IO uint16_t CTLR2; + uint16_t RESERVED4; + __IO uint16_t CTLR3; + uint16_t RESERVED5; + __IO uint16_t GPR; + uint16_t RESERVED6; +} USART_TypeDef; + +/* Window WatchDog */ +typedef struct +{ + __IO uint32_t CTLR; + __IO uint32_t CFGR; + __IO uint32_t STATR; +} WWDG_TypeDef; + +/* Enhanced Registers */ +typedef struct +{ + __IO uint32_t EXTEN_CTR; +} EXTEN_TypeDef; + + +/* Peripheral memory map */ +#define FLASH_BASE ((uint32_t)0x08000000) /* FLASH base address in the alias region */ +#define SRAM_BASE ((uint32_t)0x20000000) /* SRAM base address in the alias region */ +#define PERIPH_BASE ((uint32_t)0x40000000) /* Peripheral base address in the alias region */ + + +#define APB1PERIPH_BASE (PERIPH_BASE) +#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) +#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) + +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800) +#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00) +#define TIM6_BASE (APB1PERIPH_BASE + 0x1000) +#define TIM7_BASE (APB1PERIPH_BASE + 0x1400) +#define TIM12_BASE (APB1PERIPH_BASE + 0x1800) +#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00) +#define TIM14_BASE (APB1PERIPH_BASE + 0x2000) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800) +#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400) +#define USART3_BASE (APB1PERIPH_BASE + 0x4800) +#define UART4_BASE (APB1PERIPH_BASE + 0x4C00) +#define UART5_BASE (APB1PERIPH_BASE + 0x5000) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800) +#define BKP_BASE (APB1PERIPH_BASE + 0x6C00) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000) +#define DAC_BASE (APB1PERIPH_BASE + 0x7400) + +#define AFIO_BASE (APB2PERIPH_BASE + 0x0000) +#define EXTI_BASE (APB2PERIPH_BASE + 0x0400) +#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) +#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) +#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) +#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) +#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800) +#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00) +#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000) +#define ADC1_BASE (APB2PERIPH_BASE + 0x2400) +#define ADC2_BASE (APB2PERIPH_BASE + 0x2800) +#define TIM1_BASE (APB2PERIPH_BASE + 0x2C00) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000) +#define TIM8_BASE (APB2PERIPH_BASE + 0x3400) +#define USART1_BASE (APB2PERIPH_BASE + 0x3800) +#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00) +#define TIM15_BASE (APB2PERIPH_BASE + 0x4000) +#define TIM16_BASE (APB2PERIPH_BASE + 0x4400) +#define TIM17_BASE (APB2PERIPH_BASE + 0x4800) +#define TIM9_BASE (APB2PERIPH_BASE + 0x4C00) +#define TIM10_BASE (APB2PERIPH_BASE + 0x5000) +#define TIM11_BASE (APB2PERIPH_BASE + 0x5400) + +#define DMA1_BASE (AHBPERIPH_BASE + 0x0000) +#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008) +#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x001C) +#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x0030) +#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x0044) +#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x0058) +#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x006C) +#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x0080) +#define DMA2_BASE (AHBPERIPH_BASE + 0x0400) +#define DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408) +#define DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C) +#define DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430) +#define DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444) +#define DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458) +#define RCC_BASE (AHBPERIPH_BASE + 0x1000) +#define CRC_BASE (AHBPERIPH_BASE + 0x3000) + +#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) /* Flash registers base address */ +#define OB_BASE ((uint32_t)0x1FFFF800) /* Flash Option Bytes base address */ +#define DBGMCU_BASE ((uint32_t)0xE000D000) +#define EXTEN_BASE ((uint32_t)0x40023800) + +/* Peripheral declaration */ +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define TIM5 ((TIM_TypeDef *) TIM5_BASE) +#define TIM6 ((TIM_TypeDef *) TIM6_BASE) +#define TIM7 ((TIM_TypeDef *) TIM7_BASE) +#define TIM12 ((TIM_TypeDef *) TIM12_BASE) +#define TIM13 ((TIM_TypeDef *) TIM13_BASE) +#define TIM14 ((TIM_TypeDef *) TIM14_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define SPI3 ((SPI_TypeDef *) SPI3_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define USART3 ((USART_TypeDef *) USART3_BASE) +#define UART4 ((USART_TypeDef *) UART4_BASE) +#define UART5 ((USART_TypeDef *) UART5_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define BKP ((BKP_TypeDef *) BKP_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define DAC ((DAC_TypeDef *) DAC_BASE) +#define AFIO ((AFIO_TypeDef *) AFIO_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) +#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC2 ((ADC_TypeDef *) ADC2_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define TIM8 ((TIM_TypeDef *) TIM8_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define ADC3 ((ADC_TypeDef *) ADC3_BASE) +#define TIM15 ((TIM_TypeDef *) TIM15_BASE) +#define TIM16 ((TIM_TypeDef *) TIM16_BASE) +#define TIM17 ((TIM_TypeDef *) TIM17_BASE) +#define TIM9 ((TIM_TypeDef *) TIM9_BASE) +#define TIM10 ((TIM_TypeDef *) TIM10_BASE) +#define TIM11 ((TIM_TypeDef *) TIM11_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA2 ((DMA_TypeDef *) DMA2_BASE) +#define DMA1_Channel1 ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE) +#define DMA1_Channel2 ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE) +#define DMA1_Channel3 ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE) +#define DMA1_Channel4 ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE) +#define DMA1_Channel5 ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE) +#define DMA1_Channel6 ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE) +#define DMA1_Channel7 ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE) +#define DMA2_Channel1 ((DMA_Channel_TypeDef *) DMA2_Channel1_BASE) +#define DMA2_Channel2 ((DMA_Channel_TypeDef *) DMA2_Channel2_BASE) +#define DMA2_Channel3 ((DMA_Channel_TypeDef *) DMA2_Channel3_BASE) +#define DMA2_Channel4 ((DMA_Channel_TypeDef *) DMA2_Channel4_BASE) +#define DMA2_Channel5 ((DMA_Channel_TypeDef *) DMA2_Channel5_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define OB ((OB_TypeDef *) OB_BASE) +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) +#define EXTEN ((EXTEN_TypeDef *) EXTEN_BASE) + + +/******************************************************************************/ +/* Peripheral Registers Bits Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* Analog to Digital Converter */ +/******************************************************************************/ + +/******************** Bit definition for ADC_STATR register ********************/ +#define ADC_AWD ((uint8_t)0x01) /* Analog watchdog flag */ +#define ADC_EOC ((uint8_t)0x02) /* End of conversion */ +#define ADC_JEOC ((uint8_t)0x04) /* Injected channel end of conversion */ +#define ADC_JSTRT ((uint8_t)0x08) /* Injected channel Start flag */ +#define ADC_STRT ((uint8_t)0x10) /* Regular channel Start flag */ + +/******************* Bit definition for ADC_CTLR1 register ********************/ +#define ADC_AWDCH ((uint32_t)0x0000001F) /* AWDCH[4:0] bits (Analog watchdog channel select bits) */ +#define ADC_AWDCH_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define ADC_AWDCH_1 ((uint32_t)0x00000002) /* Bit 1 */ +#define ADC_AWDCH_2 ((uint32_t)0x00000004) /* Bit 2 */ +#define ADC_AWDCH_3 ((uint32_t)0x00000008) /* Bit 3 */ +#define ADC_AWDCH_4 ((uint32_t)0x00000010) /* Bit 4 */ + +#define ADC_EOCIE ((uint32_t)0x00000020) /* Interrupt enable for EOC */ +#define ADC_AWDIE ((uint32_t)0x00000040) /* Analog Watchdog interrupt enable */ +#define ADC_JEOCIE ((uint32_t)0x00000080) /* Interrupt enable for injected channels */ +#define ADC_SCAN ((uint32_t)0x00000100) /* Scan mode */ +#define ADC_AWDSGL ((uint32_t)0x00000200) /* Enable the watchdog on a single channel in scan mode */ +#define ADC_JAUTO ((uint32_t)0x00000400) /* Automatic injected group conversion */ +#define ADC_DISCEN ((uint32_t)0x00000800) /* Discontinuous mode on regular channels */ +#define ADC_JDISCEN ((uint32_t)0x00001000) /* Discontinuous mode on injected channels */ + +#define ADC_DISCNUM ((uint32_t)0x0000E000) /* DISCNUM[2:0] bits (Discontinuous mode channel count) */ +#define ADC_DISCNUM_0 ((uint32_t)0x00002000) /* Bit 0 */ +#define ADC_DISCNUM_1 ((uint32_t)0x00004000) /* Bit 1 */ +#define ADC_DISCNUM_2 ((uint32_t)0x00008000) /* Bit 2 */ + +#define ADC_DUALMOD ((uint32_t)0x000F0000) /* DUALMOD[3:0] bits (Dual mode selection) */ +#define ADC_DUALMOD_0 ((uint32_t)0x00010000) /* Bit 0 */ +#define ADC_DUALMOD_1 ((uint32_t)0x00020000) /* Bit 1 */ +#define ADC_DUALMOD_2 ((uint32_t)0x00040000) /* Bit 2 */ +#define ADC_DUALMOD_3 ((uint32_t)0x00080000) /* Bit 3 */ + +#define ADC_JAWDEN ((uint32_t)0x00400000) /* Analog watchdog enable on injected channels */ +#define ADC_AWDEN ((uint32_t)0x00800000) /* Analog watchdog enable on regular channels */ + +/******************* Bit definition for ADC_CTLR2 register ********************/ +#define ADC_ADON ((uint32_t)0x00000001) /* A/D Converter ON / OFF */ +#define ADC_CONT ((uint32_t)0x00000002) /* Continuous Conversion */ +#define ADC_CAL ((uint32_t)0x00000004) /* A/D Calibration */ +#define ADC_RSTCAL ((uint32_t)0x00000008) /* Reset Calibration */ +#define ADC_DMA ((uint32_t)0x00000100) /* Direct Memory access mode */ +#define ADC_ALIGN ((uint32_t)0x00000800) /* Data Alignment */ + +#define ADC_JEXTSEL ((uint32_t)0x00007000) /* JEXTSEL[2:0] bits (External event select for injected group) */ +#define ADC_JEXTSEL_0 ((uint32_t)0x00001000) /* Bit 0 */ +#define ADC_JEXTSEL_1 ((uint32_t)0x00002000) /* Bit 1 */ +#define ADC_JEXTSEL_2 ((uint32_t)0x00004000) /* Bit 2 */ + +#define ADC_JEXTTRIG ((uint32_t)0x00008000) /* External Trigger Conversion mode for injected channels */ + +#define ADC_EXTSEL ((uint32_t)0x000E0000) /* EXTSEL[2:0] bits (External Event Select for regular group) */ +#define ADC_EXTSEL_0 ((uint32_t)0x00020000) /* Bit 0 */ +#define ADC_EXTSEL_1 ((uint32_t)0x00040000) /* Bit 1 */ +#define ADC_EXTSEL_2 ((uint32_t)0x00080000) /* Bit 2 */ + +#define ADC_EXTTRIG ((uint32_t)0x00100000) /* External Trigger Conversion mode for regular channels */ +#define ADC_JSWSTART ((uint32_t)0x00200000) /* Start Conversion of injected channels */ +#define ADC_SWSTART ((uint32_t)0x00400000) /* Start Conversion of regular channels */ +#define ADC_TSVREFE ((uint32_t)0x00800000) /* Temperature Sensor and VREFINT Enable */ + +/****************** Bit definition for ADC_SAMPTR1 register *******************/ +#define ADC_SMP10 ((uint32_t)0x00000007) /* SMP10[2:0] bits (Channel 10 Sample time selection) */ +#define ADC_SMP10_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define ADC_SMP10_1 ((uint32_t)0x00000002) /* Bit 1 */ +#define ADC_SMP10_2 ((uint32_t)0x00000004) /* Bit 2 */ + +#define ADC_SMP11 ((uint32_t)0x00000038) /* SMP11[2:0] bits (Channel 11 Sample time selection) */ +#define ADC_SMP11_0 ((uint32_t)0x00000008) /* Bit 0 */ +#define ADC_SMP11_1 ((uint32_t)0x00000010) /* Bit 1 */ +#define ADC_SMP11_2 ((uint32_t)0x00000020) /* Bit 2 */ + +#define ADC_SMP12 ((uint32_t)0x000001C0) /* SMP12[2:0] bits (Channel 12 Sample time selection) */ +#define ADC_SMP12_0 ((uint32_t)0x00000040) /* Bit 0 */ +#define ADC_SMP12_1 ((uint32_t)0x00000080) /* Bit 1 */ +#define ADC_SMP12_2 ((uint32_t)0x00000100) /* Bit 2 */ + +#define ADC_SMP13 ((uint32_t)0x00000E00) /* SMP13[2:0] bits (Channel 13 Sample time selection) */ +#define ADC_SMP13_0 ((uint32_t)0x00000200) /* Bit 0 */ +#define ADC_SMP13_1 ((uint32_t)0x00000400) /* Bit 1 */ +#define ADC_SMP13_2 ((uint32_t)0x00000800) /* Bit 2 */ + +#define ADC_SMP14 ((uint32_t)0x00007000) /* SMP14[2:0] bits (Channel 14 Sample time selection) */ +#define ADC_SMP14_0 ((uint32_t)0x00001000) /* Bit 0 */ +#define ADC_SMP14_1 ((uint32_t)0x00002000) /* Bit 1 */ +#define ADC_SMP14_2 ((uint32_t)0x00004000) /* Bit 2 */ + +#define ADC_SMP15 ((uint32_t)0x00038000) /* SMP15[2:0] bits (Channel 15 Sample time selection) */ +#define ADC_SMP15_0 ((uint32_t)0x00008000) /* Bit 0 */ +#define ADC_SMP15_1 ((uint32_t)0x00010000) /* Bit 1 */ +#define ADC_SMP15_2 ((uint32_t)0x00020000) /* Bit 2 */ + +#define ADC_SMP16 ((uint32_t)0x001C0000) /* SMP16[2:0] bits (Channel 16 Sample time selection) */ +#define ADC_SMP16_0 ((uint32_t)0x00040000) /* Bit 0 */ +#define ADC_SMP16_1 ((uint32_t)0x00080000) /* Bit 1 */ +#define ADC_SMP16_2 ((uint32_t)0x00100000) /* Bit 2 */ + +#define ADC_SMP17 ((uint32_t)0x00E00000) /* SMP17[2:0] bits (Channel 17 Sample time selection) */ +#define ADC_SMP17_0 ((uint32_t)0x00200000) /* Bit 0 */ +#define ADC_SMP17_1 ((uint32_t)0x00400000) /* Bit 1 */ +#define ADC_SMP17_2 ((uint32_t)0x00800000) /* Bit 2 */ + +/****************** Bit definition for ADC_SAMPTR2 register *******************/ +#define ADC_SMP0 ((uint32_t)0x00000007) /* SMP0[2:0] bits (Channel 0 Sample time selection) */ +#define ADC_SMP0_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define ADC_SMP0_1 ((uint32_t)0x00000002) /* Bit 1 */ +#define ADC_SMP0_2 ((uint32_t)0x00000004) /* Bit 2 */ + +#define ADC_SMP1 ((uint32_t)0x00000038) /* SMP1[2:0] bits (Channel 1 Sample time selection) */ +#define ADC_SMP1_0 ((uint32_t)0x00000008) /* Bit 0 */ +#define ADC_SMP1_1 ((uint32_t)0x00000010) /* Bit 1 */ +#define ADC_SMP1_2 ((uint32_t)0x00000020) /* Bit 2 */ + +#define ADC_SMP2 ((uint32_t)0x000001C0) /* SMP2[2:0] bits (Channel 2 Sample time selection) */ +#define ADC_SMP2_0 ((uint32_t)0x00000040) /* Bit 0 */ +#define ADC_SMP2_1 ((uint32_t)0x00000080) /* Bit 1 */ +#define ADC_SMP2_2 ((uint32_t)0x00000100) /* Bit 2 */ + +#define ADC_SMP3 ((uint32_t)0x00000E00) /* SMP3[2:0] bits (Channel 3 Sample time selection) */ +#define ADC_SMP3_0 ((uint32_t)0x00000200) /* Bit 0 */ +#define ADC_SMP3_1 ((uint32_t)0x00000400) /* Bit 1 */ +#define ADC_SMP3_2 ((uint32_t)0x00000800) /* Bit 2 */ + +#define ADC_SMP4 ((uint32_t)0x00007000) /* SMP4[2:0] bits (Channel 4 Sample time selection) */ +#define ADC_SMP4_0 ((uint32_t)0x00001000) /* Bit 0 */ +#define ADC_SMP4_1 ((uint32_t)0x00002000) /* Bit 1 */ +#define ADC_SMP4_2 ((uint32_t)0x00004000) /* Bit 2 */ + +#define ADC_SMP5 ((uint32_t)0x00038000) /* SMP5[2:0] bits (Channel 5 Sample time selection) */ +#define ADC_SMP5_0 ((uint32_t)0x00008000) /* Bit 0 */ +#define ADC_SMP5_1 ((uint32_t)0x00010000) /* Bit 1 */ +#define ADC_SMP5_2 ((uint32_t)0x00020000) /* Bit 2 */ + +#define ADC_SMP6 ((uint32_t)0x001C0000) /* SMP6[2:0] bits (Channel 6 Sample time selection) */ +#define ADC_SMP6_0 ((uint32_t)0x00040000) /* Bit 0 */ +#define ADC_SMP6_1 ((uint32_t)0x00080000) /* Bit 1 */ +#define ADC_SMP6_2 ((uint32_t)0x00100000) /* Bit 2 */ + +#define ADC_SMP7 ((uint32_t)0x00E00000) /* SMP7[2:0] bits (Channel 7 Sample time selection) */ +#define ADC_SMP7_0 ((uint32_t)0x00200000) /* Bit 0 */ +#define ADC_SMP7_1 ((uint32_t)0x00400000) /* Bit 1 */ +#define ADC_SMP7_2 ((uint32_t)0x00800000) /* Bit 2 */ + +#define ADC_SMP8 ((uint32_t)0x07000000) /* SMP8[2:0] bits (Channel 8 Sample time selection) */ +#define ADC_SMP8_0 ((uint32_t)0x01000000) /* Bit 0 */ +#define ADC_SMP8_1 ((uint32_t)0x02000000) /* Bit 1 */ +#define ADC_SMP8_2 ((uint32_t)0x04000000) /* Bit 2 */ + +#define ADC_SMP9 ((uint32_t)0x38000000) /* SMP9[2:0] bits (Channel 9 Sample time selection) */ +#define ADC_SMP9_0 ((uint32_t)0x08000000) /* Bit 0 */ +#define ADC_SMP9_1 ((uint32_t)0x10000000) /* Bit 1 */ +#define ADC_SMP9_2 ((uint32_t)0x20000000) /* Bit 2 */ + +/****************** Bit definition for ADC_IOFR1 register *******************/ +#define ADC_JOFFSET1 ((uint16_t)0x0FFF) /* Data offset for injected channel 1 */ + +/****************** Bit definition for ADC_IOFR2 register *******************/ +#define ADC_JOFFSET2 ((uint16_t)0x0FFF) /* Data offset for injected channel 2 */ + +/****************** Bit definition for ADC_IOFR3 register *******************/ +#define ADC_JOFFSET3 ((uint16_t)0x0FFF) /* Data offset for injected channel 3 */ + +/****************** Bit definition for ADC_IOFR4 register *******************/ +#define ADC_JOFFSET4 ((uint16_t)0x0FFF) /* Data offset for injected channel 4 */ + +/******************* Bit definition for ADC_WDHTR register ********************/ +#define ADC_HT ((uint16_t)0x0FFF) /* Analog watchdog high threshold */ + +/******************* Bit definition for ADC_WDLTR register ********************/ +#define ADC_LT ((uint16_t)0x0FFF) /* Analog watchdog low threshold */ + +/******************* Bit definition for ADC_RSQR1 register *******************/ +#define ADC_SQ13 ((uint32_t)0x0000001F) /* SQ13[4:0] bits (13th conversion in regular sequence) */ +#define ADC_SQ13_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define ADC_SQ13_1 ((uint32_t)0x00000002) /* Bit 1 */ +#define ADC_SQ13_2 ((uint32_t)0x00000004) /* Bit 2 */ +#define ADC_SQ13_3 ((uint32_t)0x00000008) /* Bit 3 */ +#define ADC_SQ13_4 ((uint32_t)0x00000010) /* Bit 4 */ + +#define ADC_SQ14 ((uint32_t)0x000003E0) /* SQ14[4:0] bits (14th conversion in regular sequence) */ +#define ADC_SQ14_0 ((uint32_t)0x00000020) /* Bit 0 */ +#define ADC_SQ14_1 ((uint32_t)0x00000040) /* Bit 1 */ +#define ADC_SQ14_2 ((uint32_t)0x00000080) /* Bit 2 */ +#define ADC_SQ14_3 ((uint32_t)0x00000100) /* Bit 3 */ +#define ADC_SQ14_4 ((uint32_t)0x00000200) /* Bit 4 */ + +#define ADC_SQ15 ((uint32_t)0x00007C00) /* SQ15[4:0] bits (15th conversion in regular sequence) */ +#define ADC_SQ15_0 ((uint32_t)0x00000400) /* Bit 0 */ +#define ADC_SQ15_1 ((uint32_t)0x00000800) /* Bit 1 */ +#define ADC_SQ15_2 ((uint32_t)0x00001000) /* Bit 2 */ +#define ADC_SQ15_3 ((uint32_t)0x00002000) /* Bit 3 */ +#define ADC_SQ15_4 ((uint32_t)0x00004000) /* Bit 4 */ + +#define ADC_SQ16 ((uint32_t)0x000F8000) /* SQ16[4:0] bits (16th conversion in regular sequence) */ +#define ADC_SQ16_0 ((uint32_t)0x00008000) /* Bit 0 */ +#define ADC_SQ16_1 ((uint32_t)0x00010000) /* Bit 1 */ +#define ADC_SQ16_2 ((uint32_t)0x00020000) /* Bit 2 */ +#define ADC_SQ16_3 ((uint32_t)0x00040000) /* Bit 3 */ +#define ADC_SQ16_4 ((uint32_t)0x00080000) /* Bit 4 */ + +#define ADC_L ((uint32_t)0x00F00000) /* L[3:0] bits (Regular channel sequence length) */ +#define ADC_L_0 ((uint32_t)0x00100000) /* Bit 0 */ +#define ADC_L_1 ((uint32_t)0x00200000) /* Bit 1 */ +#define ADC_L_2 ((uint32_t)0x00400000) /* Bit 2 */ +#define ADC_L_3 ((uint32_t)0x00800000) /* Bit 3 */ + +/******************* Bit definition for ADC_RSQR2 register *******************/ +#define ADC_SQ7 ((uint32_t)0x0000001F) /* SQ7[4:0] bits (7th conversion in regular sequence) */ +#define ADC_SQ7_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define ADC_SQ7_1 ((uint32_t)0x00000002) /* Bit 1 */ +#define ADC_SQ7_2 ((uint32_t)0x00000004) /* Bit 2 */ +#define ADC_SQ7_3 ((uint32_t)0x00000008) /* Bit 3 */ +#define ADC_SQ7_4 ((uint32_t)0x00000010) /* Bit 4 */ + +#define ADC_SQ8 ((uint32_t)0x000003E0) /* SQ8[4:0] bits (8th conversion in regular sequence) */ +#define ADC_SQ8_0 ((uint32_t)0x00000020) /* Bit 0 */ +#define ADC_SQ8_1 ((uint32_t)0x00000040) /* Bit 1 */ +#define ADC_SQ8_2 ((uint32_t)0x00000080) /* Bit 2 */ +#define ADC_SQ8_3 ((uint32_t)0x00000100) /* Bit 3 */ +#define ADC_SQ8_4 ((uint32_t)0x00000200) /* Bit 4 */ + +#define ADC_SQ9 ((uint32_t)0x00007C00) /* SQ9[4:0] bits (9th conversion in regular sequence) */ +#define ADC_SQ9_0 ((uint32_t)0x00000400) /* Bit 0 */ +#define ADC_SQ9_1 ((uint32_t)0x00000800) /* Bit 1 */ +#define ADC_SQ9_2 ((uint32_t)0x00001000) /* Bit 2 */ +#define ADC_SQ9_3 ((uint32_t)0x00002000) /* Bit 3 */ +#define ADC_SQ9_4 ((uint32_t)0x00004000) /* Bit 4 */ + +#define ADC_SQ10 ((uint32_t)0x000F8000) /* SQ10[4:0] bits (10th conversion in regular sequence) */ +#define ADC_SQ10_0 ((uint32_t)0x00008000) /* Bit 0 */ +#define ADC_SQ10_1 ((uint32_t)0x00010000) /* Bit 1 */ +#define ADC_SQ10_2 ((uint32_t)0x00020000) /* Bit 2 */ +#define ADC_SQ10_3 ((uint32_t)0x00040000) /* Bit 3 */ +#define ADC_SQ10_4 ((uint32_t)0x00080000) /* Bit 4 */ + +#define ADC_SQ11 ((uint32_t)0x01F00000) /* SQ11[4:0] bits (11th conversion in regular sequence) */ +#define ADC_SQ11_0 ((uint32_t)0x00100000) /* Bit 0 */ +#define ADC_SQ11_1 ((uint32_t)0x00200000) /* Bit 1 */ +#define ADC_SQ11_2 ((uint32_t)0x00400000) /* Bit 2 */ +#define ADC_SQ11_3 ((uint32_t)0x00800000) /* Bit 3 */ +#define ADC_SQ11_4 ((uint32_t)0x01000000) /* Bit 4 */ + +#define ADC_SQ12 ((uint32_t)0x3E000000) /* SQ12[4:0] bits (12th conversion in regular sequence) */ +#define ADC_SQ12_0 ((uint32_t)0x02000000) /* Bit 0 */ +#define ADC_SQ12_1 ((uint32_t)0x04000000) /* Bit 1 */ +#define ADC_SQ12_2 ((uint32_t)0x08000000) /* Bit 2 */ +#define ADC_SQ12_3 ((uint32_t)0x10000000) /* Bit 3 */ +#define ADC_SQ12_4 ((uint32_t)0x20000000) /* Bit 4 */ + +/******************* Bit definition for ADC_RSQR3 register *******************/ +#define ADC_SQ1 ((uint32_t)0x0000001F) /* SQ1[4:0] bits (1st conversion in regular sequence) */ +#define ADC_SQ1_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define ADC_SQ1_1 ((uint32_t)0x00000002) /* Bit 1 */ +#define ADC_SQ1_2 ((uint32_t)0x00000004) /* Bit 2 */ +#define ADC_SQ1_3 ((uint32_t)0x00000008) /* Bit 3 */ +#define ADC_SQ1_4 ((uint32_t)0x00000010) /* Bit 4 */ + +#define ADC_SQ2 ((uint32_t)0x000003E0) /* SQ2[4:0] bits (2nd conversion in regular sequence) */ +#define ADC_SQ2_0 ((uint32_t)0x00000020) /* Bit 0 */ +#define ADC_SQ2_1 ((uint32_t)0x00000040) /* Bit 1 */ +#define ADC_SQ2_2 ((uint32_t)0x00000080) /* Bit 2 */ +#define ADC_SQ2_3 ((uint32_t)0x00000100) /* Bit 3 */ +#define ADC_SQ2_4 ((uint32_t)0x00000200) /* Bit 4 */ + +#define ADC_SQ3 ((uint32_t)0x00007C00) /* SQ3[4:0] bits (3rd conversion in regular sequence) */ +#define ADC_SQ3_0 ((uint32_t)0x00000400) /* Bit 0 */ +#define ADC_SQ3_1 ((uint32_t)0x00000800) /* Bit 1 */ +#define ADC_SQ3_2 ((uint32_t)0x00001000) /* Bit 2 */ +#define ADC_SQ3_3 ((uint32_t)0x00002000) /* Bit 3 */ +#define ADC_SQ3_4 ((uint32_t)0x00004000) /* Bit 4 */ + +#define ADC_SQ4 ((uint32_t)0x000F8000) /* SQ4[4:0] bits (4th conversion in regular sequence) */ +#define ADC_SQ4_0 ((uint32_t)0x00008000) /* Bit 0 */ +#define ADC_SQ4_1 ((uint32_t)0x00010000) /* Bit 1 */ +#define ADC_SQ4_2 ((uint32_t)0x00020000) /* Bit 2 */ +#define ADC_SQ4_3 ((uint32_t)0x00040000) /* Bit 3 */ +#define ADC_SQ4_4 ((uint32_t)0x00080000) /* Bit 4 */ + +#define ADC_SQ5 ((uint32_t)0x01F00000) /* SQ5[4:0] bits (5th conversion in regular sequence) */ +#define ADC_SQ5_0 ((uint32_t)0x00100000) /* Bit 0 */ +#define ADC_SQ5_1 ((uint32_t)0x00200000) /* Bit 1 */ +#define ADC_SQ5_2 ((uint32_t)0x00400000) /* Bit 2 */ +#define ADC_SQ5_3 ((uint32_t)0x00800000) /* Bit 3 */ +#define ADC_SQ5_4 ((uint32_t)0x01000000) /* Bit 4 */ + +#define ADC_SQ6 ((uint32_t)0x3E000000) /* SQ6[4:0] bits (6th conversion in regular sequence) */ +#define ADC_SQ6_0 ((uint32_t)0x02000000) /* Bit 0 */ +#define ADC_SQ6_1 ((uint32_t)0x04000000) /* Bit 1 */ +#define ADC_SQ6_2 ((uint32_t)0x08000000) /* Bit 2 */ +#define ADC_SQ6_3 ((uint32_t)0x10000000) /* Bit 3 */ +#define ADC_SQ6_4 ((uint32_t)0x20000000) /* Bit 4 */ + +/******************* Bit definition for ADC_ISQR register *******************/ +#define ADC_JSQ1 ((uint32_t)0x0000001F) /* JSQ1[4:0] bits (1st conversion in injected sequence) */ +#define ADC_JSQ1_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define ADC_JSQ1_1 ((uint32_t)0x00000002) /* Bit 1 */ +#define ADC_JSQ1_2 ((uint32_t)0x00000004) /* Bit 2 */ +#define ADC_JSQ1_3 ((uint32_t)0x00000008) /* Bit 3 */ +#define ADC_JSQ1_4 ((uint32_t)0x00000010) /* Bit 4 */ + +#define ADC_JSQ2 ((uint32_t)0x000003E0) /* JSQ2[4:0] bits (2nd conversion in injected sequence) */ +#define ADC_JSQ2_0 ((uint32_t)0x00000020) /* Bit 0 */ +#define ADC_JSQ2_1 ((uint32_t)0x00000040) /* Bit 1 */ +#define ADC_JSQ2_2 ((uint32_t)0x00000080) /* Bit 2 */ +#define ADC_JSQ2_3 ((uint32_t)0x00000100) /* Bit 3 */ +#define ADC_JSQ2_4 ((uint32_t)0x00000200) /* Bit 4 */ + +#define ADC_JSQ3 ((uint32_t)0x00007C00) /* JSQ3[4:0] bits (3rd conversion in injected sequence) */ +#define ADC_JSQ3_0 ((uint32_t)0x00000400) /* Bit 0 */ +#define ADC_JSQ3_1 ((uint32_t)0x00000800) /* Bit 1 */ +#define ADC_JSQ3_2 ((uint32_t)0x00001000) /* Bit 2 */ +#define ADC_JSQ3_3 ((uint32_t)0x00002000) /* Bit 3 */ +#define ADC_JSQ3_4 ((uint32_t)0x00004000) /* Bit 4 */ + +#define ADC_JSQ4 ((uint32_t)0x000F8000) /* JSQ4[4:0] bits (4th conversion in injected sequence) */ +#define ADC_JSQ4_0 ((uint32_t)0x00008000) /* Bit 0 */ +#define ADC_JSQ4_1 ((uint32_t)0x00010000) /* Bit 1 */ +#define ADC_JSQ4_2 ((uint32_t)0x00020000) /* Bit 2 */ +#define ADC_JSQ4_3 ((uint32_t)0x00040000) /* Bit 3 */ +#define ADC_JSQ4_4 ((uint32_t)0x00080000) /* Bit 4 */ + +#define ADC_JL ((uint32_t)0x00300000) /* JL[1:0] bits (Injected Sequence length) */ +#define ADC_JL_0 ((uint32_t)0x00100000) /* Bit 0 */ +#define ADC_JL_1 ((uint32_t)0x00200000) /* Bit 1 */ + +/******************* Bit definition for ADC_IDATAR1 register *******************/ +#define ADC_IDATAR1_JDATA ((uint16_t)0xFFFF) /* Injected data */ + +/******************* Bit definition for ADC_IDATAR2 register *******************/ +#define ADC_IDATAR2_JDATA ((uint16_t)0xFFFF) /* Injected data */ + +/******************* Bit definition for ADC_IDATAR3 register *******************/ +#define ADC_IDATAR3_JDATA ((uint16_t)0xFFFF) /* Injected data */ + +/******************* Bit definition for ADC_IDATAR4 register *******************/ +#define ADC_IDATAR4_JDATA ((uint16_t)0xFFFF) /* Injected data */ + +/******************** Bit definition for ADC_RDATAR register ********************/ +#define ADC_RDATAR_DATA ((uint32_t)0x0000FFFF) /* Regular data */ +#define ADC_RDATAR_ADC2DATA ((uint32_t)0xFFFF0000) /* ADC2 data */ + +/******************************************************************************/ +/* Backup registers */ +/******************************************************************************/ + +/******************* Bit definition for BKP_DATAR1 register ********************/ +#define BKP_DATAR1_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR2 register ********************/ +#define BKP_DATAR2_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR3 register ********************/ +#define BKP_DATAR3_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR4 register ********************/ +#define BKP_DATAR4_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR5 register ********************/ +#define BKP_DATAR5_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR6 register ********************/ +#define BKP_DATAR6_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR7 register ********************/ +#define BKP_DATAR7_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR8 register ********************/ +#define BKP_DATAR8_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR9 register ********************/ +#define BKP_DATAR9_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR10 register *******************/ +#define BKP_DATAR10_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR11 register *******************/ +#define BKP_DATAR11_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR12 register *******************/ +#define BKP_DATAR12_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR13 register *******************/ +#define BKP_DATAR13_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR14 register *******************/ +#define BKP_DATAR14_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR15 register *******************/ +#define BKP_DATAR15_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR16 register *******************/ +#define BKP_DATAR16_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR17 register *******************/ +#define BKP_DATAR17_D ((uint16_t)0xFFFF) /* Backup data */ + +/****************** Bit definition for BKP_DATAR18 register ********************/ +#define BKP_DATAR18_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR19 register *******************/ +#define BKP_DATAR19_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR20 register *******************/ +#define BKP_DATAR20_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR21 register *******************/ +#define BKP_DATAR21_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR22 register *******************/ +#define BKP_DATAR22_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR23 register *******************/ +#define BKP_DATAR23_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR24 register *******************/ +#define BKP_DATAR24_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR25 register *******************/ +#define BKP_DATAR25_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR26 register *******************/ +#define BKP_DATAR26_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR27 register *******************/ +#define BKP_DATAR27_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR28 register *******************/ +#define BKP_DATAR28_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR29 register *******************/ +#define BKP_DATAR29_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR30 register *******************/ +#define BKP_DATAR30_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR31 register *******************/ +#define BKP_DATAR31_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR32 register *******************/ +#define BKP_DATAR32_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR33 register *******************/ +#define BKP_DATAR33_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR34 register *******************/ +#define BKP_DATAR34_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR35 register *******************/ +#define BKP_DATAR35_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR36 register *******************/ +#define BKP_DATAR36_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR37 register *******************/ +#define BKP_DATAR37_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR38 register *******************/ +#define BKP_DATAR38_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR39 register *******************/ +#define BKP_DATAR39_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR40 register *******************/ +#define BKP_DATAR40_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR41 register *******************/ +#define BKP_DATAR41_D ((uint16_t)0xFFFF) /* Backup data */ + +/******************* Bit definition for BKP_DATAR42 register *******************/ +#define BKP_DATAR42_D ((uint16_t)0xFFFF) /* Backup data */ + +/****************** Bit definition for BKP_OCTLR register *******************/ +#define BKP_CAL ((uint16_t)0x007F) /* Calibration value */ +#define BKP_CCO ((uint16_t)0x0080) /* Calibration Clock Output */ +#define BKP_ASOE ((uint16_t)0x0100) /* Alarm or Second Output Enable */ +#define BKP_ASOS ((uint16_t)0x0200) /* Alarm or Second Output Selection */ + +/******************** Bit definition for BKP_TPCTLR register ********************/ +#define BKP_TPE ((uint8_t)0x01) /* TAMPER pin enable */ +#define BKP_TPAL ((uint8_t)0x02) /* TAMPER pin active level */ + +/******************* Bit definition for BKP_TPCSR register ********************/ +#define BKP_CTE ((uint16_t)0x0001) /* Clear Tamper event */ +#define BKP_CTI ((uint16_t)0x0002) /* Clear Tamper Interrupt */ +#define BKP_TPIE ((uint16_t)0x0004) /* TAMPER Pin interrupt enable */ +#define BKP_TEF ((uint16_t)0x0100) /* Tamper Event Flag */ +#define BKP_TIF ((uint16_t)0x0200) /* Tamper Interrupt Flag */ + +/******************************************************************************/ +/* CRC Calculation Unit */ +/******************************************************************************/ + +/******************* Bit definition for CRC_DATAR register *********************/ +#define CRC_DATAR_DR ((uint32_t)0xFFFFFFFF) /* Data register bits */ + + +/******************* Bit definition for CRC_IDATAR register ********************/ +#define CRC_IDR_IDATAR ((uint8_t)0xFF) /* General-purpose 8-bit data register bits */ + + +/******************** Bit definition for CRC_CTLR register ********************/ +#define CRC_CTLR_RESET ((uint8_t)0x01) /* RESET bit */ + +/******************************************************************************/ +/* Digital to Analog Converter */ +/******************************************************************************/ + +/******************** Bit definition for DAC_CTLR register ********************/ +#define DAC_EN1 ((uint32_t)0x00000001) /* DAC channel1 enable */ +#define DAC_BOFF1 ((uint32_t)0x00000002) /* DAC channel1 output buffer disable */ +#define DAC_TEN1 ((uint32_t)0x00000004) /* DAC channel1 Trigger enable */ + +#define DAC_TSEL1 ((uint32_t)0x00000038) /* TSEL1[2:0] (DAC channel1 Trigger selection) */ +#define DAC_TSEL1_0 ((uint32_t)0x00000008) /* Bit 0 */ +#define DAC_TSEL1_1 ((uint32_t)0x00000010) /* Bit 1 */ +#define DAC_TSEL1_2 ((uint32_t)0x00000020) /* Bit 2 */ + +#define DAC_WAVE1 ((uint32_t)0x000000C0) /* WAVE1[1:0] (DAC channel1 noise/triangle wave generation enable) */ +#define DAC_WAVE1_0 ((uint32_t)0x00000040) /* Bit 0 */ +#define DAC_WAVE1_1 ((uint32_t)0x00000080) /* Bit 1 */ + +#define DAC_MAMP1 ((uint32_t)0x00000F00) /* MAMP1[3:0] (DAC channel1 Mask/Amplitude selector) */ +#define DAC_MAMP1_0 ((uint32_t)0x00000100) /* Bit 0 */ +#define DAC_MAMP1_1 ((uint32_t)0x00000200) /* Bit 1 */ +#define DAC_MAMP1_2 ((uint32_t)0x00000400) /* Bit 2 */ +#define DAC_MAMP1_3 ((uint32_t)0x00000800) /* Bit 3 */ + +#define DAC_DMAEN1 ((uint32_t)0x00001000) /* DAC channel1 DMA enable */ +#define DAC_EN2 ((uint32_t)0x00010000) /* DAC channel2 enable */ +#define DAC_BOFF2 ((uint32_t)0x00020000) /* DAC channel2 output buffer disable */ +#define DAC_TEN2 ((uint32_t)0x00040000) /* DAC channel2 Trigger enable */ + +#define DAC_TSEL2 ((uint32_t)0x00380000) /* TSEL2[2:0] (DAC channel2 Trigger selection) */ +#define DAC_TSEL2_0 ((uint32_t)0x00080000) /* Bit 0 */ +#define DAC_TSEL2_1 ((uint32_t)0x00100000) /* Bit 1 */ +#define DAC_TSEL2_2 ((uint32_t)0x00200000) /* Bit 2 */ + +#define DAC_WAVE2 ((uint32_t)0x00C00000) /* WAVE2[1:0] (DAC channel2 noise/triangle wave generation enable) */ +#define DAC_WAVE2_0 ((uint32_t)0x00400000) /* Bit 0 */ +#define DAC_WAVE2_1 ((uint32_t)0x00800000) /* Bit 1 */ + +#define DAC_MAMP2 ((uint32_t)0x0F000000) /* MAMP2[3:0] (DAC channel2 Mask/Amplitude selector) */ +#define DAC_MAMP2_0 ((uint32_t)0x01000000) /* Bit 0 */ +#define DAC_MAMP2_1 ((uint32_t)0x02000000) /* Bit 1 */ +#define DAC_MAMP2_2 ((uint32_t)0x04000000) /* Bit 2 */ +#define DAC_MAMP2_3 ((uint32_t)0x08000000) /* Bit 3 */ + +#define DAC_DMAEN2 ((uint32_t)0x10000000) /* DAC channel2 DMA enabled */ + +/***************** Bit definition for DAC_SWTR register ******************/ +#define DAC_SWTRIG1 ((uint8_t)0x01) /* DAC channel1 software trigger */ +#define DAC_SWTRIG2 ((uint8_t)0x02) /* DAC channel2 software trigger */ + +/***************** Bit definition for DAC_R12BDHR1 register ******************/ +#define DAC_DHR12R1 ((uint16_t)0x0FFF) /* DAC channel1 12-bit Right aligned data */ + +/***************** Bit definition for DAC_L12BDHR1 register ******************/ +#define DAC_DHR12L1 ((uint16_t)0xFFF0) /* DAC channel1 12-bit Left aligned data */ + +/****************** Bit definition for DAC_R8BDHR1 register ******************/ +#define DAC_DHR8R1 ((uint8_t)0xFF) /* DAC channel1 8-bit Right aligned data */ + +/***************** Bit definition for DAC_R12BDHR2 register ******************/ +#define DAC_DHR12R2 ((uint16_t)0x0FFF) /* DAC channel2 12-bit Right aligned data */ + +/***************** Bit definition for DAC_L12BDHR2 register ******************/ +#define DAC_DHR12L2 ((uint16_t)0xFFF0) /* DAC channel2 12-bit Left aligned data */ + +/****************** Bit definition for DAC_R8BDHR2 register ******************/ +#define DAC_DHR8R2 ((uint8_t)0xFF) /* DAC channel2 8-bit Right aligned data */ + +/***************** Bit definition for DAC_RD12BDHR register ******************/ +#define DAC_RD12BDHR_DACC1DHR ((uint32_t)0x00000FFF) /* DAC channel1 12-bit Right aligned data */ +#define DAC_RD12BDHR_DACC2DHR ((uint32_t)0x0FFF0000) /* DAC channel2 12-bit Right aligned data */ + +/***************** Bit definition for DAC_LD12BDHR register ******************/ +#define DAC_LD12BDHR_DACC1DHR ((uint32_t)0x0000FFF0) /* DAC channel1 12-bit Left aligned data */ +#define DAC_LD12BDHR_DACC2DHR ((uint32_t)0xFFF00000) /* DAC channel2 12-bit Left aligned data */ + +/****************** Bit definition for DAC_RD8BDHR register ******************/ +#define DAC_RD8BDHR_DACC1DHR ((uint16_t)0x00FF) /* DAC channel1 8-bit Right aligned data */ +#define DAC_RD8BDHR_DACC2DHR ((uint16_t)0xFF00) /* DAC channel2 8-bit Right aligned data */ + +/******************* Bit definition for DAC_DOR1 register *******************/ +#define DAC_DACC1DOR ((uint16_t)0x0FFF) /* DAC channel1 data output */ + +/******************* Bit definition for DAC_DOR2 register *******************/ +#define DAC_DACC2DOR ((uint16_t)0x0FFF) /* DAC channel2 data output */ + +/******************************************************************************/ +/* DMA Controller */ +/******************************************************************************/ + +/******************* Bit definition for DMA_INTFR register ********************/ +#define DMA_GIF1 ((uint32_t)0x00000001) /* Channel 1 Global interrupt flag */ +#define DMA_TCIF1 ((uint32_t)0x00000002) /* Channel 1 Transfer Complete flag */ +#define DMA_HTIF1 ((uint32_t)0x00000004) /* Channel 1 Half Transfer flag */ +#define DMA_TEIF1 ((uint32_t)0x00000008) /* Channel 1 Transfer Error flag */ +#define DMA_GIF2 ((uint32_t)0x00000010) /* Channel 2 Global interrupt flag */ +#define DMA_TCIF2 ((uint32_t)0x00000020) /* Channel 2 Transfer Complete flag */ +#define DMA_HTIF2 ((uint32_t)0x00000040) /* Channel 2 Half Transfer flag */ +#define DMA_TEIF2 ((uint32_t)0x00000080) /* Channel 2 Transfer Error flag */ +#define DMA_GIF3 ((uint32_t)0x00000100) /* Channel 3 Global interrupt flag */ +#define DMA_TCIF3 ((uint32_t)0x00000200) /* Channel 3 Transfer Complete flag */ +#define DMA_HTIF3 ((uint32_t)0x00000400) /* Channel 3 Half Transfer flag */ +#define DMA_TEIF3 ((uint32_t)0x00000800) /* Channel 3 Transfer Error flag */ +#define DMA_GIF4 ((uint32_t)0x00001000) /* Channel 4 Global interrupt flag */ +#define DMA_TCIF4 ((uint32_t)0x00002000) /* Channel 4 Transfer Complete flag */ +#define DMA_HTIF4 ((uint32_t)0x00004000) /* Channel 4 Half Transfer flag */ +#define DMA_TEIF4 ((uint32_t)0x00008000) /* Channel 4 Transfer Error flag */ +#define DMA_GIF5 ((uint32_t)0x00010000) /* Channel 5 Global interrupt flag */ +#define DMA_TCIF5 ((uint32_t)0x00020000) /* Channel 5 Transfer Complete flag */ +#define DMA_HTIF5 ((uint32_t)0x00040000) /* Channel 5 Half Transfer flag */ +#define DMA_TEIF5 ((uint32_t)0x00080000) /* Channel 5 Transfer Error flag */ +#define DMA_GIF6 ((uint32_t)0x00100000) /* Channel 6 Global interrupt flag */ +#define DMA_TCIF6 ((uint32_t)0x00200000) /* Channel 6 Transfer Complete flag */ +#define DMA_HTIF6 ((uint32_t)0x00400000) /* Channel 6 Half Transfer flag */ +#define DMA_TEIF6 ((uint32_t)0x00800000) /* Channel 6 Transfer Error flag */ +#define DMA_GIF7 ((uint32_t)0x01000000) /* Channel 7 Global interrupt flag */ +#define DMA_TCIF7 ((uint32_t)0x02000000) /* Channel 7 Transfer Complete flag */ +#define DMA_HTIF7 ((uint32_t)0x04000000) /* Channel 7 Half Transfer flag */ +#define DMA_TEIF7 ((uint32_t)0x08000000) /* Channel 7 Transfer Error flag */ + +/******************* Bit definition for DMA_INTFCR register *******************/ +#define DMA_CGIF1 ((uint32_t)0x00000001) /* Channel 1 Global interrupt clear */ +#define DMA_CTCIF1 ((uint32_t)0x00000002) /* Channel 1 Transfer Complete clear */ +#define DMA_CHTIF1 ((uint32_t)0x00000004) /* Channel 1 Half Transfer clear */ +#define DMA_CTEIF1 ((uint32_t)0x00000008) /* Channel 1 Transfer Error clear */ +#define DMA_CGIF2 ((uint32_t)0x00000010) /* Channel 2 Global interrupt clear */ +#define DMA_CTCIF2 ((uint32_t)0x00000020) /* Channel 2 Transfer Complete clear */ +#define DMA_CHTIF2 ((uint32_t)0x00000040) /* Channel 2 Half Transfer clear */ +#define DMA_CTEIF2 ((uint32_t)0x00000080) /* Channel 2 Transfer Error clear */ +#define DMA_CGIF3 ((uint32_t)0x00000100) /* Channel 3 Global interrupt clear */ +#define DMA_CTCIF3 ((uint32_t)0x00000200) /* Channel 3 Transfer Complete clear */ +#define DMA_CHTIF3 ((uint32_t)0x00000400) /* Channel 3 Half Transfer clear */ +#define DMA_CTEIF3 ((uint32_t)0x00000800) /* Channel 3 Transfer Error clear */ +#define DMA_CGIF4 ((uint32_t)0x00001000) /* Channel 4 Global interrupt clear */ +#define DMA_CTCIF4 ((uint32_t)0x00002000) /* Channel 4 Transfer Complete clear */ +#define DMA_CHTIF4 ((uint32_t)0x00004000) /* Channel 4 Half Transfer clear */ +#define DMA_CTEIF4 ((uint32_t)0x00008000) /* Channel 4 Transfer Error clear */ +#define DMA_CGIF5 ((uint32_t)0x00010000) /* Channel 5 Global interrupt clear */ +#define DMA_CTCIF5 ((uint32_t)0x00020000) /* Channel 5 Transfer Complete clear */ +#define DMA_CHTIF5 ((uint32_t)0x00040000) /* Channel 5 Half Transfer clear */ +#define DMA_CTEIF5 ((uint32_t)0x00080000) /* Channel 5 Transfer Error clear */ +#define DMA_CGIF6 ((uint32_t)0x00100000) /* Channel 6 Global interrupt clear */ +#define DMA_CTCIF6 ((uint32_t)0x00200000) /* Channel 6 Transfer Complete clear */ +#define DMA_CHTIF6 ((uint32_t)0x00400000) /* Channel 6 Half Transfer clear */ +#define DMA_CTEIF6 ((uint32_t)0x00800000) /* Channel 6 Transfer Error clear */ +#define DMA_CGIF7 ((uint32_t)0x01000000) /* Channel 7 Global interrupt clear */ +#define DMA_CTCIF7 ((uint32_t)0x02000000) /* Channel 7 Transfer Complete clear */ +#define DMA_CHTIF7 ((uint32_t)0x04000000) /* Channel 7 Half Transfer clear */ +#define DMA_CTEIF7 ((uint32_t)0x08000000) /* Channel 7 Transfer Error clear */ + +/******************* Bit definition for DMA_CFGR1 register *******************/ +#define DMA_CFGR1_EN ((uint16_t)0x0001) /* Channel enable*/ +#define DMA_CFGR1_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ +#define DMA_CFGR1_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ +#define DMA_CFGR1_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ +#define DMA_CFGR1_DIR ((uint16_t)0x0010) /* Data transfer direction */ +#define DMA_CFGR1_CIRC ((uint16_t)0x0020) /* Circular mode */ +#define DMA_CFGR1_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ +#define DMA_CFGR1_MINC ((uint16_t)0x0080) /* Memory increment mode */ + +#define DMA_CFGR1_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CFGR1_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ +#define DMA_CFGR1_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define DMA_CFGR1_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ +#define DMA_CFGR1_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ +#define DMA_CFGR1_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define DMA_CFGR1_PL ((uint16_t)0x3000) /* PL[1:0] bits(Channel Priority level) */ +#define DMA_CFGR1_PL_0 ((uint16_t)0x1000) /* Bit 0 */ +#define DMA_CFGR1_PL_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define DMA_CFGR1_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ + +/******************* Bit definition for DMA_CFGR2 register *******************/ +#define DMA_CFGR2_EN ((uint16_t)0x0001) /* Channel enable */ +#define DMA_CFGR2_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ +#define DMA_CFGR2_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ +#define DMA_CFGR2_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ +#define DMA_CFGR2_DIR ((uint16_t)0x0010) /* Data transfer direction */ +#define DMA_CFGR2_CIRC ((uint16_t)0x0020) /* Circular mode */ +#define DMA_CFGR2_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ +#define DMA_CFGR2_MINC ((uint16_t)0x0080) /* Memory increment mode */ + +#define DMA_CFGR2_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CFGR2_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ +#define DMA_CFGR2_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define DMA_CFGR2_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ +#define DMA_CFGR2_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ +#define DMA_CFGR2_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define DMA_CFGR2_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ +#define DMA_CFGR2_PL_0 ((uint16_t)0x1000) /* Bit 0 */ +#define DMA_CFGR2_PL_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define DMA_CFGR2_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ + +/******************* Bit definition for DMA_CFGR3 register *******************/ +#define DMA_CFGR3_EN ((uint16_t)0x0001) /* Channel enable */ +#define DMA_CFGR3_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ +#define DMA_CFGR3_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ +#define DMA_CFGR3_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ +#define DMA_CFGR3_DIR ((uint16_t)0x0010) /* Data transfer direction */ +#define DMA_CFGR3_CIRC ((uint16_t)0x0020) /* Circular mode */ +#define DMA_CFGR3_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ +#define DMA_CFGR3_MINC ((uint16_t)0x0080) /* Memory increment mode */ + +#define DMA_CFGR3_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CFGR3_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ +#define DMA_CFGR3_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define DMA_CFGR3_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ +#define DMA_CFGR3_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ +#define DMA_CFGR3_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define DMA_CFGR3_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ +#define DMA_CFGR3_PL_0 ((uint16_t)0x1000) /* Bit 0 */ +#define DMA_CFGR3_PL_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define DMA_CFGR3_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ + +/******************* Bit definition for DMA_CFG4 register *******************/ +#define DMA_CFG4_EN ((uint16_t)0x0001) /* Channel enable */ +#define DMA_CFG4_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ +#define DMA_CFG4_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ +#define DMA_CFG4_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ +#define DMA_CFG4_DIR ((uint16_t)0x0010) /* Data transfer direction */ +#define DMA_CFG4_CIRC ((uint16_t)0x0020) /* Circular mode */ +#define DMA_CFG4_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ +#define DMA_CFG4_MINC ((uint16_t)0x0080) /* Memory increment mode */ + +#define DMA_CFG4_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CFG4_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ +#define DMA_CFG4_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define DMA_CFG4_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ +#define DMA_CFG4_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ +#define DMA_CFG4_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define DMA_CFG4_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ +#define DMA_CFG4_PL_0 ((uint16_t)0x1000) /* Bit 0 */ +#define DMA_CFG4_PL_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define DMA_CFG4_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ + +/****************** Bit definition for DMA_CFG5 register *******************/ +#define DMA_CFG5_EN ((uint16_t)0x0001) /* Channel enable */ +#define DMA_CFG5_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ +#define DMA_CFG5_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ +#define DMA_CFG5_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ +#define DMA_CFG5_DIR ((uint16_t)0x0010) /* Data transfer direction */ +#define DMA_CFG5_CIRC ((uint16_t)0x0020) /* Circular mode */ +#define DMA_CFG5_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ +#define DMA_CFG5_MINC ((uint16_t)0x0080) /* Memory increment mode */ + +#define DMA_CFG5_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CFG5_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ +#define DMA_CFG5_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define DMA_CFG5_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ +#define DMA_CFG5_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ +#define DMA_CFG5_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define DMA_CFG5_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ +#define DMA_CFG5_PL_0 ((uint16_t)0x1000) /* Bit 0 */ +#define DMA_CFG5_PL_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define DMA_CFG5_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode enable */ + +/******************* Bit definition for DMA_CFG6 register *******************/ +#define DMA_CFG6_EN ((uint16_t)0x0001) /* Channel enable */ +#define DMA_CFG6_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ +#define DMA_CFG6_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ +#define DMA_CFG6_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ +#define DMA_CFG6_DIR ((uint16_t)0x0010) /* Data transfer direction */ +#define DMA_CFG6_CIRC ((uint16_t)0x0020) /* Circular mode */ +#define DMA_CFG6_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ +#define DMA_CFG6_MINC ((uint16_t)0x0080) /* Memory increment mode */ + +#define DMA_CFG6_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CFG6_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ +#define DMA_CFG6_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define DMA_CFG6_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ +#define DMA_CFG6_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ +#define DMA_CFG6_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define DMA_CFG6_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ +#define DMA_CFG6_PL_0 ((uint16_t)0x1000) /* Bit 0 */ +#define DMA_CFG6_PL_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define DMA_CFG6_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode */ + +/******************* Bit definition for DMA_CFG7 register *******************/ +#define DMA_CFG7_EN ((uint16_t)0x0001) /* Channel enable */ +#define DMA_CFG7_TCIE ((uint16_t)0x0002) /* Transfer complete interrupt enable */ +#define DMA_CFG7_HTIE ((uint16_t)0x0004) /* Half Transfer interrupt enable */ +#define DMA_CFG7_TEIE ((uint16_t)0x0008) /* Transfer error interrupt enable */ +#define DMA_CFG7_DIR ((uint16_t)0x0010) /* Data transfer direction */ +#define DMA_CFG7_CIRC ((uint16_t)0x0020) /* Circular mode */ +#define DMA_CFG7_PINC ((uint16_t)0x0040) /* Peripheral increment mode */ +#define DMA_CFG7_MINC ((uint16_t)0x0080) /* Memory increment mode */ + +#define DMA_CFG7_PSIZE ((uint16_t)0x0300) /* PSIZE[1:0] bits (Peripheral size) */ +#define DMA_CFG7_PSIZE_0 ((uint16_t)0x0100) /* Bit 0 */ +#define DMA_CFG7_PSIZE_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define DMA_CFG7_MSIZE ((uint16_t)0x0C00) /* MSIZE[1:0] bits (Memory size) */ +#define DMA_CFG7_MSIZE_0 ((uint16_t)0x0400) /* Bit 0 */ +#define DMA_CFG7_MSIZE_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define DMA_CFG7_PL ((uint16_t)0x3000) /* PL[1:0] bits (Channel Priority level) */ +#define DMA_CFG7_PL_0 ((uint16_t)0x1000) /* Bit 0 */ +#define DMA_CFG7_PL_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define DMA_CFG7_MEM2MEM ((uint16_t)0x4000) /* Memory to memory mode enable */ + +/****************** Bit definition for DMA_CNTR1 register ******************/ +#define DMA_CNTR1_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ + +/****************** Bit definition for DMA_CNTR2 register ******************/ +#define DMA_CNTR2_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ + +/****************** Bit definition for DMA_CNTR3 register ******************/ +#define DMA_CNTR3_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ + +/****************** Bit definition for DMA_CNTR4 register ******************/ +#define DMA_CNTR4_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ + +/****************** Bit definition for DMA_CNTR5 register ******************/ +#define DMA_CNTR5_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ + +/****************** Bit definition for DMA_CNTR6 register ******************/ +#define DMA_CNTR6_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ + +/****************** Bit definition for DMA_CNTR7 register ******************/ +#define DMA_CNTR7_NDT ((uint16_t)0xFFFF) /* Number of data to Transfer */ + +/****************** Bit definition for DMA_PADDR1 register *******************/ +#define DMA_PADDR1_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ + +/****************** Bit definition for DMA_PADDR2 register *******************/ +#define DMA_PADDR2_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ + +/****************** Bit definition for DMA_PADDR3 register *******************/ +#define DMA_PADDR3_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ + +/****************** Bit definition for DMA_PADDR4 register *******************/ +#define DMA_PADDR4_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ + +/****************** Bit definition for DMA_PADDR5 register *******************/ +#define DMA_PADDR5_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ + +/****************** Bit definition for DMA_PADDR6 register *******************/ +#define DMA_PADDR6_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ + +/****************** Bit definition for DMA_PADDR7 register *******************/ +#define DMA_PADDR7_PA ((uint32_t)0xFFFFFFFF) /* Peripheral Address */ + +/****************** Bit definition for DMA_MADDR1 register *******************/ +#define DMA_MADDR1_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ + +/****************** Bit definition for DMA_MADDR2 register *******************/ +#define DMA_MADDR2_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ + +/****************** Bit definition for DMA_MADDR3 register *******************/ +#define DMA_MADDR3_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ + +/****************** Bit definition for DMA_MADDR4 register *******************/ +#define DMA_MADDR4_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ + +/****************** Bit definition for DMA_MADDR5 register *******************/ +#define DMA_MADDR5_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ + +/****************** Bit definition for DMA_MADDR6 register *******************/ +#define DMA_MADDR6_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ + +/****************** Bit definition for DMA_MADDR7 register *******************/ +#define DMA_MADDR7_MA ((uint32_t)0xFFFFFFFF) /* Memory Address */ + + +/******************************************************************************/ +/* External Interrupt/Event Controller */ +/******************************************************************************/ + +/******************* Bit definition for EXTI_INTENR register *******************/ +#define EXTI_INTENR_MR0 ((uint32_t)0x00000001) /* Interrupt Mask on line 0 */ +#define EXTI_INTENR_MR1 ((uint32_t)0x00000002) /* Interrupt Mask on line 1 */ +#define EXTI_INTENR_MR2 ((uint32_t)0x00000004) /* Interrupt Mask on line 2 */ +#define EXTI_INTENR_MR3 ((uint32_t)0x00000008) /* Interrupt Mask on line 3 */ +#define EXTI_INTENR_MR4 ((uint32_t)0x00000010) /* Interrupt Mask on line 4 */ +#define EXTI_INTENR_MR5 ((uint32_t)0x00000020) /* Interrupt Mask on line 5 */ +#define EXTI_INTENR_MR6 ((uint32_t)0x00000040) /* Interrupt Mask on line 6 */ +#define EXTI_INTENR_MR7 ((uint32_t)0x00000080) /* Interrupt Mask on line 7 */ +#define EXTI_INTENR_MR8 ((uint32_t)0x00000100) /* Interrupt Mask on line 8 */ +#define EXTI_INTENR_MR9 ((uint32_t)0x00000200) /* Interrupt Mask on line 9 */ +#define EXTI_INTENR_MR10 ((uint32_t)0x00000400) /* Interrupt Mask on line 10 */ +#define EXTI_INTENR_MR11 ((uint32_t)0x00000800) /* Interrupt Mask on line 11 */ +#define EXTI_INTENR_MR12 ((uint32_t)0x00001000) /* Interrupt Mask on line 12 */ +#define EXTI_INTENR_MR13 ((uint32_t)0x00002000) /* Interrupt Mask on line 13 */ +#define EXTI_INTENR_MR14 ((uint32_t)0x00004000) /* Interrupt Mask on line 14 */ +#define EXTI_INTENR_MR15 ((uint32_t)0x00008000) /* Interrupt Mask on line 15 */ +#define EXTI_INTENR_MR16 ((uint32_t)0x00010000) /* Interrupt Mask on line 16 */ +#define EXTI_INTENR_MR17 ((uint32_t)0x00020000) /* Interrupt Mask on line 17 */ +#define EXTI_INTENR_MR18 ((uint32_t)0x00040000) /* Interrupt Mask on line 18 */ +#define EXTI_INTENR_MR19 ((uint32_t)0x00080000) /* Interrupt Mask on line 19 */ + +/******************* Bit definition for EXTI_EVENR register *******************/ +#define EXTI_EVENR_MR0 ((uint32_t)0x00000001) /* Event Mask on line 0 */ +#define EXTI_EVENR_MR1 ((uint32_t)0x00000002) /* Event Mask on line 1 */ +#define EXTI_EVENR_MR2 ((uint32_t)0x00000004) /* Event Mask on line 2 */ +#define EXTI_EVENR_MR3 ((uint32_t)0x00000008) /* Event Mask on line 3 */ +#define EXTI_EVENR_MR4 ((uint32_t)0x00000010) /* Event Mask on line 4 */ +#define EXTI_EVENR_MR5 ((uint32_t)0x00000020) /* Event Mask on line 5 */ +#define EXTI_EVENR_MR6 ((uint32_t)0x00000040) /* Event Mask on line 6 */ +#define EXTI_EVENR_MR7 ((uint32_t)0x00000080) /* Event Mask on line 7 */ +#define EXTI_EVENR_MR8 ((uint32_t)0x00000100) /* Event Mask on line 8 */ +#define EXTI_EVENR_MR9 ((uint32_t)0x00000200) /* Event Mask on line 9 */ +#define EXTI_EVENR_MR10 ((uint32_t)0x00000400) /* Event Mask on line 10 */ +#define EXTI_EVENR_MR11 ((uint32_t)0x00000800) /* Event Mask on line 11 */ +#define EXTI_EVENR_MR12 ((uint32_t)0x00001000) /* Event Mask on line 12 */ +#define EXTI_EVENR_MR13 ((uint32_t)0x00002000) /* Event Mask on line 13 */ +#define EXTI_EVENR_MR14 ((uint32_t)0x00004000) /* Event Mask on line 14 */ +#define EXTI_EVENR_MR15 ((uint32_t)0x00008000) /* Event Mask on line 15 */ +#define EXTI_EVENR_MR16 ((uint32_t)0x00010000) /* Event Mask on line 16 */ +#define EXTI_EVENR_MR17 ((uint32_t)0x00020000) /* Event Mask on line 17 */ +#define EXTI_EVENR_MR18 ((uint32_t)0x00040000) /* Event Mask on line 18 */ +#define EXTI_EVENR_MR19 ((uint32_t)0x00080000) /* Event Mask on line 19 */ + +/****************** Bit definition for EXTI_RTENR register *******************/ +#define EXTI_RTENR_TR0 ((uint32_t)0x00000001) /* Rising trigger event configuration bit of line 0 */ +#define EXTI_RTENR_TR1 ((uint32_t)0x00000002) /* Rising trigger event configuration bit of line 1 */ +#define EXTI_RTENR_TR2 ((uint32_t)0x00000004) /* Rising trigger event configuration bit of line 2 */ +#define EXTI_RTENR_TR3 ((uint32_t)0x00000008) /* Rising trigger event configuration bit of line 3 */ +#define EXTI_RTENR_TR4 ((uint32_t)0x00000010) /* Rising trigger event configuration bit of line 4 */ +#define EXTI_RTENR_TR5 ((uint32_t)0x00000020) /* Rising trigger event configuration bit of line 5 */ +#define EXTI_RTENR_TR6 ((uint32_t)0x00000040) /* Rising trigger event configuration bit of line 6 */ +#define EXTI_RTENR_TR7 ((uint32_t)0x00000080) /* Rising trigger event configuration bit of line 7 */ +#define EXTI_RTENR_TR8 ((uint32_t)0x00000100) /* Rising trigger event configuration bit of line 8 */ +#define EXTI_RTENR_TR9 ((uint32_t)0x00000200) /* Rising trigger event configuration bit of line 9 */ +#define EXTI_RTENR_TR10 ((uint32_t)0x00000400) /* Rising trigger event configuration bit of line 10 */ +#define EXTI_RTENR_TR11 ((uint32_t)0x00000800) /* Rising trigger event configuration bit of line 11 */ +#define EXTI_RTENR_TR12 ((uint32_t)0x00001000) /* Rising trigger event configuration bit of line 12 */ +#define EXTI_RTENR_TR13 ((uint32_t)0x00002000) /* Rising trigger event configuration bit of line 13 */ +#define EXTI_RTENR_TR14 ((uint32_t)0x00004000) /* Rising trigger event configuration bit of line 14 */ +#define EXTI_RTENR_TR15 ((uint32_t)0x00008000) /* Rising trigger event configuration bit of line 15 */ +#define EXTI_RTENR_TR16 ((uint32_t)0x00010000) /* Rising trigger event configuration bit of line 16 */ +#define EXTI_RTENR_TR17 ((uint32_t)0x00020000) /* Rising trigger event configuration bit of line 17 */ +#define EXTI_RTENR_TR18 ((uint32_t)0x00040000) /* Rising trigger event configuration bit of line 18 */ +#define EXTI_RTENR_TR19 ((uint32_t)0x00080000) /* Rising trigger event configuration bit of line 19 */ + +/****************** Bit definition for EXTI_FTENR register *******************/ +#define EXTI_FTENR_TR0 ((uint32_t)0x00000001) /* Falling trigger event configuration bit of line 0 */ +#define EXTI_FTENR_TR1 ((uint32_t)0x00000002) /* Falling trigger event configuration bit of line 1 */ +#define EXTI_FTENR_TR2 ((uint32_t)0x00000004) /* Falling trigger event configuration bit of line 2 */ +#define EXTI_FTENR_TR3 ((uint32_t)0x00000008) /* Falling trigger event configuration bit of line 3 */ +#define EXTI_FTENR_TR4 ((uint32_t)0x00000010) /* Falling trigger event configuration bit of line 4 */ +#define EXTI_FTENR_TR5 ((uint32_t)0x00000020) /* Falling trigger event configuration bit of line 5 */ +#define EXTI_FTENR_TR6 ((uint32_t)0x00000040) /* Falling trigger event configuration bit of line 6 */ +#define EXTI_FTENR_TR7 ((uint32_t)0x00000080) /* Falling trigger event configuration bit of line 7 */ +#define EXTI_FTENR_TR8 ((uint32_t)0x00000100) /* Falling trigger event configuration bit of line 8 */ +#define EXTI_FTENR_TR9 ((uint32_t)0x00000200) /* Falling trigger event configuration bit of line 9 */ +#define EXTI_FTENR_TR10 ((uint32_t)0x00000400) /* Falling trigger event configuration bit of line 10 */ +#define EXTI_FTENR_TR11 ((uint32_t)0x00000800) /* Falling trigger event configuration bit of line 11 */ +#define EXTI_FTENR_TR12 ((uint32_t)0x00001000) /* Falling trigger event configuration bit of line 12 */ +#define EXTI_FTENR_TR13 ((uint32_t)0x00002000) /* Falling trigger event configuration bit of line 13 */ +#define EXTI_FTENR_TR14 ((uint32_t)0x00004000) /* Falling trigger event configuration bit of line 14 */ +#define EXTI_FTENR_TR15 ((uint32_t)0x00008000) /* Falling trigger event configuration bit of line 15 */ +#define EXTI_FTENR_TR16 ((uint32_t)0x00010000) /* Falling trigger event configuration bit of line 16 */ +#define EXTI_FTENR_TR17 ((uint32_t)0x00020000) /* Falling trigger event configuration bit of line 17 */ +#define EXTI_FTENR_TR18 ((uint32_t)0x00040000) /* Falling trigger event configuration bit of line 18 */ +#define EXTI_FTENR_TR19 ((uint32_t)0x00080000) /* Falling trigger event configuration bit of line 19 */ + +/****************** Bit definition for EXTI_SWIEVR register ******************/ +#define EXTI_SWIEVR_SWIEVR0 ((uint32_t)0x00000001) /* Software Interrupt on line 0 */ +#define EXTI_SWIEVR_SWIEVR1 ((uint32_t)0x00000002) /* Software Interrupt on line 1 */ +#define EXTI_SWIEVR_SWIEVR2 ((uint32_t)0x00000004) /* Software Interrupt on line 2 */ +#define EXTI_SWIEVR_SWIEVR3 ((uint32_t)0x00000008) /* Software Interrupt on line 3 */ +#define EXTI_SWIEVR_SWIEVR4 ((uint32_t)0x00000010) /* Software Interrupt on line 4 */ +#define EXTI_SWIEVR_SWIEVR5 ((uint32_t)0x00000020) /* Software Interrupt on line 5 */ +#define EXTI_SWIEVR_SWIEVR6 ((uint32_t)0x00000040) /* Software Interrupt on line 6 */ +#define EXTI_SWIEVR_SWIEVR7 ((uint32_t)0x00000080) /* Software Interrupt on line 7 */ +#define EXTI_SWIEVR_SWIEVR8 ((uint32_t)0x00000100) /* Software Interrupt on line 8 */ +#define EXTI_SWIEVR_SWIEVR9 ((uint32_t)0x00000200) /* Software Interrupt on line 9 */ +#define EXTI_SWIEVR_SWIEVR10 ((uint32_t)0x00000400) /* Software Interrupt on line 10 */ +#define EXTI_SWIEVR_SWIEVR11 ((uint32_t)0x00000800) /* Software Interrupt on line 11 */ +#define EXTI_SWIEVR_SWIEVR12 ((uint32_t)0x00001000) /* Software Interrupt on line 12 */ +#define EXTI_SWIEVR_SWIEVR13 ((uint32_t)0x00002000) /* Software Interrupt on line 13 */ +#define EXTI_SWIEVR_SWIEVR14 ((uint32_t)0x00004000) /* Software Interrupt on line 14 */ +#define EXTI_SWIEVR_SWIEVR15 ((uint32_t)0x00008000) /* Software Interrupt on line 15 */ +#define EXTI_SWIEVR_SWIEVR16 ((uint32_t)0x00010000) /* Software Interrupt on line 16 */ +#define EXTI_SWIEVR_SWIEVR17 ((uint32_t)0x00020000) /* Software Interrupt on line 17 */ +#define EXTI_SWIEVR_SWIEVR18 ((uint32_t)0x00040000) /* Software Interrupt on line 18 */ +#define EXTI_SWIEVR_SWIEVR19 ((uint32_t)0x00080000) /* Software Interrupt on line 19 */ + +/******************* Bit definition for EXTI_INTFR register ********************/ +#define EXTI_INTF_INTF0 ((uint32_t)0x00000001) /* Pending bit for line 0 */ +#define EXTI_INTF_INTF1 ((uint32_t)0x00000002) /* Pending bit for line 1 */ +#define EXTI_INTF_INTF2 ((uint32_t)0x00000004) /* Pending bit for line 2 */ +#define EXTI_INTF_INTF3 ((uint32_t)0x00000008) /* Pending bit for line 3 */ +#define EXTI_INTF_INTF4 ((uint32_t)0x00000010) /* Pending bit for line 4 */ +#define EXTI_INTF_INTF5 ((uint32_t)0x00000020) /* Pending bit for line 5 */ +#define EXTI_INTF_INTF6 ((uint32_t)0x00000040) /* Pending bit for line 6 */ +#define EXTI_INTF_INTF7 ((uint32_t)0x00000080) /* Pending bit for line 7 */ +#define EXTI_INTF_INTF8 ((uint32_t)0x00000100) /* Pending bit for line 8 */ +#define EXTI_INTF_INTF9 ((uint32_t)0x00000200) /* Pending bit for line 9 */ +#define EXTI_INTF_INTF10 ((uint32_t)0x00000400) /* Pending bit for line 10 */ +#define EXTI_INTF_INTF11 ((uint32_t)0x00000800) /* Pending bit for line 11 */ +#define EXTI_INTF_INTF12 ((uint32_t)0x00001000) /* Pending bit for line 12 */ +#define EXTI_INTF_INTF13 ((uint32_t)0x00002000) /* Pending bit for line 13 */ +#define EXTI_INTF_INTF14 ((uint32_t)0x00004000) /* Pending bit for line 14 */ +#define EXTI_INTF_INTF15 ((uint32_t)0x00008000) /* Pending bit for line 15 */ +#define EXTI_INTF_INTF16 ((uint32_t)0x00010000) /* Pending bit for line 16 */ +#define EXTI_INTF_INTF17 ((uint32_t)0x00020000) /* Pending bit for line 17 */ +#define EXTI_INTF_INTF18 ((uint32_t)0x00040000) /* Pending bit for line 18 */ +#define EXTI_INTF_INTF19 ((uint32_t)0x00080000) /* Pending bit for line 19 */ + +/******************************************************************************/ +/* FLASH and Option Bytes Registers */ +/******************************************************************************/ + + +/******************* Bit definition for FLASH_ACTLR register ******************/ +#define FLASH_ACTLR_LATENCY ((uint8_t)0x03) /* LATENCY[2:0] bits (Latency) */ +#define FLASH_ACTLR_LATENCY_0 ((uint8_t)0x00) /* Bit 0 */ +#define FLASH_ACTLR_LATENCY_1 ((uint8_t)0x01) /* Bit 0 */ +#define FLASH_ACTLR_LATENCY_2 ((uint8_t)0x02) /* Bit 1 */ + +#define FLASH_ACTLR_HLFCYA ((uint8_t)0x08) /* Flash Half Cycle Access Enable */ +#define FLASH_ACTLR_PRFTBE ((uint8_t)0x10) /* Prefetch Buffer Enable */ +#define FLASH_ACTLR_PRFTBS ((uint8_t)0x20) /* Prefetch Buffer Status */ + +/****************** Bit definition for FLASH_KEYR register ******************/ +#define FLASH_KEYR_FKEYR ((uint32_t)0xFFFFFFFF) /* FPEC Key */ + +/***************** Bit definition for FLASH_OBKEYR register ****************/ +#define FLASH_OBKEYR_OBKEYR ((uint32_t)0xFFFFFFFF) /* Option Byte Key */ + +/****************** Bit definition for FLASH_STATR register *******************/ +#define FLASH_STATR_BSY ((uint8_t)0x01) /* Busy */ +#define FLASH_STATR_PGERR ((uint8_t)0x04) /* Programming Error */ +#define FLASH_STATR_WRPRTERR ((uint8_t)0x10) /* Write Protection Error */ +#define FLASH_STATR_EOP ((uint8_t)0x20) /* End of operation */ + +/******************* Bit definition for FLASH_CTLR register *******************/ +#define FLASH_CTLR_PG ((uint16_t)0x0001) /* Programming */ +#define FLASH_CTLR_PER ((uint16_t)0x0002) /* Page Erase */ +#define FLASH_CTLR_MER ((uint16_t)0x0004) /* Mass Erase */ +#define FLASH_CTLR_OPTPG ((uint16_t)0x0010) /* Option Byte Programming */ +#define FLASH_CTLR_OPTER ((uint16_t)0x0020) /* Option Byte Erase */ +#define FLASH_CTLR_STRT ((uint16_t)0x0040) /* Start */ +#define FLASH_CTLR_LOCK ((uint16_t)0x0080) /* Lock */ +#define FLASH_CTLR_OPTWRE ((uint16_t)0x0200) /* Option Bytes Write Enable */ +#define FLASH_CTLR_ERRIE ((uint16_t)0x0400) /* Error Interrupt Enable */ +#define FLASH_CTLR_EOPIE ((uint16_t)0x1000) /* End of operation interrupt enable */ +#define FLASH_CTLR_PAGE_PG ((uint16_t)0x00010000) /* Page Programming 128Byte */ +#define FLASH_CTLR_PAGE_ER ((uint16_t)0x00020000) /* Page Erase 128Byte */ +#define FLASH_CTLR_BUF_LOAD ((uint16_t)0x00040000) /* Buffer Load */ +#define FLASH_CTLR_BUF_RST ((uint16_t)0x00080000) /* Buffer Reset */ + +/******************* Bit definition for FLASH_ADDR register *******************/ +#define FLASH_ADDR_FAR ((uint32_t)0xFFFFFFFF) /* Flash Address */ + +/****************** Bit definition for FLASH_OBR register *******************/ +#define FLASH_OBR_OPTERR ((uint16_t)0x0001) /* Option Byte Error */ +#define FLASH_OBR_RDPRT ((uint16_t)0x0002) /* Read protection */ + +#define FLASH_OBR_USER ((uint16_t)0x03FC) /* User Option Bytes */ +#define FLASH_OBR_WDG_SW ((uint16_t)0x0004) /* WDG_SW */ +#define FLASH_OBR_nRST_STOP ((uint16_t)0x0008) /* nRST_STOP */ +#define FLASH_OBR_nRST_STDBY ((uint16_t)0x0010) /* nRST_STDBY */ +#define FLASH_OBR_BFB2 ((uint16_t)0x0020) /* BFB2 */ + +/****************** Bit definition for FLASH_WPR register ******************/ +#define FLASH_WPR_WRP ((uint32_t)0xFFFFFFFF) /* Write Protect */ + +/****************** Bit definition for FLASH_RDPR register *******************/ +#define FLASH_RDPR_RDPR ((uint32_t)0x000000FF) /* Read protection option byte */ +#define FLASH_RDPR_nRDPR ((uint32_t)0x0000FF00) /* Read protection complemented option byte */ + +/****************** Bit definition for FLASH_USER register ******************/ +#define FLASH_USER_USER ((uint32_t)0x00FF0000) /* User option byte */ +#define FLASH_USER_nUSER ((uint32_t)0xFF000000) /* User complemented option byte */ + +/****************** Bit definition for FLASH_Data0 register *****************/ +#define FLASH_Data0_Data0 ((uint32_t)0x000000FF) /* User data storage option byte */ +#define FLASH_Data0_nData0 ((uint32_t)0x0000FF00) /* User data storage complemented option byte */ + +/****************** Bit definition for FLASH_Data1 register *****************/ +#define FLASH_Data1_Data1 ((uint32_t)0x00FF0000) /* User data storage option byte */ +#define FLASH_Data1_nData1 ((uint32_t)0xFF000000) /* User data storage complemented option byte */ + +/****************** Bit definition for FLASH_WRPR0 register ******************/ +#define FLASH_WRPR0_WRPR0 ((uint32_t)0x000000FF) /* Flash memory write protection option bytes */ +#define FLASH_WRPR0_nWRPR0 ((uint32_t)0x0000FF00) /* Flash memory write protection complemented option bytes */ + +/****************** Bit definition for FLASH_WRPR1 register ******************/ +#define FLASH_WRPR1_WRPR1 ((uint32_t)0x00FF0000) /* Flash memory write protection option bytes */ +#define FLASH_WRPR1_nWRPR1 ((uint32_t)0xFF000000) /* Flash memory write protection complemented option bytes */ + +/****************** Bit definition for FLASH_WRPR2 register ******************/ +#define FLASH_WRPR2_WRPR2 ((uint32_t)0x000000FF) /* Flash memory write protection option bytes */ +#define FLASH_WRPR2_nWRPR2 ((uint32_t)0x0000FF00) /* Flash memory write protection complemented option bytes */ + +/****************** Bit definition for FLASH_WRPR3 register ******************/ +#define FLASH_WRPR3_WRPR3 ((uint32_t)0x00FF0000) /* Flash memory write protection option bytes */ +#define FLASH_WRPR3_nWRPR3 ((uint32_t)0xFF000000) /* Flash memory write protection complemented option bytes */ + +/******************************************************************************/ +/* General Purpose and Alternate Function I/O */ +/******************************************************************************/ + +/******************* Bit definition for GPIO_CFGLR register *******************/ +#define GPIO_CFGLR_MODE ((uint32_t)0x33333333) /* Port x mode bits */ + +#define GPIO_CFGLR_MODE0 ((uint32_t)0x00000003) /* MODE0[1:0] bits (Port x mode bits, pin 0) */ +#define GPIO_CFGLR_MODE0_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define GPIO_CFGLR_MODE0_1 ((uint32_t)0x00000002) /* Bit 1 */ + +#define GPIO_CFGLR_MODE1 ((uint32_t)0x00000030) /* MODE1[1:0] bits (Port x mode bits, pin 1) */ +#define GPIO_CFGLR_MODE1_0 ((uint32_t)0x00000010) /* Bit 0 */ +#define GPIO_CFGLR_MODE1_1 ((uint32_t)0x00000020) /* Bit 1 */ + +#define GPIO_CFGLR_MODE2 ((uint32_t)0x00000300) /* MODE2[1:0] bits (Port x mode bits, pin 2) */ +#define GPIO_CFGLR_MODE2_0 ((uint32_t)0x00000100) /* Bit 0 */ +#define GPIO_CFGLR_MODE2_1 ((uint32_t)0x00000200) /* Bit 1 */ + +#define GPIO_CFGLR_MODE3 ((uint32_t)0x00003000) /* MODE3[1:0] bits (Port x mode bits, pin 3) */ +#define GPIO_CFGLR_MODE3_0 ((uint32_t)0x00001000) /* Bit 0 */ +#define GPIO_CFGLR_MODE3_1 ((uint32_t)0x00002000) /* Bit 1 */ + +#define GPIO_CFGLR_MODE4 ((uint32_t)0x00030000) /* MODE4[1:0] bits (Port x mode bits, pin 4) */ +#define GPIO_CFGLR_MODE4_0 ((uint32_t)0x00010000) /* Bit 0 */ +#define GPIO_CFGLR_MODE4_1 ((uint32_t)0x00020000) /* Bit 1 */ + +#define GPIO_CFGLR_MODE5 ((uint32_t)0x00300000) /* MODE5[1:0] bits (Port x mode bits, pin 5) */ +#define GPIO_CFGLR_MODE5_0 ((uint32_t)0x00100000) /* Bit 0 */ +#define GPIO_CFGLR_MODE5_1 ((uint32_t)0x00200000) /* Bit 1 */ + +#define GPIO_CFGLR_MODE6 ((uint32_t)0x03000000) /* MODE6[1:0] bits (Port x mode bits, pin 6) */ +#define GPIO_CFGLR_MODE6_0 ((uint32_t)0x01000000) /* Bit 0 */ +#define GPIO_CFGLR_MODE6_1 ((uint32_t)0x02000000) /* Bit 1 */ + +#define GPIO_CFGLR_MODE7 ((uint32_t)0x30000000) /* MODE7[1:0] bits (Port x mode bits, pin 7) */ +#define GPIO_CFGLR_MODE7_0 ((uint32_t)0x10000000) /* Bit 0 */ +#define GPIO_CFGLR_MODE7_1 ((uint32_t)0x20000000) /* Bit 1 */ + +#define GPIO_CFGLR_CNF ((uint32_t)0xCCCCCCCC) /* Port x configuration bits */ + +#define GPIO_CFGLR_CNF0 ((uint32_t)0x0000000C) /* CNF0[1:0] bits (Port x configuration bits, pin 0) */ +#define GPIO_CFGLR_CNF0_0 ((uint32_t)0x00000004) /* Bit 0 */ +#define GPIO_CFGLR_CNF0_1 ((uint32_t)0x00000008) /* Bit 1 */ + +#define GPIO_CFGLR_CNF1 ((uint32_t)0x000000C0) /* CNF1[1:0] bits (Port x configuration bits, pin 1) */ +#define GPIO_CFGLR_CNF1_0 ((uint32_t)0x00000040) /* Bit 0 */ +#define GPIO_CFGLR_CNF1_1 ((uint32_t)0x00000080) /* Bit 1 */ + +#define GPIO_CFGLR_CNF2 ((uint32_t)0x00000C00) /* CNF2[1:0] bits (Port x configuration bits, pin 2) */ +#define GPIO_CFGLR_CNF2_0 ((uint32_t)0x00000400) /* Bit 0 */ +#define GPIO_CFGLR_CNF2_1 ((uint32_t)0x00000800) /* Bit 1 */ + +#define GPIO_CFGLR_CNF3 ((uint32_t)0x0000C000) /* CNF3[1:0] bits (Port x configuration bits, pin 3) */ +#define GPIO_CFGLR_CNF3_0 ((uint32_t)0x00004000) /* Bit 0 */ +#define GPIO_CFGLR_CNF3_1 ((uint32_t)0x00008000) /* Bit 1 */ + +#define GPIO_CFGLR_CNF4 ((uint32_t)0x000C0000) /* CNF4[1:0] bits (Port x configuration bits, pin 4) */ +#define GPIO_CFGLR_CNF4_0 ((uint32_t)0x00040000) /* Bit 0 */ +#define GPIO_CFGLR_CNF4_1 ((uint32_t)0x00080000) /* Bit 1 */ + +#define GPIO_CFGLR_CNF5 ((uint32_t)0x00C00000) /* CNF5[1:0] bits (Port x configuration bits, pin 5) */ +#define GPIO_CFGLR_CNF5_0 ((uint32_t)0x00400000) /* Bit 0 */ +#define GPIO_CFGLR_CNF5_1 ((uint32_t)0x00800000) /* Bit 1 */ + +#define GPIO_CFGLR_CNF6 ((uint32_t)0x0C000000) /* CNF6[1:0] bits (Port x configuration bits, pin 6) */ +#define GPIO_CFGLR_CNF6_0 ((uint32_t)0x04000000) /* Bit 0 */ +#define GPIO_CFGLR_CNF6_1 ((uint32_t)0x08000000) /* Bit 1 */ + +#define GPIO_CFGLR_CNF7 ((uint32_t)0xC0000000) /* CNF7[1:0] bits (Port x configuration bits, pin 7) */ +#define GPIO_CFGLR_CNF7_0 ((uint32_t)0x40000000) /* Bit 0 */ +#define GPIO_CFGLR_CNF7_1 ((uint32_t)0x80000000) /* Bit 1 */ + +/******************* Bit definition for GPIO_CFGHR register *******************/ +#define GPIO_CFGHR_MODE ((uint32_t)0x33333333) /* Port x mode bits */ + +#define GPIO_CFGHR_MODE8 ((uint32_t)0x00000003) /* MODE8[1:0] bits (Port x mode bits, pin 8) */ +#define GPIO_CFGHR_MODE8_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define GPIO_CFGHR_MODE8_1 ((uint32_t)0x00000002) /* Bit 1 */ + +#define GPIO_CFGHR_MODE9 ((uint32_t)0x00000030) /* MODE9[1:0] bits (Port x mode bits, pin 9) */ +#define GPIO_CFGHR_MODE9_0 ((uint32_t)0x00000010) /* Bit 0 */ +#define GPIO_CFGHR_MODE9_1 ((uint32_t)0x00000020) /* Bit 1 */ + +#define GPIO_CFGHR_MODE10 ((uint32_t)0x00000300) /* MODE10[1:0] bits (Port x mode bits, pin 10) */ +#define GPIO_CFGHR_MODE10_0 ((uint32_t)0x00000100) /* Bit 0 */ +#define GPIO_CFGHR_MODE10_1 ((uint32_t)0x00000200) /* Bit 1 */ + +#define GPIO_CFGHR_MODE11 ((uint32_t)0x00003000) /* MODE11[1:0] bits (Port x mode bits, pin 11) */ +#define GPIO_CFGHR_MODE11_0 ((uint32_t)0x00001000) /* Bit 0 */ +#define GPIO_CFGHR_MODE11_1 ((uint32_t)0x00002000) /* Bit 1 */ + +#define GPIO_CFGHR_MODE12 ((uint32_t)0x00030000) /* MODE12[1:0] bits (Port x mode bits, pin 12) */ +#define GPIO_CFGHR_MODE12_0 ((uint32_t)0x00010000) /* Bit 0 */ +#define GPIO_CFGHR_MODE12_1 ((uint32_t)0x00020000) /* Bit 1 */ + +#define GPIO_CFGHR_MODE13 ((uint32_t)0x00300000) /* MODE13[1:0] bits (Port x mode bits, pin 13) */ +#define GPIO_CFGHR_MODE13_0 ((uint32_t)0x00100000) /* Bit 0 */ +#define GPIO_CFGHR_MODE13_1 ((uint32_t)0x00200000) /* Bit 1 */ + +#define GPIO_CFGHR_MODE14 ((uint32_t)0x03000000) /* MODE14[1:0] bits (Port x mode bits, pin 14) */ +#define GPIO_CFGHR_MODE14_0 ((uint32_t)0x01000000) /* Bit 0 */ +#define GPIO_CFGHR_MODE14_1 ((uint32_t)0x02000000) /* Bit 1 */ + +#define GPIO_CFGHR_MODE15 ((uint32_t)0x30000000) /* MODE15[1:0] bits (Port x mode bits, pin 15) */ +#define GPIO_CFGHR_MODE15_0 ((uint32_t)0x10000000) /* Bit 0 */ +#define GPIO_CFGHR_MODE15_1 ((uint32_t)0x20000000) /* Bit 1 */ + +#define GPIO_CFGHR_CNF ((uint32_t)0xCCCCCCCC) /* Port x configuration bits */ + +#define GPIO_CFGHR_CNF8 ((uint32_t)0x0000000C) /* CNF8[1:0] bits (Port x configuration bits, pin 8) */ +#define GPIO_CFGHR_CNF8_0 ((uint32_t)0x00000004) /* Bit 0 */ +#define GPIO_CFGHR_CNF8_1 ((uint32_t)0x00000008) /* Bit 1 */ + +#define GPIO_CFGHR_CNF9 ((uint32_t)0x000000C0) /* CNF9[1:0] bits (Port x configuration bits, pin 9) */ +#define GPIO_CFGHR_CNF9_0 ((uint32_t)0x00000040) /* Bit 0 */ +#define GPIO_CFGHR_CNF9_1 ((uint32_t)0x00000080) /* Bit 1 */ + +#define GPIO_CFGHR_CNF10 ((uint32_t)0x00000C00) /* CNF10[1:0] bits (Port x configuration bits, pin 10) */ +#define GPIO_CFGHR_CNF10_0 ((uint32_t)0x00000400) /* Bit 0 */ +#define GPIO_CFGHR_CNF10_1 ((uint32_t)0x00000800) /* Bit 1 */ + +#define GPIO_CFGHR_CNF11 ((uint32_t)0x0000C000) /* CNF11[1:0] bits (Port x configuration bits, pin 11) */ +#define GPIO_CFGHR_CNF11_0 ((uint32_t)0x00004000) /* Bit 0 */ +#define GPIO_CFGHR_CNF11_1 ((uint32_t)0x00008000) /* Bit 1 */ + +#define GPIO_CFGHR_CNF12 ((uint32_t)0x000C0000) /* CNF12[1:0] bits (Port x configuration bits, pin 12) */ +#define GPIO_CFGHR_CNF12_0 ((uint32_t)0x00040000) /* Bit 0 */ +#define GPIO_CFGHR_CNF12_1 ((uint32_t)0x00080000) /* Bit 1 */ + +#define GPIO_CFGHR_CNF13 ((uint32_t)0x00C00000) /* CNF13[1:0] bits (Port x configuration bits, pin 13) */ +#define GPIO_CFGHR_CNF13_0 ((uint32_t)0x00400000) /* Bit 0 */ +#define GPIO_CFGHR_CNF13_1 ((uint32_t)0x00800000) /* Bit 1 */ + +#define GPIO_CFGHR_CNF14 ((uint32_t)0x0C000000) /* CNF14[1:0] bits (Port x configuration bits, pin 14) */ +#define GPIO_CFGHR_CNF14_0 ((uint32_t)0x04000000) /* Bit 0 */ +#define GPIO_CFGHR_CNF14_1 ((uint32_t)0x08000000) /* Bit 1 */ + +#define GPIO_CFGHR_CNF15 ((uint32_t)0xC0000000) /* CNF15[1:0] bits (Port x configuration bits, pin 15) */ +#define GPIO_CFGHR_CNF15_0 ((uint32_t)0x40000000) /* Bit 0 */ +#define GPIO_CFGHR_CNF15_1 ((uint32_t)0x80000000) /* Bit 1 */ + +/******************* Bit definition for GPIO_INDR register *******************/ +#define GPIO_INDR_IDR0 ((uint16_t)0x0001) /* Port input data, bit 0 */ +#define GPIO_INDR_IDR1 ((uint16_t)0x0002) /* Port input data, bit 1 */ +#define GPIO_INDR_IDR2 ((uint16_t)0x0004) /* Port input data, bit 2 */ +#define GPIO_INDR_IDR3 ((uint16_t)0x0008) /* Port input data, bit 3 */ +#define GPIO_INDR_IDR4 ((uint16_t)0x0010) /* Port input data, bit 4 */ +#define GPIO_INDR_IDR5 ((uint16_t)0x0020) /* Port input data, bit 5 */ +#define GPIO_INDR_IDR6 ((uint16_t)0x0040) /* Port input data, bit 6 */ +#define GPIO_INDR_IDR7 ((uint16_t)0x0080) /* Port input data, bit 7 */ +#define GPIO_INDR_IDR8 ((uint16_t)0x0100) /* Port input data, bit 8 */ +#define GPIO_INDR_IDR9 ((uint16_t)0x0200) /* Port input data, bit 9 */ +#define GPIO_INDR_IDR10 ((uint16_t)0x0400) /* Port input data, bit 10 */ +#define GPIO_INDR_IDR11 ((uint16_t)0x0800) /* Port input data, bit 11 */ +#define GPIO_INDR_IDR12 ((uint16_t)0x1000) /* Port input data, bit 12 */ +#define GPIO_INDR_IDR13 ((uint16_t)0x2000) /* Port input data, bit 13 */ +#define GPIO_INDR_IDR14 ((uint16_t)0x4000) /* Port input data, bit 14 */ +#define GPIO_INDR_IDR15 ((uint16_t)0x8000) /* Port input data, bit 15 */ + +/******************* Bit definition for GPIO_OUTDR register *******************/ +#define GPIO_OUTDR_ODR0 ((uint16_t)0x0001) /* Port output data, bit 0 */ +#define GPIO_OUTDR_ODR1 ((uint16_t)0x0002) /* Port output data, bit 1 */ +#define GPIO_OUTDR_ODR2 ((uint16_t)0x0004) /* Port output data, bit 2 */ +#define GPIO_OUTDR_ODR3 ((uint16_t)0x0008) /* Port output data, bit 3 */ +#define GPIO_OUTDR_ODR4 ((uint16_t)0x0010) /* Port output data, bit 4 */ +#define GPIO_OUTDR_ODR5 ((uint16_t)0x0020) /* Port output data, bit 5 */ +#define GPIO_OUTDR_ODR6 ((uint16_t)0x0040) /* Port output data, bit 6 */ +#define GPIO_OUTDR_ODR7 ((uint16_t)0x0080) /* Port output data, bit 7 */ +#define GPIO_OUTDR_ODR8 ((uint16_t)0x0100) /* Port output data, bit 8 */ +#define GPIO_OUTDR_ODR9 ((uint16_t)0x0200) /* Port output data, bit 9 */ +#define GPIO_OUTDR_ODR10 ((uint16_t)0x0400) /* Port output data, bit 10 */ +#define GPIO_OUTDR_ODR11 ((uint16_t)0x0800) /* Port output data, bit 11 */ +#define GPIO_OUTDR_ODR12 ((uint16_t)0x1000) /* Port output data, bit 12 */ +#define GPIO_OUTDR_ODR13 ((uint16_t)0x2000) /* Port output data, bit 13 */ +#define GPIO_OUTDR_ODR14 ((uint16_t)0x4000) /* Port output data, bit 14 */ +#define GPIO_OUTDR_ODR15 ((uint16_t)0x8000) /* Port output data, bit 15 */ + +/****************** Bit definition for GPIO_BSHR register *******************/ +#define GPIO_BSHR_BS0 ((uint32_t)0x00000001) /* Port x Set bit 0 */ +#define GPIO_BSHR_BS1 ((uint32_t)0x00000002) /* Port x Set bit 1 */ +#define GPIO_BSHR_BS2 ((uint32_t)0x00000004) /* Port x Set bit 2 */ +#define GPIO_BSHR_BS3 ((uint32_t)0x00000008) /* Port x Set bit 3 */ +#define GPIO_BSHR_BS4 ((uint32_t)0x00000010) /* Port x Set bit 4 */ +#define GPIO_BSHR_BS5 ((uint32_t)0x00000020) /* Port x Set bit 5 */ +#define GPIO_BSHR_BS6 ((uint32_t)0x00000040) /* Port x Set bit 6 */ +#define GPIO_BSHR_BS7 ((uint32_t)0x00000080) /* Port x Set bit 7 */ +#define GPIO_BSHR_BS8 ((uint32_t)0x00000100) /* Port x Set bit 8 */ +#define GPIO_BSHR_BS9 ((uint32_t)0x00000200) /* Port x Set bit 9 */ +#define GPIO_BSHR_BS10 ((uint32_t)0x00000400) /* Port x Set bit 10 */ +#define GPIO_BSHR_BS11 ((uint32_t)0x00000800) /* Port x Set bit 11 */ +#define GPIO_BSHR_BS12 ((uint32_t)0x00001000) /* Port x Set bit 12 */ +#define GPIO_BSHR_BS13 ((uint32_t)0x00002000) /* Port x Set bit 13 */ +#define GPIO_BSHR_BS14 ((uint32_t)0x00004000) /* Port x Set bit 14 */ +#define GPIO_BSHR_BS15 ((uint32_t)0x00008000) /* Port x Set bit 15 */ + +#define GPIO_BSHR_BR0 ((uint32_t)0x00010000) /* Port x Reset bit 0 */ +#define GPIO_BSHR_BR1 ((uint32_t)0x00020000) /* Port x Reset bit 1 */ +#define GPIO_BSHR_BR2 ((uint32_t)0x00040000) /* Port x Reset bit 2 */ +#define GPIO_BSHR_BR3 ((uint32_t)0x00080000) /* Port x Reset bit 3 */ +#define GPIO_BSHR_BR4 ((uint32_t)0x00100000) /* Port x Reset bit 4 */ +#define GPIO_BSHR_BR5 ((uint32_t)0x00200000) /* Port x Reset bit 5 */ +#define GPIO_BSHR_BR6 ((uint32_t)0x00400000) /* Port x Reset bit 6 */ +#define GPIO_BSHR_BR7 ((uint32_t)0x00800000) /* Port x Reset bit 7 */ +#define GPIO_BSHR_BR8 ((uint32_t)0x01000000) /* Port x Reset bit 8 */ +#define GPIO_BSHR_BR9 ((uint32_t)0x02000000) /* Port x Reset bit 9 */ +#define GPIO_BSHR_BR10 ((uint32_t)0x04000000) /* Port x Reset bit 10 */ +#define GPIO_BSHR_BR11 ((uint32_t)0x08000000) /* Port x Reset bit 11 */ +#define GPIO_BSHR_BR12 ((uint32_t)0x10000000) /* Port x Reset bit 12 */ +#define GPIO_BSHR_BR13 ((uint32_t)0x20000000) /* Port x Reset bit 13 */ +#define GPIO_BSHR_BR14 ((uint32_t)0x40000000) /* Port x Reset bit 14 */ +#define GPIO_BSHR_BR15 ((uint32_t)0x80000000) /* Port x Reset bit 15 */ + +/******************* Bit definition for GPIO_BCR register *******************/ +#define GPIO_BCR_BR0 ((uint16_t)0x0001) /* Port x Reset bit 0 */ +#define GPIO_BCR_BR1 ((uint16_t)0x0002) /* Port x Reset bit 1 */ +#define GPIO_BCR_BR2 ((uint16_t)0x0004) /* Port x Reset bit 2 */ +#define GPIO_BCR_BR3 ((uint16_t)0x0008) /* Port x Reset bit 3 */ +#define GPIO_BCR_BR4 ((uint16_t)0x0010) /* Port x Reset bit 4 */ +#define GPIO_BCR_BR5 ((uint16_t)0x0020) /* Port x Reset bit 5 */ +#define GPIO_BCR_BR6 ((uint16_t)0x0040) /* Port x Reset bit 6 */ +#define GPIO_BCR_BR7 ((uint16_t)0x0080) /* Port x Reset bit 7 */ +#define GPIO_BCR_BR8 ((uint16_t)0x0100) /* Port x Reset bit 8 */ +#define GPIO_BCR_BR9 ((uint16_t)0x0200) /* Port x Reset bit 9 */ +#define GPIO_BCR_BR10 ((uint16_t)0x0400) /* Port x Reset bit 10 */ +#define GPIO_BCR_BR11 ((uint16_t)0x0800) /* Port x Reset bit 11 */ +#define GPIO_BCR_BR12 ((uint16_t)0x1000) /* Port x Reset bit 12 */ +#define GPIO_BCR_BR13 ((uint16_t)0x2000) /* Port x Reset bit 13 */ +#define GPIO_BCR_BR14 ((uint16_t)0x4000) /* Port x Reset bit 14 */ +#define GPIO_BCR_BR15 ((uint16_t)0x8000) /* Port x Reset bit 15 */ + +/****************** Bit definition for GPIO_LCKR register *******************/ +#define GPIO_LCK0 ((uint32_t)0x00000001) /* Port x Lock bit 0 */ +#define GPIO_LCK1 ((uint32_t)0x00000002) /* Port x Lock bit 1 */ +#define GPIO_LCK2 ((uint32_t)0x00000004) /* Port x Lock bit 2 */ +#define GPIO_LCK3 ((uint32_t)0x00000008) /* Port x Lock bit 3 */ +#define GPIO_LCK4 ((uint32_t)0x00000010) /* Port x Lock bit 4 */ +#define GPIO_LCK5 ((uint32_t)0x00000020) /* Port x Lock bit 5 */ +#define GPIO_LCK6 ((uint32_t)0x00000040) /* Port x Lock bit 6 */ +#define GPIO_LCK7 ((uint32_t)0x00000080) /* Port x Lock bit 7 */ +#define GPIO_LCK8 ((uint32_t)0x00000100) /* Port x Lock bit 8 */ +#define GPIO_LCK9 ((uint32_t)0x00000200) /* Port x Lock bit 9 */ +#define GPIO_LCK10 ((uint32_t)0x00000400) /* Port x Lock bit 10 */ +#define GPIO_LCK11 ((uint32_t)0x00000800) /* Port x Lock bit 11 */ +#define GPIO_LCK12 ((uint32_t)0x00001000) /* Port x Lock bit 12 */ +#define GPIO_LCK13 ((uint32_t)0x00002000) /* Port x Lock bit 13 */ +#define GPIO_LCK14 ((uint32_t)0x00004000) /* Port x Lock bit 14 */ +#define GPIO_LCK15 ((uint32_t)0x00008000) /* Port x Lock bit 15 */ +#define GPIO_LCKK ((uint32_t)0x00010000) /* Lock key */ + + +/****************** Bit definition for AFIO_ECR register *******************/ +#define AFIO_ECR_PIN ((uint8_t)0x0F) /* PIN[3:0] bits (Pin selection) */ +#define AFIO_ECR_PIN_0 ((uint8_t)0x01) /* Bit 0 */ +#define AFIO_ECR_PIN_1 ((uint8_t)0x02) /* Bit 1 */ +#define AFIO_ECR_PIN_2 ((uint8_t)0x04) /* Bit 2 */ +#define AFIO_ECR_PIN_3 ((uint8_t)0x08) /* Bit 3 */ + +#define AFIO_ECR_PIN_PX0 ((uint8_t)0x00) /* Pin 0 selected */ +#define AFIO_ECR_PIN_PX1 ((uint8_t)0x01) /* Pin 1 selected */ +#define AFIO_ECR_PIN_PX2 ((uint8_t)0x02) /* Pin 2 selected */ +#define AFIO_ECR_PIN_PX3 ((uint8_t)0x03) /* Pin 3 selected */ +#define AFIO_ECR_PIN_PX4 ((uint8_t)0x04) /* Pin 4 selected */ +#define AFIO_ECR_PIN_PX5 ((uint8_t)0x05) /* Pin 5 selected */ +#define AFIO_ECR_PIN_PX6 ((uint8_t)0x06) /* Pin 6 selected */ +#define AFIO_ECR_PIN_PX7 ((uint8_t)0x07) /* Pin 7 selected */ +#define AFIO_ECR_PIN_PX8 ((uint8_t)0x08) /* Pin 8 selected */ +#define AFIO_ECR_PIN_PX9 ((uint8_t)0x09) /* Pin 9 selected */ +#define AFIO_ECR_PIN_PX10 ((uint8_t)0x0A) /* Pin 10 selected */ +#define AFIO_ECR_PIN_PX11 ((uint8_t)0x0B) /* Pin 11 selected */ +#define AFIO_ECR_PIN_PX12 ((uint8_t)0x0C) /* Pin 12 selected */ +#define AFIO_ECR_PIN_PX13 ((uint8_t)0x0D) /* Pin 13 selected */ +#define AFIO_ECR_PIN_PX14 ((uint8_t)0x0E) /* Pin 14 selected */ +#define AFIO_ECR_PIN_PX15 ((uint8_t)0x0F) /* Pin 15 selected */ + +#define AFIO_ECR_PORT ((uint8_t)0x70) /* PORT[2:0] bits (Port selection) */ +#define AFIO_ECR_PORT_0 ((uint8_t)0x10) /* Bit 0 */ +#define AFIO_ECR_PORT_1 ((uint8_t)0x20) /* Bit 1 */ +#define AFIO_ECR_PORT_2 ((uint8_t)0x40) /* Bit 2 */ + +#define AFIO_ECR_PORT_PA ((uint8_t)0x00) /* Port A selected */ +#define AFIO_ECR_PORT_PB ((uint8_t)0x10) /* Port B selected */ +#define AFIO_ECR_PORT_PC ((uint8_t)0x20) /* Port C selected */ +#define AFIO_ECR_PORT_PD ((uint8_t)0x30) /* Port D selected */ +#define AFIO_ECR_PORT_PE ((uint8_t)0x40) /* Port E selected */ + +#define AFIO_ECR_EVOE ((uint8_t)0x80) /* Event Output Enable */ + +/****************** Bit definition for AFIO_PCFR1register *******************/ +#define AFIO_PCFR1_SPI1_REMAP ((uint32_t)0x00000001) /* SPI1 remapping */ +#define AFIO_PCFR1_I2C1_REMAP ((uint32_t)0x00000002) /* I2C1 remapping */ +#define AFIO_PCFR1_USART1_REMAP ((uint32_t)0x00000004) /* USART1 remapping */ +#define AFIO_PCFR1_USART2_REMAP ((uint32_t)0x00000008) /* USART2 remapping */ + +#define AFIO_PCFR1_USART3_REMAP ((uint32_t)0x00000030) /* USART3_REMAP[1:0] bits (USART3 remapping) */ +#define AFIO_PCFR1_USART3_REMAP_0 ((uint32_t)0x00000010) /* Bit 0 */ +#define AFIO_PCFR1_USART3_REMAP_1 ((uint32_t)0x00000020) /* Bit 1 */ + +#define AFIO_PCFR1_USART3_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */ +#define AFIO_PCFR1_USART3_REMAP_PARTIALREMAP ((uint32_t)0x00000010) /* Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */ +#define AFIO_PCFR1_USART3_REMAP_FULLREMAP ((uint32_t)0x00000030) /* Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */ + +#define AFIO_PCFR1_TIM1_REMAP ((uint32_t)0x000000C0) /* TIM1_REMAP[1:0] bits (TIM1 remapping) */ +#define AFIO_PCFR1_TIM1_REMAP_0 ((uint32_t)0x00000040) /* Bit 0 */ +#define AFIO_PCFR1_TIM1_REMAP_1 ((uint32_t)0x00000080) /* Bit 1 */ + +#define AFIO_PCFR1_TIM1_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) */ +#define AFIO_PCFR1_TIM1_REMAP_PARTIALREMAP ((uint32_t)0x00000040) /* Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */ +#define AFIO_PCFR1_TIM1_REMAP_FULLREMAP ((uint32_t)0x000000C0) /* Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */ + +#define AFIO_PCFR1_TIM2_REMAP ((uint32_t)0x00000300) /* TIM2_REMAP[1:0] bits (TIM2 remapping) */ +#define AFIO_PCFR1_TIM2_REMAP_0 ((uint32_t)0x00000100) /* Bit 0 */ +#define AFIO_PCFR1_TIM2_REMAP_1 ((uint32_t)0x00000200) /* Bit 1 */ + +#define AFIO_PCFR1_TIM2_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */ +#define AFIO_PCFR1_TIM2_REMAP_PARTIALREMAP1 ((uint32_t)0x00000100) /* Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */ +#define AFIO_PCFR1_TIM2_REMAP_PARTIALREMAP2 ((uint32_t)0x00000200) /* Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */ +#define AFIO_PCFR1_TIM2_REMAP_FULLREMAP ((uint32_t)0x00000300) /* Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */ + +#define AFIO_PCFR1_TIM3_REMAP ((uint32_t)0x00000C00) /* TIM3_REMAP[1:0] bits (TIM3 remapping) */ +#define AFIO_PCFR1_TIM3_REMAP_0 ((uint32_t)0x00000400) /* Bit 0 */ +#define AFIO_PCFR1_TIM3_REMAP_1 ((uint32_t)0x00000800) /* Bit 1 */ + +#define AFIO_PCFR1_TIM3_REMAP_NOREMAP ((uint32_t)0x00000000) /* No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */ +#define AFIO_PCFR1_TIM3_REMAP_PARTIALREMAP ((uint32_t)0x00000800) /* Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */ +#define AFIO_PCFR1_TIM3_REMAP_FULLREMAP ((uint32_t)0x00000C00) /* Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */ + +#define AFIO_PCFR1_TIM4_REMAP ((uint32_t)0x00001000) /* TIM4_REMAP bit (TIM4 remapping) */ + +#define AFIO_PCFR1_CAN_REMAP ((uint32_t)0x00006000) /* CAN_REMAP[1:0] bits (CAN Alternate function remapping) */ +#define AFIO_PCFR1_CAN_REMAP_0 ((uint32_t)0x00002000) /* Bit 0 */ +#define AFIO_PCFR1_CAN_REMAP_1 ((uint32_t)0x00004000) /* Bit 1 */ + +#define AFIO_PCFR1_CAN_REMAP_REMAP1 ((uint32_t)0x00000000) /* CANRX mapped to PA11, CANTX mapped to PA12 */ +#define AFIO_PCFR1_CAN_REMAP_REMAP2 ((uint32_t)0x00004000) /* CANRX mapped to PB8, CANTX mapped to PB9 */ +#define AFIO_PCFR1_CAN_REMAP_REMAP3 ((uint32_t)0x00006000) /* CANRX mapped to PD0, CANTX mapped to PD1 */ + +#define AFIO_PCFR1_PD01_REMAP ((uint32_t)0x00008000) /* Port D0/Port D1 mapping on OSC_IN/OSC_OUT */ +#define AFIO_PCFR1_TIM5CH4_IREMAP ((uint32_t)0x00010000) /* TIM5 Channel4 Internal Remap */ +#define AFIO_PCFR1_ADC1_ETRGINJ_REMAP ((uint32_t)0x00020000) /* ADC 1 External Trigger Injected Conversion remapping */ +#define AFIO_PCFR1_ADC1_ETRGREG_REMAP ((uint32_t)0x00040000) /* ADC 1 External Trigger Regular Conversion remapping */ +#define AFIO_PCFR1_ADC2_ETRGINJ_REMAP ((uint32_t)0x00080000) /* ADC 2 External Trigger Injected Conversion remapping */ +#define AFIO_PCFR1_ADC2_ETRGREG_REMAP ((uint32_t)0x00100000) /* ADC 2 External Trigger Regular Conversion remapping */ + +#define AFIO_PCFR1_SWJ_CFG ((uint32_t)0x07000000) /* SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */ +#define AFIO_PCFR1_SWJ_CFG_0 ((uint32_t)0x01000000) /* Bit 0 */ +#define AFIO_PCFR1_SWJ_CFG_1 ((uint32_t)0x02000000) /* Bit 1 */ +#define AFIO_PCFR1_SWJ_CFG_2 ((uint32_t)0x04000000) /* Bit 2 */ + +#define AFIO_PCFR1_SWJ_CFG_RESET ((uint32_t)0x00000000) /* Full SWJ (JTAG-DP + SW-DP) : Reset State */ +#define AFIO_PCFR1_SWJ_CFG_NOJNTRST ((uint32_t)0x01000000) /* Full SWJ (JTAG-DP + SW-DP) but without JNTRST */ +#define AFIO_PCFR1_SWJ_CFG_JTAGDISABLE ((uint32_t)0x02000000) /* JTAG-DP Disabled and SW-DP Enabled */ +#define AFIO_PCFR1_SWJ_CFG_DISABLE ((uint32_t)0x04000000) /* JTAG-DP Disabled and SW-DP Disabled */ + +/***************** Bit definition for AFIO_EXTICR1 register *****************/ +#define AFIO_EXTICR1_EXTI0 ((uint16_t)0x000F) /* EXTI 0 configuration */ +#define AFIO_EXTICR1_EXTI1 ((uint16_t)0x00F0) /* EXTI 1 configuration */ +#define AFIO_EXTICR1_EXTI2 ((uint16_t)0x0F00) /* EXTI 2 configuration */ +#define AFIO_EXTICR1_EXTI3 ((uint16_t)0xF000) /* EXTI 3 configuration */ + +#define AFIO_EXTICR1_EXTI0_PA ((uint16_t)0x0000) /* PA[0] pin */ +#define AFIO_EXTICR1_EXTI0_PB ((uint16_t)0x0001) /* PB[0] pin */ +#define AFIO_EXTICR1_EXTI0_PC ((uint16_t)0x0002) /* PC[0] pin */ +#define AFIO_EXTICR1_EXTI0_PD ((uint16_t)0x0003) /* PD[0] pin */ +#define AFIO_EXTICR1_EXTI0_PE ((uint16_t)0x0004) /* PE[0] pin */ +#define AFIO_EXTICR1_EXTI0_PF ((uint16_t)0x0005) /* PF[0] pin */ +#define AFIO_EXTICR1_EXTI0_PG ((uint16_t)0x0006) /* PG[0] pin */ + +#define AFIO_EXTICR1_EXTI1_PA ((uint16_t)0x0000) /* PA[1] pin */ +#define AFIO_EXTICR1_EXTI1_PB ((uint16_t)0x0010) /* PB[1] pin */ +#define AFIO_EXTICR1_EXTI1_PC ((uint16_t)0x0020) /* PC[1] pin */ +#define AFIO_EXTICR1_EXTI1_PD ((uint16_t)0x0030) /* PD[1] pin */ +#define AFIO_EXTICR1_EXTI1_PE ((uint16_t)0x0040) /* PE[1] pin */ +#define AFIO_EXTICR1_EXTI1_PF ((uint16_t)0x0050) /* PF[1] pin */ +#define AFIO_EXTICR1_EXTI1_PG ((uint16_t)0x0060) /* PG[1] pin */ + +#define AFIO_EXTICR1_EXTI2_PA ((uint16_t)0x0000) /* PA[2] pin */ +#define AFIO_EXTICR1_EXTI2_PB ((uint16_t)0x0100) /* PB[2] pin */ +#define AFIO_EXTICR1_EXTI2_PC ((uint16_t)0x0200) /* PC[2] pin */ +#define AFIO_EXTICR1_EXTI2_PD ((uint16_t)0x0300) /* PD[2] pin */ +#define AFIO_EXTICR1_EXTI2_PE ((uint16_t)0x0400) /* PE[2] pin */ +#define AFIO_EXTICR1_EXTI2_PF ((uint16_t)0x0500) /* PF[2] pin */ +#define AFIO_EXTICR1_EXTI2_PG ((uint16_t)0x0600) /* PG[2] pin */ + +#define AFIO_EXTICR1_EXTI3_PA ((uint16_t)0x0000) /* PA[3] pin */ +#define AFIO_EXTICR1_EXTI3_PB ((uint16_t)0x1000) /* PB[3] pin */ +#define AFIO_EXTICR1_EXTI3_PC ((uint16_t)0x2000) /* PC[3] pin */ +#define AFIO_EXTICR1_EXTI3_PD ((uint16_t)0x3000) /* PD[3] pin */ +#define AFIO_EXTICR1_EXTI3_PE ((uint16_t)0x4000) /* PE[3] pin */ +#define AFIO_EXTICR1_EXTI3_PF ((uint16_t)0x5000) /* PF[3] pin */ +#define AFIO_EXTICR1_EXTI3_PG ((uint16_t)0x6000) /* PG[3] pin */ + +/***************** Bit definition for AFIO_EXTICR2 register *****************/ +#define AFIO_EXTICR2_EXTI4 ((uint16_t)0x000F) /* EXTI 4 configuration */ +#define AFIO_EXTICR2_EXTI5 ((uint16_t)0x00F0) /* EXTI 5 configuration */ +#define AFIO_EXTICR2_EXTI6 ((uint16_t)0x0F00) /* EXTI 6 configuration */ +#define AFIO_EXTICR2_EXTI7 ((uint16_t)0xF000) /* EXTI 7 configuration */ + +#define AFIO_EXTICR2_EXTI4_PA ((uint16_t)0x0000) /* PA[4] pin */ +#define AFIO_EXTICR2_EXTI4_PB ((uint16_t)0x0001) /* PB[4] pin */ +#define AFIO_EXTICR2_EXTI4_PC ((uint16_t)0x0002) /* PC[4] pin */ +#define AFIO_EXTICR2_EXTI4_PD ((uint16_t)0x0003) /* PD[4] pin */ +#define AFIO_EXTICR2_EXTI4_PE ((uint16_t)0x0004) /* PE[4] pin */ +#define AFIO_EXTICR2_EXTI4_PF ((uint16_t)0x0005) /* PF[4] pin */ +#define AFIO_EXTICR2_EXTI4_PG ((uint16_t)0x0006) /* PG[4] pin */ + +#define AFIO_EXTICR2_EXTI5_PA ((uint16_t)0x0000) /* PA[5] pin */ +#define AFIO_EXTICR2_EXTI5_PB ((uint16_t)0x0010) /* PB[5] pin */ +#define AFIO_EXTICR2_EXTI5_PC ((uint16_t)0x0020) /* PC[5] pin */ +#define AFIO_EXTICR2_EXTI5_PD ((uint16_t)0x0030) /* PD[5] pin */ +#define AFIO_EXTICR2_EXTI5_PE ((uint16_t)0x0040) /* PE[5] pin */ +#define AFIO_EXTICR2_EXTI5_PF ((uint16_t)0x0050) /* PF[5] pin */ +#define AFIO_EXTICR2_EXTI5_PG ((uint16_t)0x0060) /* PG[5] pin */ + +#define AFIO_EXTICR2_EXTI6_PA ((uint16_t)0x0000) /* PA[6] pin */ +#define AFIO_EXTICR2_EXTI6_PB ((uint16_t)0x0100) /* PB[6] pin */ +#define AFIO_EXTICR2_EXTI6_PC ((uint16_t)0x0200) /* PC[6] pin */ +#define AFIO_EXTICR2_EXTI6_PD ((uint16_t)0x0300) /* PD[6] pin */ +#define AFIO_EXTICR2_EXTI6_PE ((uint16_t)0x0400) /* PE[6] pin */ +#define AFIO_EXTICR2_EXTI6_PF ((uint16_t)0x0500) /* PF[6] pin */ +#define AFIO_EXTICR2_EXTI6_PG ((uint16_t)0x0600) /* PG[6] pin */ + +#define AFIO_EXTICR2_EXTI7_PA ((uint16_t)0x0000) /* PA[7] pin */ +#define AFIO_EXTICR2_EXTI7_PB ((uint16_t)0x1000) /* PB[7] pin */ +#define AFIO_EXTICR2_EXTI7_PC ((uint16_t)0x2000) /* PC[7] pin */ +#define AFIO_EXTICR2_EXTI7_PD ((uint16_t)0x3000) /* PD[7] pin */ +#define AFIO_EXTICR2_EXTI7_PE ((uint16_t)0x4000) /* PE[7] pin */ +#define AFIO_EXTICR2_EXTI7_PF ((uint16_t)0x5000) /* PF[7] pin */ +#define AFIO_EXTICR2_EXTI7_PG ((uint16_t)0x6000) /* PG[7] pin */ + +/***************** Bit definition for AFIO_EXTICR3 register *****************/ +#define AFIO_EXTICR3_EXTI8 ((uint16_t)0x000F) /* EXTI 8 configuration */ +#define AFIO_EXTICR3_EXTI9 ((uint16_t)0x00F0) /* EXTI 9 configuration */ +#define AFIO_EXTICR3_EXTI10 ((uint16_t)0x0F00) /* EXTI 10 configuration */ +#define AFIO_EXTICR3_EXTI11 ((uint16_t)0xF000) /* EXTI 11 configuration */ + +#define AFIO_EXTICR3_EXTI8_PA ((uint16_t)0x0000) /* PA[8] pin */ +#define AFIO_EXTICR3_EXTI8_PB ((uint16_t)0x0001) /* PB[8] pin */ +#define AFIO_EXTICR3_EXTI8_PC ((uint16_t)0x0002) /* PC[8] pin */ +#define AFIO_EXTICR3_EXTI8_PD ((uint16_t)0x0003) /* PD[8] pin */ +#define AFIO_EXTICR3_EXTI8_PE ((uint16_t)0x0004) /* PE[8] pin */ +#define AFIO_EXTICR3_EXTI8_PF ((uint16_t)0x0005) /* PF[8] pin */ +#define AFIO_EXTICR3_EXTI8_PG ((uint16_t)0x0006) /* PG[8] pin */ + +#define AFIO_EXTICR3_EXTI9_PA ((uint16_t)0x0000) /* PA[9] pin */ +#define AFIO_EXTICR3_EXTI9_PB ((uint16_t)0x0010) /* PB[9] pin */ +#define AFIO_EXTICR3_EXTI9_PC ((uint16_t)0x0020) /* PC[9] pin */ +#define AFIO_EXTICR3_EXTI9_PD ((uint16_t)0x0030) /* PD[9] pin */ +#define AFIO_EXTICR3_EXTI9_PE ((uint16_t)0x0040) /* PE[9] pin */ +#define AFIO_EXTICR3_EXTI9_PF ((uint16_t)0x0050) /* PF[9] pin */ +#define AFIO_EXTICR3_EXTI9_PG ((uint16_t)0x0060) /* PG[9] pin */ + +#define AFIO_EXTICR3_EXTI10_PA ((uint16_t)0x0000) /* PA[10] pin */ +#define AFIO_EXTICR3_EXTI10_PB ((uint16_t)0x0100) /* PB[10] pin */ +#define AFIO_EXTICR3_EXTI10_PC ((uint16_t)0x0200) /* PC[10] pin */ +#define AFIO_EXTICR3_EXTI10_PD ((uint16_t)0x0300) /* PD[10] pin */ +#define AFIO_EXTICR3_EXTI10_PE ((uint16_t)0x0400) /* PE[10] pin */ +#define AFIO_EXTICR3_EXTI10_PF ((uint16_t)0x0500) /* PF[10] pin */ +#define AFIO_EXTICR3_EXTI10_PG ((uint16_t)0x0600) /* PG[10] pin */ + +#define AFIO_EXTICR3_EXTI11_PA ((uint16_t)0x0000) /* PA[11] pin */ +#define AFIO_EXTICR3_EXTI11_PB ((uint16_t)0x1000) /* PB[11] pin */ +#define AFIO_EXTICR3_EXTI11_PC ((uint16_t)0x2000) /* PC[11] pin */ +#define AFIO_EXTICR3_EXTI11_PD ((uint16_t)0x3000) /* PD[11] pin */ +#define AFIO_EXTICR3_EXTI11_PE ((uint16_t)0x4000) /* PE[11] pin */ +#define AFIO_EXTICR3_EXTI11_PF ((uint16_t)0x5000) /* PF[11] pin */ +#define AFIO_EXTICR3_EXTI11_PG ((uint16_t)0x6000) /* PG[11] pin */ + +/***************** Bit definition for AFIO_EXTICR4 register *****************/ +#define AFIO_EXTICR4_EXTI12 ((uint16_t)0x000F) /* EXTI 12 configuration */ +#define AFIO_EXTICR4_EXTI13 ((uint16_t)0x00F0) /* EXTI 13 configuration */ +#define AFIO_EXTICR4_EXTI14 ((uint16_t)0x0F00) /* EXTI 14 configuration */ +#define AFIO_EXTICR4_EXTI15 ((uint16_t)0xF000) /* EXTI 15 configuration */ + +#define AFIO_EXTICR4_EXTI12_PA ((uint16_t)0x0000) /* PA[12] pin */ +#define AFIO_EXTICR4_EXTI12_PB ((uint16_t)0x0001) /* PB[12] pin */ +#define AFIO_EXTICR4_EXTI12_PC ((uint16_t)0x0002) /* PC[12] pin */ +#define AFIO_EXTICR4_EXTI12_PD ((uint16_t)0x0003) /* PD[12] pin */ +#define AFIO_EXTICR4_EXTI12_PE ((uint16_t)0x0004) /* PE[12] pin */ +#define AFIO_EXTICR4_EXTI12_PF ((uint16_t)0x0005) /* PF[12] pin */ +#define AFIO_EXTICR4_EXTI12_PG ((uint16_t)0x0006) /* PG[12] pin */ + +#define AFIO_EXTICR4_EXTI13_PA ((uint16_t)0x0000) /* PA[13] pin */ +#define AFIO_EXTICR4_EXTI13_PB ((uint16_t)0x0010) /* PB[13] pin */ +#define AFIO_EXTICR4_EXTI13_PC ((uint16_t)0x0020) /* PC[13] pin */ +#define AFIO_EXTICR4_EXTI13_PD ((uint16_t)0x0030) /* PD[13] pin */ +#define AFIO_EXTICR4_EXTI13_PE ((uint16_t)0x0040) /* PE[13] pin */ +#define AFIO_EXTICR4_EXTI13_PF ((uint16_t)0x0050) /* PF[13] pin */ +#define AFIO_EXTICR4_EXTI13_PG ((uint16_t)0x0060) /* PG[13] pin */ + +#define AFIO_EXTICR4_EXTI14_PA ((uint16_t)0x0000) /* PA[14] pin */ +#define AFIO_EXTICR4_EXTI14_PB ((uint16_t)0x0100) /* PB[14] pin */ +#define AFIO_EXTICR4_EXTI14_PC ((uint16_t)0x0200) /* PC[14] pin */ +#define AFIO_EXTICR4_EXTI14_PD ((uint16_t)0x0300) /* PD[14] pin */ +#define AFIO_EXTICR4_EXTI14_PE ((uint16_t)0x0400) /* PE[14] pin */ +#define AFIO_EXTICR4_EXTI14_PF ((uint16_t)0x0500) /* PF[14] pin */ +#define AFIO_EXTICR4_EXTI14_PG ((uint16_t)0x0600) /* PG[14] pin */ + +#define AFIO_EXTICR4_EXTI15_PA ((uint16_t)0x0000) /* PA[15] pin */ +#define AFIO_EXTICR4_EXTI15_PB ((uint16_t)0x1000) /* PB[15] pin */ +#define AFIO_EXTICR4_EXTI15_PC ((uint16_t)0x2000) /* PC[15] pin */ +#define AFIO_EXTICR4_EXTI15_PD ((uint16_t)0x3000) /* PD[15] pin */ +#define AFIO_EXTICR4_EXTI15_PE ((uint16_t)0x4000) /* PE[15] pin */ +#define AFIO_EXTICR4_EXTI15_PF ((uint16_t)0x5000) /* PF[15] pin */ +#define AFIO_EXTICR4_EXTI15_PG ((uint16_t)0x6000) /* PG[15] pin */ + +/******************************************************************************/ +/* Independent WATCHDOG */ +/******************************************************************************/ + +/******************* Bit definition for IWDG_CTLR register ********************/ +#define IWDG_KEY ((uint16_t)0xFFFF) /* Key value (write only, read 0000h) */ + +/******************* Bit definition for IWDG_PSCR register ********************/ +#define IWDG_PR ((uint8_t)0x07) /* PR[2:0] (Prescaler divider) */ +#define IWDG_PR_0 ((uint8_t)0x01) /* Bit 0 */ +#define IWDG_PR_1 ((uint8_t)0x02) /* Bit 1 */ +#define IWDG_PR_2 ((uint8_t)0x04) /* Bit 2 */ + +/******************* Bit definition for IWDG_RLDR register *******************/ +#define IWDG_RL ((uint16_t)0x0FFF) /* Watchdog counter reload value */ + +/******************* Bit definition for IWDG_STATR register ********************/ +#define IWDG_PVU ((uint8_t)0x01) /* Watchdog prescaler value update */ +#define IWDG_RVU ((uint8_t)0x02) /* Watchdog counter reload value update */ + +/******************************************************************************/ +/* Inter-integrated Circuit Interface */ +/******************************************************************************/ + +/******************* Bit definition for I2C_CTLR1 register ********************/ +#define I2C_CTLR1_PE ((uint16_t)0x0001) /* Peripheral Enable */ +#define I2C_CTLR1_SMBUS ((uint16_t)0x0002) /* SMBus Mode */ +#define I2C_CTLR1_SMBTYPE ((uint16_t)0x0008) /* SMBus Type */ +#define I2C_CTLR1_ENARP ((uint16_t)0x0010) /* ARP Enable */ +#define I2C_CTLR1_ENPEC ((uint16_t)0x0020) /* PEC Enable */ +#define I2C_CTLR1_ENGC ((uint16_t)0x0040) /* General Call Enable */ +#define I2C_CTLR1_NOSTRETCH ((uint16_t)0x0080) /* Clock Stretching Disable (Slave mode) */ +#define I2C_CTLR1_START ((uint16_t)0x0100) /* Start Generation */ +#define I2C_CTLR1_STOP ((uint16_t)0x0200) /* Stop Generation */ +#define I2C_CTLR1_ACK ((uint16_t)0x0400) /* Acknowledge Enable */ +#define I2C_CTLR1_POS ((uint16_t)0x0800) /* Acknowledge/PEC Position (for data reception) */ +#define I2C_CTLR1_PEC ((uint16_t)0x1000) /* Packet Error Checking */ +#define I2C_CTLR1_ALERT ((uint16_t)0x2000) /* SMBus Alert */ +#define I2C_CTLR1_SWRST ((uint16_t)0x8000) /* Software Reset */ + +/******************* Bit definition for I2C_CTLR2 register ********************/ +#define I2C_CTLR2_FREQ ((uint16_t)0x003F) /* FREQ[5:0] bits (Peripheral Clock Frequency) */ +#define I2C_CTLR2_FREQ_0 ((uint16_t)0x0001) /* Bit 0 */ +#define I2C_CTLR2_FREQ_1 ((uint16_t)0x0002) /* Bit 1 */ +#define I2C_CTLR2_FREQ_2 ((uint16_t)0x0004) /* Bit 2 */ +#define I2C_CTLR2_FREQ_3 ((uint16_t)0x0008) /* Bit 3 */ +#define I2C_CTLR2_FREQ_4 ((uint16_t)0x0010) /* Bit 4 */ +#define I2C_CTLR2_FREQ_5 ((uint16_t)0x0020) /* Bit 5 */ + +#define I2C_CTLR2_ITERREN ((uint16_t)0x0100) /* Error Interrupt Enable */ +#define I2C_CTLR2_ITEVTEN ((uint16_t)0x0200) /* Event Interrupt Enable */ +#define I2C_CTLR2_ITBUFEN ((uint16_t)0x0400) /* Buffer Interrupt Enable */ +#define I2C_CTLR2_DMAEN ((uint16_t)0x0800) /* DMA Requests Enable */ +#define I2C_CTLR2_LAST ((uint16_t)0x1000) /* DMA Last Transfer */ + +/******************* Bit definition for I2C_OADDR1 register *******************/ +#define I2C_OADDR1_ADD1_7 ((uint16_t)0x00FE) /* Interface Address */ +#define I2C_OADDR1_ADD8_9 ((uint16_t)0x0300) /* Interface Address */ + +#define I2C_OADDR1_ADD0 ((uint16_t)0x0001) /* Bit 0 */ +#define I2C_OADDR1_ADD1 ((uint16_t)0x0002) /* Bit 1 */ +#define I2C_OADDR1_ADD2 ((uint16_t)0x0004) /* Bit 2 */ +#define I2C_OADDR1_ADD3 ((uint16_t)0x0008) /* Bit 3 */ +#define I2C_OADDR1_ADD4 ((uint16_t)0x0010) /* Bit 4 */ +#define I2C_OADDR1_ADD5 ((uint16_t)0x0020) /* Bit 5 */ +#define I2C_OADDR1_ADD6 ((uint16_t)0x0040) /* Bit 6 */ +#define I2C_OADDR1_ADD7 ((uint16_t)0x0080) /* Bit 7 */ +#define I2C_OADDR1_ADD8 ((uint16_t)0x0100) /* Bit 8 */ +#define I2C_OADDR1_ADD9 ((uint16_t)0x0200) /* Bit 9 */ + +#define I2C_OADDR1_ADDMODE ((uint16_t)0x8000) /* Addressing Mode (Slave mode) */ + +/******************* Bit definition for I2C_OADDR2 register *******************/ +#define I2C_OADDR2_ENDUAL ((uint8_t)0x01) /* Dual addressing mode enable */ +#define I2C_OADDR2_ADD2 ((uint8_t)0xFE) /* Interface address */ + +/******************** Bit definition for I2C_DATAR register ********************/ +#define I2C_DR_DATAR ((uint8_t)0xFF) /* 8-bit Data Register */ + +/******************* Bit definition for I2C_STAR1 register ********************/ +#define I2C_STAR1_SB ((uint16_t)0x0001) /* Start Bit (Master mode) */ +#define I2C_STAR1_ADDR ((uint16_t)0x0002) /* Address sent (master mode)/matched (slave mode) */ +#define I2C_STAR1_BTF ((uint16_t)0x0004) /* Byte Transfer Finished */ +#define I2C_STAR1_ADD10 ((uint16_t)0x0008) /* 10-bit header sent (Master mode) */ +#define I2C_STAR1_STOPF ((uint16_t)0x0010) /* Stop detection (Slave mode) */ +#define I2C_STAR1_RXNE ((uint16_t)0x0040) /* Data Register not Empty (receivers) */ +#define I2C_STAR1_TXE ((uint16_t)0x0080) /* Data Register Empty (transmitters) */ +#define I2C_STAR1_BERR ((uint16_t)0x0100) /* Bus Error */ +#define I2C_STAR1_ARLO ((uint16_t)0x0200) /* Arbitration Lost (master mode) */ +#define I2C_STAR1_AF ((uint16_t)0x0400) /* Acknowledge Failure */ +#define I2C_STAR1_OVR ((uint16_t)0x0800) /* Overrun/Underrun */ +#define I2C_STAR1_PECERR ((uint16_t)0x1000) /* PEC Error in reception */ +#define I2C_STAR1_TIMEOUT ((uint16_t)0x4000) /* Timeout or Tlow Error */ +#define I2C_STAR1_SMBALERT ((uint16_t)0x8000) /* SMBus Alert */ + +/******************* Bit definition for I2C_STAR2 register ********************/ +#define I2C_STAR2_MSL ((uint16_t)0x0001) /* Master/Slave */ +#define I2C_STAR2_BUSY ((uint16_t)0x0002) /* Bus Busy */ +#define I2C_STAR2_TRA ((uint16_t)0x0004) /* Transmitter/Receiver */ +#define I2C_STAR2_GENCALL ((uint16_t)0x0010) /* General Call Address (Slave mode) */ +#define I2C_STAR2_SMBDEFAULT ((uint16_t)0x0020) /* SMBus Device Default Address (Slave mode) */ +#define I2C_STAR2_SMBHOST ((uint16_t)0x0040) /* SMBus Host Header (Slave mode) */ +#define I2C_STAR2_DUALF ((uint16_t)0x0080) /* Dual Flag (Slave mode) */ +#define I2C_STAR2_PEC ((uint16_t)0xFF00) /* Packet Error Checking Register */ + +/******************* Bit definition for I2C_CKCFGR register ********************/ +#define I2C_CKCFGR_CCR ((uint16_t)0x0FFF) /* Clock Control Register in Fast/Standard mode (Master mode) */ +#define I2C_CKCFGR_DUTY ((uint16_t)0x4000) /* Fast Mode Duty Cycle */ +#define I2C_CKCFGR_FS ((uint16_t)0x8000) /* I2C Master Mode Selection */ + +/****************** Bit definition for I2C_RTR register *******************/ +#define I2C_RTR_TRISE ((uint8_t)0x3F) /* Maximum Rise Time in Fast/Standard mode (Master mode) */ + + +/******************************************************************************/ +/* Power Control */ +/******************************************************************************/ + +/******************** Bit definition for PWR_CTLR register ********************/ +#define PWR_CTLR_LPDS ((uint16_t)0x0001) /* Low-Power Deepsleep */ +#define PWR_CTLR_PDDS ((uint16_t)0x0002) /* Power Down Deepsleep */ +#define PWR_CTLR_CWUF ((uint16_t)0x0004) /* Clear Wakeup Flag */ +#define PWR_CTLR_CSBF ((uint16_t)0x0008) /* Clear Standby Flag */ +#define PWR_CTLR_PVDE ((uint16_t)0x0010) /* Power Voltage Detector Enable */ + +#define PWR_CTLR_PLS ((uint16_t)0x00E0) /* PLS[2:0] bits (PVD Level Selection) */ +#define PWR_CTLR_PLS_0 ((uint16_t)0x0020) /* Bit 0 */ +#define PWR_CTLR_PLS_1 ((uint16_t)0x0040) /* Bit 1 */ +#define PWR_CTLR_PLS_2 ((uint16_t)0x0080) /* Bit 2 */ + +#define PWR_CTLR_PLS_2V2 ((uint16_t)0x0000) /* PVD level 2.2V */ +#define PWR_CTLR_PLS_2V3 ((uint16_t)0x0020) /* PVD level 2.3V */ +#define PWR_CTLR_PLS_2V4 ((uint16_t)0x0040) /* PVD level 2.4V */ +#define PWR_CTLR_PLS_2V5 ((uint16_t)0x0060) /* PVD level 2.5V */ +#define PWR_CTLR_PLS_2V6 ((uint16_t)0x0080) /* PVD level 2.6V */ +#define PWR_CTLR_PLS_2V7 ((uint16_t)0x00A0) /* PVD level 2.7V */ +#define PWR_CTLR_PLS_2V8 ((uint16_t)0x00C0) /* PVD level 2.8V */ +#define PWR_CTLR_PLS_2V9 ((uint16_t)0x00E0) /* PVD level 2.9V */ + +#define PWR_CTLR_DBP ((uint16_t)0x0100) /* Disable Backup Domain write protection */ + + +/******************* Bit definition for PWR_CSR register ********************/ +#define PWR_CSR_WUF ((uint16_t)0x0001) /* Wakeup Flag */ +#define PWR_CSR_SBF ((uint16_t)0x0002) /* Standby Flag */ +#define PWR_CSR_PVDO ((uint16_t)0x0004) /* PVD Output */ +#define PWR_CSR_EWUP ((uint16_t)0x0100) /* Enable WKUP pin */ + + + +/******************************************************************************/ +/* Reset and Clock Control */ +/******************************************************************************/ + +/******************** Bit definition for RCC_CTLR register ********************/ +#define RCC_HSION ((uint32_t)0x00000001) /* Internal High Speed clock enable */ +#define RCC_HSIRDY ((uint32_t)0x00000002) /* Internal High Speed clock ready flag */ +#define RCC_HSITRIM ((uint32_t)0x000000F8) /* Internal High Speed clock trimming */ +#define RCC_HSICAL ((uint32_t)0x0000FF00) /* Internal High Speed clock Calibration */ +#define RCC_HSEON ((uint32_t)0x00010000) /* External High Speed clock enable */ +#define RCC_HSERDY ((uint32_t)0x00020000) /* External High Speed clock ready flag */ +#define RCC_HSEBYP ((uint32_t)0x00040000) /* External High Speed clock Bypass */ +#define RCC_CSSON ((uint32_t)0x00080000) /* Clock Security System enable */ +#define RCC_PLLON ((uint32_t)0x01000000) /* PLL enable */ +#define RCC_PLLRDY ((uint32_t)0x02000000) /* PLL clock ready flag */ + + +/******************* Bit definition for RCC_CFGR0 register *******************/ +#define RCC_SW ((uint32_t)0x00000003) /* SW[1:0] bits (System clock Switch) */ +#define RCC_SW_0 ((uint32_t)0x00000001) /* Bit 0 */ +#define RCC_SW_1 ((uint32_t)0x00000002) /* Bit 1 */ + +#define RCC_SW_HSI ((uint32_t)0x00000000) /* HSI selected as system clock */ +#define RCC_SW_HSE ((uint32_t)0x00000001) /* HSE selected as system clock */ +#define RCC_SW_PLL ((uint32_t)0x00000002) /* PLL selected as system clock */ + +#define RCC_SWS ((uint32_t)0x0000000C) /* SWS[1:0] bits (System Clock Switch Status) */ +#define RCC_SWS_0 ((uint32_t)0x00000004) /* Bit 0 */ +#define RCC_SWS_1 ((uint32_t)0x00000008) /* Bit 1 */ + +#define RCC_SWS_HSI ((uint32_t)0x00000000) /* HSI oscillator used as system clock */ +#define RCC_SWS_HSE ((uint32_t)0x00000004) /* HSE oscillator used as system clock */ +#define RCC_SWS_PLL ((uint32_t)0x00000008) /* PLL used as system clock */ + +#define RCC_HPRE ((uint32_t)0x000000F0) /* HPRE[3:0] bits (AHB prescaler) */ +#define RCC_HPRE_0 ((uint32_t)0x00000010) /* Bit 0 */ +#define RCC_HPRE_1 ((uint32_t)0x00000020) /* Bit 1 */ +#define RCC_HPRE_2 ((uint32_t)0x00000040) /* Bit 2 */ +#define RCC_HPRE_3 ((uint32_t)0x00000080) /* Bit 3 */ + +#define RCC_HPRE_DIV1 ((uint32_t)0x00000000) /* SYSCLK not divided */ +#define RCC_HPRE_DIV2 ((uint32_t)0x00000080) /* SYSCLK divided by 2 */ +#define RCC_HPRE_DIV4 ((uint32_t)0x00000090) /* SYSCLK divided by 4 */ +#define RCC_HPRE_DIV8 ((uint32_t)0x000000A0) /* SYSCLK divided by 8 */ +#define RCC_HPRE_DIV16 ((uint32_t)0x000000B0) /* SYSCLK divided by 16 */ +#define RCC_HPRE_DIV64 ((uint32_t)0x000000C0) /* SYSCLK divided by 64 */ +#define RCC_HPRE_DIV128 ((uint32_t)0x000000D0) /* SYSCLK divided by 128 */ +#define RCC_HPRE_DIV256 ((uint32_t)0x000000E0) /* SYSCLK divided by 256 */ +#define RCC_HPRE_DIV512 ((uint32_t)0x000000F0) /* SYSCLK divided by 512 */ + +#define RCC_PPRE1 ((uint32_t)0x00000700) /* PRE1[2:0] bits (APB1 prescaler) */ +#define RCC_PPRE1_0 ((uint32_t)0x00000100) /* Bit 0 */ +#define RCC_PPRE1_1 ((uint32_t)0x00000200) /* Bit 1 */ +#define RCC_PPRE1_2 ((uint32_t)0x00000400) /* Bit 2 */ + +#define RCC_PPRE1_DIV1 ((uint32_t)0x00000000) /* HCLK not divided */ +#define RCC_PPRE1_DIV2 ((uint32_t)0x00000400) /* HCLK divided by 2 */ +#define RCC_PPRE1_DIV4 ((uint32_t)0x00000500) /* HCLK divided by 4 */ +#define RCC_PPRE1_DIV8 ((uint32_t)0x00000600) /* HCLK divided by 8 */ +#define RCC_PPRE1_DIV16 ((uint32_t)0x00000700) /* HCLK divided by 16 */ + +#define RCC_PPRE2 ((uint32_t)0x00003800) /* PRE2[2:0] bits (APB2 prescaler) */ +#define RCC_PPRE2_0 ((uint32_t)0x00000800) /* Bit 0 */ +#define RCC_PPRE2_1 ((uint32_t)0x00001000) /* Bit 1 */ +#define RCC_PPRE2_2 ((uint32_t)0x00002000) /* Bit 2 */ + +#define RCC_PPRE2_DIV1 ((uint32_t)0x00000000) /* HCLK not divided */ +#define RCC_PPRE2_DIV2 ((uint32_t)0x00002000) /* HCLK divided by 2 */ +#define RCC_PPRE2_DIV4 ((uint32_t)0x00002800) /* HCLK divided by 4 */ +#define RCC_PPRE2_DIV8 ((uint32_t)0x00003000) /* HCLK divided by 8 */ +#define RCC_PPRE2_DIV16 ((uint32_t)0x00003800) /* HCLK divided by 16 */ + +#define RCC_ADCPRE ((uint32_t)0x0000C000) /* ADCPRE[1:0] bits (ADC prescaler) */ +#define RCC_ADCPRE_0 ((uint32_t)0x00004000) /* Bit 0 */ +#define RCC_ADCPRE_1 ((uint32_t)0x00008000) /* Bit 1 */ + +#define RCC_ADCPRE_DIV2 ((uint32_t)0x00000000) /* PCLK2 divided by 2 */ +#define RCC_ADCPRE_DIV4 ((uint32_t)0x00004000) /* PCLK2 divided by 4 */ +#define RCC_ADCPRE_DIV6 ((uint32_t)0x00008000) /* PCLK2 divided by 6 */ +#define RCC_ADCPRE_DIV8 ((uint32_t)0x0000C000) /* PCLK2 divided by 8 */ + +#define RCC_PLLSRC ((uint32_t)0x00010000) /* PLL entry clock source */ + +#define RCC_PLLXTPRE ((uint32_t)0x00020000) /* HSE divider for PLL entry */ + +#define RCC_PLLMULL ((uint32_t)0x003C0000) /* PLLMUL[3:0] bits (PLL multiplication factor) */ +#define RCC_PLLMULL_0 ((uint32_t)0x00040000) /* Bit 0 */ +#define RCC_PLLMULL_1 ((uint32_t)0x00080000) /* Bit 1 */ +#define RCC_PLLMULL_2 ((uint32_t)0x00100000) /* Bit 2 */ +#define RCC_PLLMULL_3 ((uint32_t)0x00200000) /* Bit 3 */ + +#define RCC_PLLSRC_HSI_Div2 ((uint32_t)0x00000000) /* HSI clock divided by 2 selected as PLL entry clock source */ +#define RCC_PLLSRC_HSE ((uint32_t)0x00010000) /* HSE clock selected as PLL entry clock source */ + +#define RCC_PLLXTPRE_HSE ((uint32_t)0x00000000) /* HSE clock not divided for PLL entry */ +#define RCC_PLLXTPRE_HSE_Div2 ((uint32_t)0x00020000) /* HSE clock divided by 2 for PLL entry */ + +#define RCC_PLLMULL2 ((uint32_t)0x00000000) /* PLL input clock*2 */ +#define RCC_PLLMULL3 ((uint32_t)0x00040000) /* PLL input clock*3 */ +#define RCC_PLLMULL4 ((uint32_t)0x00080000) /* PLL input clock*4 */ +#define RCC_PLLMULL5 ((uint32_t)0x000C0000) /* PLL input clock*5 */ +#define RCC_PLLMULL6 ((uint32_t)0x00100000) /* PLL input clock*6 */ +#define RCC_PLLMULL7 ((uint32_t)0x00140000) /* PLL input clock*7 */ +#define RCC_PLLMULL8 ((uint32_t)0x00180000) /* PLL input clock*8 */ +#define RCC_PLLMULL9 ((uint32_t)0x001C0000) /* PLL input clock*9 */ +#define RCC_PLLMULL10 ((uint32_t)0x00200000) /* PLL input clock10 */ +#define RCC_PLLMULL11 ((uint32_t)0x00240000) /* PLL input clock*11 */ +#define RCC_PLLMULL12 ((uint32_t)0x00280000) /* PLL input clock*12 */ +#define RCC_PLLMULL13 ((uint32_t)0x002C0000) /* PLL input clock*13 */ +#define RCC_PLLMULL14 ((uint32_t)0x00300000) /* PLL input clock*14 */ +#define RCC_PLLMULL15 ((uint32_t)0x00340000) /* PLL input clock*15 */ +#define RCC_PLLMULL16 ((uint32_t)0x00380000) /* PLL input clock*16 */ +#define RCC_USBPRE ((uint32_t)0x00400000) /* USB Device prescaler */ + +#define RCC_CFGR0_MCO ((uint32_t)0x07000000) /* MCO[2:0] bits (Microcontroller Clock Output) */ +#define RCC_MCO_0 ((uint32_t)0x01000000) /* Bit 0 */ +#define RCC_MCO_1 ((uint32_t)0x02000000) /* Bit 1 */ +#define RCC_MCO_2 ((uint32_t)0x04000000) /* Bit 2 */ + +#define RCC_MCO_NOCLOCK ((uint32_t)0x00000000) /* No clock */ +#define RCC_CFGR0_MCO_SYSCLK ((uint32_t)0x04000000) /* System clock selected as MCO source */ +#define RCC_CFGR0_MCO_HSI ((uint32_t)0x05000000) /* HSI clock selected as MCO source */ +#define RCC_CFGR0_MCO_HSE ((uint32_t)0x06000000) /* HSE clock selected as MCO source */ +#define RCC_CFGR0_MCO_PLL ((uint32_t)0x07000000) /* PLL clock divided by 2 selected as MCO source */ + +/******************* Bit definition for RCC_INTR register ********************/ +#define RCC_LSIRDYF ((uint32_t)0x00000001) /* LSI Ready Interrupt flag */ +#define RCC_LSERDYF ((uint32_t)0x00000002) /* LSE Ready Interrupt flag */ +#define RCC_HSIRDYF ((uint32_t)0x00000004) /* HSI Ready Interrupt flag */ +#define RCC_HSERDYF ((uint32_t)0x00000008) /* HSE Ready Interrupt flag */ +#define RCC_PLLRDYF ((uint32_t)0x00000010) /* PLL Ready Interrupt flag */ +#define RCC_CSSF ((uint32_t)0x00000080) /* Clock Security System Interrupt flag */ +#define RCC_LSIRDYIE ((uint32_t)0x00000100) /* LSI Ready Interrupt Enable */ +#define RCC_LSERDYIE ((uint32_t)0x00000200) /* LSE Ready Interrupt Enable */ +#define RCC_HSIRDYIE ((uint32_t)0x00000400) /* HSI Ready Interrupt Enable */ +#define RCC_HSERDYIE ((uint32_t)0x00000800) /* HSE Ready Interrupt Enable */ +#define RCC_PLLRDYIE ((uint32_t)0x00001000) /* PLL Ready Interrupt Enable */ +#define RCC_LSIRDYC ((uint32_t)0x00010000) /* LSI Ready Interrupt Clear */ +#define RCC_LSERDYC ((uint32_t)0x00020000) /* LSE Ready Interrupt Clear */ +#define RCC_HSIRDYC ((uint32_t)0x00040000) /* HSI Ready Interrupt Clear */ +#define RCC_HSERDYC ((uint32_t)0x00080000) /* HSE Ready Interrupt Clear */ +#define RCC_PLLRDYC ((uint32_t)0x00100000) /* PLL Ready Interrupt Clear */ +#define RCC_CSSC ((uint32_t)0x00800000) /* Clock Security System Interrupt Clear */ + + +/***************** Bit definition for RCC_APB2PRSTR register *****************/ +#define RCC_AFIORST ((uint32_t)0x00000001) /* Alternate Function I/O reset */ +#define RCC_IOPARST ((uint32_t)0x00000004) /* I/O port A reset */ +#define RCC_IOPBRST ((uint32_t)0x00000008) /* I/O port B reset */ +#define RCC_IOPCRST ((uint32_t)0x00000010) /* I/O port C reset */ +#define RCC_IOPDRST ((uint32_t)0x00000020) /* I/O port D reset */ +#define RCC_ADC1RST ((uint32_t)0x00000200) /* ADC 1 interface reset */ + + +#define RCC_ADC2RST ((uint32_t)0x00000400) /* ADC 2 interface reset */ + + +#define RCC_TIM1RST ((uint32_t)0x00000800) /* TIM1 Timer reset */ +#define RCC_SPI1RST ((uint32_t)0x00001000) /* SPI 1 reset */ +#define RCC_USART1RST ((uint32_t)0x00004000) /* USART1 reset */ + +#define RCC_IOPERST ((uint32_t)0x00000040) /* I/O port E reset */ + +/***************** Bit definition for RCC_APB1PRSTR register *****************/ +#define RCC_TIM2RST ((uint32_t)0x00000001) /* Timer 2 reset */ +#define RCC_TIM3RST ((uint32_t)0x00000002) /* Timer 3 reset */ +#define RCC_WWDGRST ((uint32_t)0x00000800) /* Window Watchdog reset */ +#define RCC_USART2RST ((uint32_t)0x00020000) /* USART 2 reset */ +#define RCC_I2C1RST ((uint32_t)0x00200000) /* I2C 1 reset */ + +#define RCC_CAN1RST ((uint32_t)0x02000000) /* CAN1 reset */ + + +#define RCC_BKPRST ((uint32_t)0x08000000) /* Backup interface reset */ +#define RCC_PWRRST ((uint32_t)0x10000000) /* Power interface reset */ + + +#define RCC_TIM4RST ((uint32_t)0x00000004) /* Timer 4 reset */ +#define RCC_SPI2RST ((uint32_t)0x00004000) /* SPI 2 reset */ +#define RCC_USART3RST ((uint32_t)0x00040000) /* USART 3 reset */ +#define RCC_I2C2RST ((uint32_t)0x00400000) /* I2C 2 reset */ + +#define RCC_USBRST ((uint32_t)0x00800000) /* USB Device reset */ + +/****************** Bit definition for RCC_AHBPCENR register ******************/ +#define RCC_DMA1EN ((uint16_t)0x0001) /* DMA1 clock enable */ +#define RCC_SRAMEN ((uint16_t)0x0004) /* SRAM interface clock enable */ +#define RCC_FLITFEN ((uint16_t)0x0010) /* FLITF clock enable */ +#define RCC_CRCEN ((uint16_t)0x0040) /* CRC clock enable */ +#define RCC_USBHD ((uint16_t)0x1000) + +/****************** Bit definition for RCC_APB2PCENR register *****************/ +#define RCC_AFIOEN ((uint32_t)0x00000001) /* Alternate Function I/O clock enable */ +#define RCC_IOPAEN ((uint32_t)0x00000004) /* I/O port A clock enable */ +#define RCC_IOPBEN ((uint32_t)0x00000008) /* I/O port B clock enable */ +#define RCC_IOPCEN ((uint32_t)0x00000010) /* I/O port C clock enable */ +#define RCC_IOPDEN ((uint32_t)0x00000020) /* I/O port D clock enable */ +#define RCC_ADC1EN ((uint32_t)0x00000200) /* ADC 1 interface clock enable */ + +#define RCC_ADC2EN ((uint32_t)0x00000400) /* ADC 2 interface clock enable */ + + +#define RCC_TIM1EN ((uint32_t)0x00000800) /* TIM1 Timer clock enable */ +#define RCC_SPI1EN ((uint32_t)0x00001000) /* SPI 1 clock enable */ +#define RCC_USART1EN ((uint32_t)0x00004000) /* USART1 clock enable */ + +/***************** Bit definition for RCC_APB1PCENR register ******************/ +#define RCC_TIM2EN ((uint32_t)0x00000001) /* Timer 2 clock enabled*/ +#define RCC_TIM3EN ((uint32_t)0x00000002) /* Timer 3 clock enable */ +#define RCC_WWDGEN ((uint32_t)0x00000800) /* Window Watchdog clock enable */ +#define RCC_USART2EN ((uint32_t)0x00020000) /* USART 2 clock enable */ +#define RCC_I2C1EN ((uint32_t)0x00200000) /* I2C 1 clock enable */ + +#define RCC_BKPEN ((uint32_t)0x08000000) /* Backup interface clock enable */ +#define RCC_PWREN ((uint32_t)0x10000000) /* Power interface clock enable */ + + +#define RCC_USBEN ((uint32_t)0x00800000) /* USB Device clock enable */ + +/******************* Bit definition for RCC_BDCTLR register *******************/ +#define RCC_LSEON ((uint32_t)0x00000001) /* External Low Speed oscillator enable */ +#define RCC_LSERDY ((uint32_t)0x00000002) /* External Low Speed oscillator Ready */ +#define RCC_LSEBYP ((uint32_t)0x00000004) /* External Low Speed oscillator Bypass */ + +#define RCC_RTCSEL ((uint32_t)0x00000300) /* RTCSEL[1:0] bits (RTC clock source selection) */ +#define RCC_RTCSEL_0 ((uint32_t)0x00000100) /* Bit 0 */ +#define RCC_RTCSEL_1 ((uint32_t)0x00000200) /* Bit 1 */ + +#define RCC_RTCSEL_NOCLOCK ((uint32_t)0x00000000) /* No clock */ +#define RCC_RTCSEL_LSE ((uint32_t)0x00000100) /* LSE oscillator clock used as RTC clock */ +#define RCC_RTCSEL_LSI ((uint32_t)0x00000200) /* LSI oscillator clock used as RTC clock */ +#define RCC_RTCSEL_HSE ((uint32_t)0x00000300) /* HSE oscillator clock divided by 128 used as RTC clock */ + +#define RCC_RTCEN ((uint32_t)0x00008000) /* RTC clock enable */ +#define RCC_BDRST ((uint32_t)0x00010000) /* Backup domain software reset */ + +/******************* Bit definition for RCC_RSTSCKR register ********************/ +#define RCC_LSION ((uint32_t)0x00000001) /* Internal Low Speed oscillator enable */ +#define RCC_LSIRDY ((uint32_t)0x00000002) /* Internal Low Speed oscillator Ready */ +#define RCC_RMVF ((uint32_t)0x01000000) /* Remove reset flag */ +#define RCC_PINRSTF ((uint32_t)0x04000000) /* PIN reset flag */ +#define RCC_PORRSTF ((uint32_t)0x08000000) /* POR/PDR reset flag */ +#define RCC_SFTRSTF ((uint32_t)0x10000000) /* Software Reset flag */ +#define RCC_IWDGRSTF ((uint32_t)0x20000000) /* Independent Watchdog reset flag */ +#define RCC_WWDGRSTF ((uint32_t)0x40000000) /* Window watchdog reset flag */ +#define RCC_LPWRRSTF ((uint32_t)0x80000000) /* Low-Power reset flag */ + +/******************************************************************************/ +/* Real-Time Clock */ +/******************************************************************************/ + +/******************* Bit definition for RTC_CTLRH register ********************/ +#define RTC_CTLRH_SECIE ((uint8_t)0x01) /* Second Interrupt Enable */ +#define RTC_CTLRH_ALRIE ((uint8_t)0x02) /* Alarm Interrupt Enable */ +#define RTC_CTLRH_OWIE ((uint8_t)0x04) /* OverfloW Interrupt Enable */ + +/******************* Bit definition for RTC_CTLRL register ********************/ +#define RTC_CTLRL_SECF ((uint8_t)0x01) /* Second Flag */ +#define RTC_CTLRL_ALRF ((uint8_t)0x02) /* Alarm Flag */ +#define RTC_CTLRL_OWF ((uint8_t)0x04) /* OverfloW Flag */ +#define RTC_CTLRL_RSF ((uint8_t)0x08) /* Registers Synchronized Flag */ +#define RTC_CTLRL_CNF ((uint8_t)0x10) /* Configuration Flag */ +#define RTC_CTLRL_RTOFF ((uint8_t)0x20) /* RTC operation OFF */ + +/******************* Bit definition for RTC_PSCH register *******************/ +#define RTC_PSCH_PRL ((uint16_t)0x000F) /* RTC Prescaler Reload Value High */ + +/******************* Bit definition for RTC_PRLL register *******************/ +#define RTC_PSCL_PRL ((uint16_t)0xFFFF) /* RTC Prescaler Reload Value Low */ + +/******************* Bit definition for RTC_DIVH register *******************/ +#define RTC_DIVH_RTC_DIV ((uint16_t)0x000F) /* RTC Clock Divider High */ + +/******************* Bit definition for RTC_DIVL register *******************/ +#define RTC_DIVL_RTC_DIV ((uint16_t)0xFFFF) /* RTC Clock Divider Low */ + +/******************* Bit definition for RTC_CNTH register *******************/ +#define RTC_CNTH_RTC_CNT ((uint16_t)0xFFFF) /* RTC Counter High */ + +/******************* Bit definition for RTC_CNTL register *******************/ +#define RTC_CNTL_RTC_CNT ((uint16_t)0xFFFF) /* RTC Counter Low */ + +/******************* Bit definition for RTC_ALRMH register *******************/ +#define RTC_ALRMH_RTC_ALRM ((uint16_t)0xFFFF) /* RTC Alarm High */ + +/******************* Bit definition for RTC_ALRML register *******************/ +#define RTC_ALRML_RTC_ALRM ((uint16_t)0xFFFF) /* RTC Alarm Low */ + +/******************************************************************************/ +/* Serial Peripheral Interface */ +/******************************************************************************/ + +/******************* Bit definition for SPI_CTLR1 register ********************/ +#define SPI_CTLR1_CPHA ((uint16_t)0x0001) /* Clock Phase */ +#define SPI_CTLR1_CPOL ((uint16_t)0x0002) /* Clock Polarity */ +#define SPI_CTLR1_MSTR ((uint16_t)0x0004) /* Master Selection */ + +#define SPI_CTLR1_BR ((uint16_t)0x0038) /* BR[2:0] bits (Baud Rate Control) */ +#define SPI_CTLR1_BR_0 ((uint16_t)0x0008) /* Bit 0 */ +#define SPI_CTLR1_BR_1 ((uint16_t)0x0010) /* Bit 1 */ +#define SPI_CTLR1_BR_2 ((uint16_t)0x0020) /* Bit 2 */ + +#define SPI_CTLR1_SPE ((uint16_t)0x0040) /* SPI Enable */ +#define SPI_CTLR1_LSBFIRST ((uint16_t)0x0080) /* Frame Format */ +#define SPI_CTLR1_SSI ((uint16_t)0x0100) /* Internal slave select */ +#define SPI_CTLR1_SSM ((uint16_t)0x0200) /* Software slave management */ +#define SPI_CTLR1_RXONLY ((uint16_t)0x0400) /* Receive only */ +#define SPI_CTLR1_DFF ((uint16_t)0x0800) /* Data Frame Format */ +#define SPI_CTLR1_CRCNEXT ((uint16_t)0x1000) /* Transmit CRC next */ +#define SPI_CTLR1_CRCEN ((uint16_t)0x2000) /* Hardware CRC calculation enable */ +#define SPI_CTLR1_BIDIOE ((uint16_t)0x4000) /* Output enable in bidirectional mode */ +#define SPI_CTLR1_BIDIMODE ((uint16_t)0x8000) /* Bidirectional data mode enable */ + +/******************* Bit definition for SPI_CTLR2 register ********************/ +#define SPI_CTLR2_RXDMAEN ((uint8_t)0x01) /* Rx Buffer DMA Enable */ +#define SPI_CTLR2_TXDMAEN ((uint8_t)0x02) /* Tx Buffer DMA Enable */ +#define SPI_CTLR2_SSOE ((uint8_t)0x04) /* SS Output Enable */ +#define SPI_CTLR2_ERRIE ((uint8_t)0x20) /* Error Interrupt Enable */ +#define SPI_CTLR2_RXNEIE ((uint8_t)0x40) /* RX buffer Not Empty Interrupt Enable */ +#define SPI_CTLR2_TXEIE ((uint8_t)0x80) /* Tx buffer Empty Interrupt Enable */ + +/******************** Bit definition for SPI_STATR register ********************/ +#define SPI_STATR_RXNE ((uint8_t)0x01) /* Receive buffer Not Empty */ +#define SPI_STATR_TXE ((uint8_t)0x02) /* Transmit buffer Empty */ +#define SPI_STATR_CHSIDE ((uint8_t)0x04) /* Channel side */ +#define SPI_STATR_UDR ((uint8_t)0x08) /* Underrun flag */ +#define SPI_STATR_CRCERR ((uint8_t)0x10) /* CRC Error flag */ +#define SPI_STATR_MODF ((uint8_t)0x20) /* Mode fault */ +#define SPI_STATR_OVR ((uint8_t)0x40) /* Overrun flag */ +#define SPI_STATR_BSY ((uint8_t)0x80) /* Busy flag */ + +/******************** Bit definition for SPI_DATAR register ********************/ +#define SPI_DATAR_DR ((uint16_t)0xFFFF) /* Data Register */ + +/******************* Bit definition for SPI_CRCR register ******************/ +#define SPI_CRCR_CRCPOLY ((uint16_t)0xFFFF) /* CRC polynomial register */ + +/****************** Bit definition for SPI_RCRCR register ******************/ +#define SPI_RCRCR_RXCRC ((uint16_t)0xFFFF) /* Rx CRC Register */ + +/****************** Bit definition for SPI_TCRCR register ******************/ +#define SPI_TCRCR_TXCRC ((uint16_t)0xFFFF) /* Tx CRC Register */ + +/****************** Bit definition for SPI_I2SCFGR register *****************/ +#define SPI_I2SCFGR_CHLEN ((uint16_t)0x0001) /* Channel length (number of bits per audio channel) */ + +#define SPI_I2SCFGR_DATLEN ((uint16_t)0x0006) /* DATLEN[1:0] bits (Data length to be transferred) */ +#define SPI_I2SCFGR_DATLEN_0 ((uint16_t)0x0002) /* Bit 0 */ +#define SPI_I2SCFGR_DATLEN_1 ((uint16_t)0x0004) /* Bit 1 */ + +#define SPI_I2SCFGR_CKPOL ((uint16_t)0x0008) /* steady state clock polarity */ + +#define SPI_I2SCFGR_I2SSTD ((uint16_t)0x0030) /* I2SSTD[1:0] bits (I2S standard selection) */ +#define SPI_I2SCFGR_I2SSTD_0 ((uint16_t)0x0010) /* Bit 0 */ +#define SPI_I2SCFGR_I2SSTD_1 ((uint16_t)0x0020) /* Bit 1 */ + +#define SPI_I2SCFGR_PCMSYNC ((uint16_t)0x0080) /* PCM frame synchronization */ + +#define SPI_I2SCFGR_I2SCFG ((uint16_t)0x0300) /* I2SCFG[1:0] bits (I2S configuration mode) */ +#define SPI_I2SCFGR_I2SCFG_0 ((uint16_t)0x0100) /* Bit 0 */ +#define SPI_I2SCFGR_I2SCFG_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define SPI_I2SCFGR_I2SE ((uint16_t)0x0400) /* I2S Enable */ +#define SPI_I2SCFGR_I2SMOD ((uint16_t)0x0800) /* I2S mode selection */ + +/****************** Bit definition for SPI_I2SPR register *******************/ +#define SPI_I2SPR_I2SDIV ((uint16_t)0x00FF) /* I2S Linear prescaler */ +#define SPI_I2SPR_ODD ((uint16_t)0x0100) /* Odd factor for the prescaler */ +#define SPI_I2SPR_MCKOE ((uint16_t)0x0200) /* Master Clock Output Enable */ + +/******************************************************************************/ +/* TIM */ +/******************************************************************************/ + +/******************* Bit definition for TIM_CTLR1 register ********************/ +#define TIM_CEN ((uint16_t)0x0001) /* Counter enable */ +#define TIM_UDIS ((uint16_t)0x0002) /* Update disable */ +#define TIM_URS ((uint16_t)0x0004) /* Update request source */ +#define TIM_OPM ((uint16_t)0x0008) /* One pulse mode */ +#define TIM_DIR ((uint16_t)0x0010) /* Direction */ + +#define TIM_CMS ((uint16_t)0x0060) /* CMS[1:0] bits (Center-aligned mode selection) */ +#define TIM_CMS_0 ((uint16_t)0x0020) /* Bit 0 */ +#define TIM_CMS_1 ((uint16_t)0x0040) /* Bit 1 */ + +#define TIM_ARPE ((uint16_t)0x0080) /* Auto-reload preload enable */ + +#define TIM_CTLR1_CKD ((uint16_t)0x0300) /* CKD[1:0] bits (clock division) */ +#define TIM_CKD_0 ((uint16_t)0x0100) /* Bit 0 */ +#define TIM_CKD_1 ((uint16_t)0x0200) /* Bit 1 */ + +/******************* Bit definition for TIM_CTLR2 register ********************/ +#define TIM_CCPC ((uint16_t)0x0001) /* Capture/Compare Preloaded Control */ +#define TIM_CCUS ((uint16_t)0x0004) /* Capture/Compare Control Update Selection */ +#define TIM_CCDS ((uint16_t)0x0008) /* Capture/Compare DMA Selection */ + +#define TIM_MMS ((uint16_t)0x0070) /* MMS[2:0] bits (Master Mode Selection) */ +#define TIM_MMS_0 ((uint16_t)0x0010) /* Bit 0 */ +#define TIM_MMS_1 ((uint16_t)0x0020) /* Bit 1 */ +#define TIM_MMS_2 ((uint16_t)0x0040) /* Bit 2 */ + +#define TIM_TI1S ((uint16_t)0x0080) /* TI1 Selection */ +#define TIM_OIS1 ((uint16_t)0x0100) /* Output Idle state 1 (OC1 output) */ +#define TIM_OIS1N ((uint16_t)0x0200) /* Output Idle state 1 (OC1N output) */ +#define TIM_OIS2 ((uint16_t)0x0400) /* Output Idle state 2 (OC2 output) */ +#define TIM_OIS2N ((uint16_t)0x0800) /* Output Idle state 2 (OC2N output) */ +#define TIM_OIS3 ((uint16_t)0x1000) /* Output Idle state 3 (OC3 output) */ +#define TIM_OIS3N ((uint16_t)0x2000) /* Output Idle state 3 (OC3N output) */ +#define TIM_OIS4 ((uint16_t)0x4000) /* Output Idle state 4 (OC4 output) */ + +/******************* Bit definition for TIM_SMCFGR register *******************/ +#define TIM_SMS ((uint16_t)0x0007) /* SMS[2:0] bits (Slave mode selection) */ +#define TIM_SMS_0 ((uint16_t)0x0001) /* Bit 0 */ +#define TIM_SMS_1 ((uint16_t)0x0002) /* Bit 1 */ +#define TIM_SMS_2 ((uint16_t)0x0004) /* Bit 2 */ + +#define TIM_TS ((uint16_t)0x0070) /* TS[2:0] bits (Trigger selection) */ +#define TIM_TS_0 ((uint16_t)0x0010) /* Bit 0 */ +#define TIM_TS_1 ((uint16_t)0x0020) /* Bit 1 */ +#define TIM_TS_2 ((uint16_t)0x0040) /* Bit 2 */ + +#define TIM_MSM ((uint16_t)0x0080) /* Master/slave mode */ + +#define TIM_ETF ((uint16_t)0x0F00) /* ETF[3:0] bits (External trigger filter) */ +#define TIM_ETF_0 ((uint16_t)0x0100) /* Bit 0 */ +#define TIM_ETF_1 ((uint16_t)0x0200) /* Bit 1 */ +#define TIM_ETF_2 ((uint16_t)0x0400) /* Bit 2 */ +#define TIM_ETF_3 ((uint16_t)0x0800) /* Bit 3 */ + +#define TIM_ETPS ((uint16_t)0x3000) /* ETPS[1:0] bits (External trigger prescaler) */ +#define TIM_ETPS_0 ((uint16_t)0x1000) /* Bit 0 */ +#define TIM_ETPS_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define TIM_ECE ((uint16_t)0x4000) /* External clock enable */ +#define TIM_ETP ((uint16_t)0x8000) /* External trigger polarity */ + +/******************* Bit definition for TIM_DMAINTENR register *******************/ +#define TIM_UIE ((uint16_t)0x0001) /* Update interrupt enable */ +#define TIM_CC1IE ((uint16_t)0x0002) /* Capture/Compare 1 interrupt enable */ +#define TIM_CC2IE ((uint16_t)0x0004) /* Capture/Compare 2 interrupt enable */ +#define TIM_CC3IE ((uint16_t)0x0008) /* Capture/Compare 3 interrupt enable */ +#define TIM_CC4IE ((uint16_t)0x0010) /* Capture/Compare 4 interrupt enable */ +#define TIM_COMIE ((uint16_t)0x0020) /* COM interrupt enable */ +#define TIM_TIE ((uint16_t)0x0040) /* Trigger interrupt enable */ +#define TIM_BIE ((uint16_t)0x0080) /* Break interrupt enable */ +#define TIM_UDE ((uint16_t)0x0100) /* Update DMA request enable */ +#define TIM_CC1DE ((uint16_t)0x0200) /* Capture/Compare 1 DMA request enable */ +#define TIM_CC2DE ((uint16_t)0x0400) /* Capture/Compare 2 DMA request enable */ +#define TIM_CC3DE ((uint16_t)0x0800) /* Capture/Compare 3 DMA request enable */ +#define TIM_CC4DE ((uint16_t)0x1000) /* Capture/Compare 4 DMA request enable */ +#define TIM_COMDE ((uint16_t)0x2000) /* COM DMA request enable */ +#define TIM_TDE ((uint16_t)0x4000) /* Trigger DMA request enable */ + +/******************** Bit definition for TIM_INTFR register ********************/ +#define TIM_UIF ((uint16_t)0x0001) /* Update interrupt Flag */ +#define TIM_CC1IF ((uint16_t)0x0002) /* Capture/Compare 1 interrupt Flag */ +#define TIM_CC2IF ((uint16_t)0x0004) /* Capture/Compare 2 interrupt Flag */ +#define TIM_CC3IF ((uint16_t)0x0008) /* Capture/Compare 3 interrupt Flag */ +#define TIM_CC4IF ((uint16_t)0x0010) /* Capture/Compare 4 interrupt Flag */ +#define TIM_COMIF ((uint16_t)0x0020) /* COM interrupt Flag */ +#define TIM_TIF ((uint16_t)0x0040) /* Trigger interrupt Flag */ +#define TIM_BIF ((uint16_t)0x0080) /* Break interrupt Flag */ +#define TIM_CC1OF ((uint16_t)0x0200) /* Capture/Compare 1 Overcapture Flag */ +#define TIM_CC2OF ((uint16_t)0x0400) /* Capture/Compare 2 Overcapture Flag */ +#define TIM_CC3OF ((uint16_t)0x0800) /* Capture/Compare 3 Overcapture Flag */ +#define TIM_CC4OF ((uint16_t)0x1000) /* Capture/Compare 4 Overcapture Flag */ + +/******************* Bit definition for TIM_SWEVGR register ********************/ +#define TIM_UG ((uint8_t)0x01) /* Update Generation */ +#define TIM_CC1G ((uint8_t)0x02) /* Capture/Compare 1 Generation */ +#define TIM_CC2G ((uint8_t)0x04) /* Capture/Compare 2 Generation */ +#define TIM_CC3G ((uint8_t)0x08) /* Capture/Compare 3 Generation */ +#define TIM_CC4G ((uint8_t)0x10) /* Capture/Compare 4 Generation */ +#define TIM_COMG ((uint8_t)0x20) /* Capture/Compare Control Update Generation */ +#define TIM_TG ((uint8_t)0x40) /* Trigger Generation */ +#define TIM_BG ((uint8_t)0x80) /* Break Generation */ + +/****************** Bit definition for TIM_CHCTLR1 register *******************/ +#define TIM_CC1S ((uint16_t)0x0003) /* CC1S[1:0] bits (Capture/Compare 1 Selection) */ +#define TIM_CC1S_0 ((uint16_t)0x0001) /* Bit 0 */ +#define TIM_CC1S_1 ((uint16_t)0x0002) /* Bit 1 */ + +#define TIM_OC1FE ((uint16_t)0x0004) /* Output Compare 1 Fast enable */ +#define TIM_OC1PE ((uint16_t)0x0008) /* Output Compare 1 Preload enable */ + +#define TIM_OC1M ((uint16_t)0x0070) /* OC1M[2:0] bits (Output Compare 1 Mode) */ +#define TIM_OC1M_0 ((uint16_t)0x0010) /* Bit 0 */ +#define TIM_OC1M_1 ((uint16_t)0x0020) /* Bit 1 */ +#define TIM_OC1M_2 ((uint16_t)0x0040) /* Bit 2 */ + +#define TIM_OC1CE ((uint16_t)0x0080) /* Output Compare 1Clear Enable */ + +#define TIM_CC2S ((uint16_t)0x0300) /* CC2S[1:0] bits (Capture/Compare 2 Selection) */ +#define TIM_CC2S_0 ((uint16_t)0x0100) /* Bit 0 */ +#define TIM_CC2S_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define TIM_OC2FE ((uint16_t)0x0400) /* Output Compare 2 Fast enable */ +#define TIM_OC2PE ((uint16_t)0x0800) /* Output Compare 2 Preload enable */ + +#define TIM_OC2M ((uint16_t)0x7000) /* OC2M[2:0] bits (Output Compare 2 Mode) */ +#define TIM_OC2M_0 ((uint16_t)0x1000) /* Bit 0 */ +#define TIM_OC2M_1 ((uint16_t)0x2000) /* Bit 1 */ +#define TIM_OC2M_2 ((uint16_t)0x4000) /* Bit 2 */ + +#define TIM_OC2CE ((uint16_t)0x8000) /* Output Compare 2 Clear Enable */ + + +#define TIM_IC1PSC ((uint16_t)0x000C) /* IC1PSC[1:0] bits (Input Capture 1 Prescaler) */ +#define TIM_IC1PSC_0 ((uint16_t)0x0004) /* Bit 0 */ +#define TIM_IC1PSC_1 ((uint16_t)0x0008) /* Bit 1 */ + +#define TIM_IC1F ((uint16_t)0x00F0) /* IC1F[3:0] bits (Input Capture 1 Filter) */ +#define TIM_IC1F_0 ((uint16_t)0x0010) /* Bit 0 */ +#define TIM_IC1F_1 ((uint16_t)0x0020) /* Bit 1 */ +#define TIM_IC1F_2 ((uint16_t)0x0040) /* Bit 2 */ +#define TIM_IC1F_3 ((uint16_t)0x0080) /* Bit 3 */ + +#define TIM_IC2PSC ((uint16_t)0x0C00) /* IC2PSC[1:0] bits (Input Capture 2 Prescaler) */ +#define TIM_IC2PSC_0 ((uint16_t)0x0400) /* Bit 0 */ +#define TIM_IC2PSC_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define TIM_IC2F ((uint16_t)0xF000) /* IC2F[3:0] bits (Input Capture 2 Filter) */ +#define TIM_IC2F_0 ((uint16_t)0x1000) /* Bit 0 */ +#define TIM_IC2F_1 ((uint16_t)0x2000) /* Bit 1 */ +#define TIM_IC2F_2 ((uint16_t)0x4000) /* Bit 2 */ +#define TIM_IC2F_3 ((uint16_t)0x8000) /* Bit 3 */ + +/****************** Bit definition for TIM_CHCTLR2 register *******************/ +#define TIM_CC3S ((uint16_t)0x0003) /* CC3S[1:0] bits (Capture/Compare 3 Selection) */ +#define TIM_CC3S_0 ((uint16_t)0x0001) /* Bit 0 */ +#define TIM_CC3S_1 ((uint16_t)0x0002) /* Bit 1 */ + +#define TIM_OC3FE ((uint16_t)0x0004) /* Output Compare 3 Fast enable */ +#define TIM_OC3PE ((uint16_t)0x0008) /* Output Compare 3 Preload enable */ + +#define TIM_OC3M ((uint16_t)0x0070) /* OC3M[2:0] bits (Output Compare 3 Mode) */ +#define TIM_OC3M_0 ((uint16_t)0x0010) /* Bit 0 */ +#define TIM_OC3M_1 ((uint16_t)0x0020) /* Bit 1 */ +#define TIM_OC3M_2 ((uint16_t)0x0040) /* Bit 2 */ + +#define TIM_OC3CE ((uint16_t)0x0080) /* Output Compare 3 Clear Enable */ + +#define TIM_CC4S ((uint16_t)0x0300) /* CC4S[1:0] bits (Capture/Compare 4 Selection) */ +#define TIM_CC4S_0 ((uint16_t)0x0100) /* Bit 0 */ +#define TIM_CC4S_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define TIM_OC4FE ((uint16_t)0x0400) /* Output Compare 4 Fast enable */ +#define TIM_OC4PE ((uint16_t)0x0800) /* Output Compare 4 Preload enable */ + +#define TIM_OC4M ((uint16_t)0x7000) /* OC4M[2:0] bits (Output Compare 4 Mode) */ +#define TIM_OC4M_0 ((uint16_t)0x1000) /* Bit 0 */ +#define TIM_OC4M_1 ((uint16_t)0x2000) /* Bit 1 */ +#define TIM_OC4M_2 ((uint16_t)0x4000) /* Bit 2 */ + +#define TIM_OC4CE ((uint16_t)0x8000) /* Output Compare 4 Clear Enable */ + + +#define TIM_IC3PSC ((uint16_t)0x000C) /* IC3PSC[1:0] bits (Input Capture 3 Prescaler) */ +#define TIM_IC3PSC_0 ((uint16_t)0x0004) /* Bit 0 */ +#define TIM_IC3PSC_1 ((uint16_t)0x0008) /* Bit 1 */ + +#define TIM_IC3F ((uint16_t)0x00F0) /* IC3F[3:0] bits (Input Capture 3 Filter) */ +#define TIM_IC3F_0 ((uint16_t)0x0010) /* Bit 0 */ +#define TIM_IC3F_1 ((uint16_t)0x0020) /* Bit 1 */ +#define TIM_IC3F_2 ((uint16_t)0x0040) /* Bit 2 */ +#define TIM_IC3F_3 ((uint16_t)0x0080) /* Bit 3 */ + +#define TIM_IC4PSC ((uint16_t)0x0C00) /* IC4PSC[1:0] bits (Input Capture 4 Prescaler) */ +#define TIM_IC4PSC_0 ((uint16_t)0x0400) /* Bit 0 */ +#define TIM_IC4PSC_1 ((uint16_t)0x0800) /* Bit 1 */ + +#define TIM_IC4F ((uint16_t)0xF000) /* IC4F[3:0] bits (Input Capture 4 Filter) */ +#define TIM_IC4F_0 ((uint16_t)0x1000) /* Bit 0 */ +#define TIM_IC4F_1 ((uint16_t)0x2000) /* Bit 1 */ +#define TIM_IC4F_2 ((uint16_t)0x4000) /* Bit 2 */ +#define TIM_IC4F_3 ((uint16_t)0x8000) /* Bit 3 */ + +/******************* Bit definition for TIM_CCER register *******************/ +#define TIM_CC1E ((uint16_t)0x0001) /* Capture/Compare 1 output enable */ +#define TIM_CC1P ((uint16_t)0x0002) /* Capture/Compare 1 output Polarity */ +#define TIM_CC1NE ((uint16_t)0x0004) /* Capture/Compare 1 Complementary output enable */ +#define TIM_CC1NP ((uint16_t)0x0008) /* Capture/Compare 1 Complementary output Polarity */ +#define TIM_CC2E ((uint16_t)0x0010) /* Capture/Compare 2 output enable */ +#define TIM_CC2P ((uint16_t)0x0020) /* Capture/Compare 2 output Polarity */ +#define TIM_CC2NE ((uint16_t)0x0040) /* Capture/Compare 2 Complementary output enable */ +#define TIM_CC2NP ((uint16_t)0x0080) /* Capture/Compare 2 Complementary output Polarity */ +#define TIM_CC3E ((uint16_t)0x0100) /* Capture/Compare 3 output enable */ +#define TIM_CC3P ((uint16_t)0x0200) /* Capture/Compare 3 output Polarity */ +#define TIM_CC3NE ((uint16_t)0x0400) /* Capture/Compare 3 Complementary output enable */ +#define TIM_CC3NP ((uint16_t)0x0800) /* Capture/Compare 3 Complementary output Polarity */ +#define TIM_CC4E ((uint16_t)0x1000) /* Capture/Compare 4 output enable */ +#define TIM_CC4P ((uint16_t)0x2000) /* Capture/Compare 4 output Polarity */ +#define TIM_CC4NP ((uint16_t)0x8000) /* Capture/Compare 4 Complementary output Polarity */ + +/******************* Bit definition for TIM_CNT register ********************/ +#define TIM_CNT ((uint16_t)0xFFFF) /* Counter Value */ + +/******************* Bit definition for TIM_PSC register ********************/ +#define TIM_PSC ((uint16_t)0xFFFF) /* Prescaler Value */ + +/******************* Bit definition for TIM_ATRLR register ********************/ +#define TIM_ARR ((uint16_t)0xFFFF) /* actual auto-reload Value */ + +/******************* Bit definition for TIM_RPTCR register ********************/ +#define TIM_REP ((uint8_t)0xFF) /* Repetition Counter Value */ + +/******************* Bit definition for TIM_CH1CVR register *******************/ +#define TIM_CCR1 ((uint16_t)0xFFFF) /* Capture/Compare 1 Value */ + +/******************* Bit definition for TIM_CH2CVR register *******************/ +#define TIM_CCR2 ((uint16_t)0xFFFF) /* Capture/Compare 2 Value */ + +/******************* Bit definition for TIM_CH3CVR register *******************/ +#define TIM_CCR3 ((uint16_t)0xFFFF) /* Capture/Compare 3 Value */ + +/******************* Bit definition for TIM_CH4CVR register *******************/ +#define TIM_CCR4 ((uint16_t)0xFFFF) /* Capture/Compare 4 Value */ + +/******************* Bit definition for TIM_BDTR register *******************/ +#define TIM_DTG ((uint16_t)0x00FF) /* DTG[0:7] bits (Dead-Time Generator set-up) */ +#define TIM_DTG_0 ((uint16_t)0x0001) /* Bit 0 */ +#define TIM_DTG_1 ((uint16_t)0x0002) /* Bit 1 */ +#define TIM_DTG_2 ((uint16_t)0x0004) /* Bit 2 */ +#define TIM_DTG_3 ((uint16_t)0x0008) /* Bit 3 */ +#define TIM_DTG_4 ((uint16_t)0x0010) /* Bit 4 */ +#define TIM_DTG_5 ((uint16_t)0x0020) /* Bit 5 */ +#define TIM_DTG_6 ((uint16_t)0x0040) /* Bit 6 */ +#define TIM_DTG_7 ((uint16_t)0x0080) /* Bit 7 */ + +#define TIM_LOCK ((uint16_t)0x0300) /* LOCK[1:0] bits (Lock Configuration) */ +#define TIM_LOCK_0 ((uint16_t)0x0100) /* Bit 0 */ +#define TIM_LOCK_1 ((uint16_t)0x0200) /* Bit 1 */ + +#define TIM_OSSI ((uint16_t)0x0400) /* Off-State Selection for Idle mode */ +#define TIM_OSSR ((uint16_t)0x0800) /* Off-State Selection for Run mode */ +#define TIM_BKE ((uint16_t)0x1000) /* Break enable */ +#define TIM_BKP ((uint16_t)0x2000) /* Break Polarity */ +#define TIM_AOE ((uint16_t)0x4000) /* Automatic Output enable */ +#define TIM_MOE ((uint16_t)0x8000) /* Main Output enable */ + +/******************* Bit definition for TIM_DMACFGR register ********************/ +#define TIM_DBA ((uint16_t)0x001F) /* DBA[4:0] bits (DMA Base Address) */ +#define TIM_DBA_0 ((uint16_t)0x0001) /* Bit 0 */ +#define TIM_DBA_1 ((uint16_t)0x0002) /* Bit 1 */ +#define TIM_DBA_2 ((uint16_t)0x0004) /* Bit 2 */ +#define TIM_DBA_3 ((uint16_t)0x0008) /* Bit 3 */ +#define TIM_DBA_4 ((uint16_t)0x0010) /* Bit 4 */ + +#define TIM_DBL ((uint16_t)0x1F00) /* DBL[4:0] bits (DMA Burst Length) */ +#define TIM_DBL_0 ((uint16_t)0x0100) /* Bit 0 */ +#define TIM_DBL_1 ((uint16_t)0x0200) /* Bit 1 */ +#define TIM_DBL_2 ((uint16_t)0x0400) /* Bit 2 */ +#define TIM_DBL_3 ((uint16_t)0x0800) /* Bit 3 */ +#define TIM_DBL_4 ((uint16_t)0x1000) /* Bit 4 */ + +/******************* Bit definition for TIM_DMAADR register *******************/ +#define TIM_DMAR_DMAB ((uint16_t)0xFFFF) /* DMA register for burst accesses */ + +/******************************************************************************/ +/* Universal Synchronous Asynchronous Receiver Transmitter */ +/******************************************************************************/ + +/******************* Bit definition for USART_STATR register *******************/ +#define USART_STATR_PE ((uint16_t)0x0001) /* Parity Error */ +#define USART_STATR_FE ((uint16_t)0x0002) /* Framing Error */ +#define USART_STATR_NE ((uint16_t)0x0004) /* Noise Error Flag */ +#define USART_STATR_ORE ((uint16_t)0x0008) /* OverRun Error */ +#define USART_STATR_IDLE ((uint16_t)0x0010) /* IDLE line detected */ +#define USART_STATR_RXNE ((uint16_t)0x0020) /* Read Data Register Not Empty */ +#define USART_STATR_TC ((uint16_t)0x0040) /* Transmission Complete */ +#define USART_STATR_TXE ((uint16_t)0x0080) /* Transmit Data Register Empty */ +#define USART_STATR_LBD ((uint16_t)0x0100) /* LIN Break Detection Flag */ +#define USART_STATR_CTS ((uint16_t)0x0200) /* CTS Flag */ + +/******************* Bit definition for USART_DATAR register *******************/ +#define USART_DATAR_DR ((uint16_t)0x01FF) /* Data value */ + +/****************** Bit definition for USART_BRR register *******************/ +#define USART_BRR_DIV_Fraction ((uint16_t)0x000F) /* Fraction of USARTDIV */ +#define USART_BRR_DIV_Mantissa ((uint16_t)0xFFF0) /* Mantissa of USARTDIV */ + +/****************** Bit definition for USART_CTLR1 register *******************/ +#define USART_CTLR1_SBK ((uint16_t)0x0001) /* Send Break */ +#define USART_CTLR1_RWU ((uint16_t)0x0002) /* Receiver wakeup */ +#define USART_CTLR1_RE ((uint16_t)0x0004) /* Receiver Enable */ +#define USART_CTLR1_TE ((uint16_t)0x0008) /* Transmitter Enable */ +#define USART_CTLR1_IDLEIE ((uint16_t)0x0010) /* IDLE Interrupt Enable */ +#define USART_CTLR1_RXNEIE ((uint16_t)0x0020) /* RXNE Interrupt Enable */ +#define USART_CTLR1_TCIE ((uint16_t)0x0040) /* Transmission Complete Interrupt Enable */ +#define USART_CTLR1_TXEIE ((uint16_t)0x0080) /* PE Interrupt Enable */ +#define USART_CTLR1_PEIE ((uint16_t)0x0100) /* PE Interrupt Enable */ +#define USART_CTLR1_PS ((uint16_t)0x0200) /* Parity Selection */ +#define USART_CTLR1_PCE ((uint16_t)0x0400) /* Parity Control Enable */ +#define USART_CTLR1_WAKE ((uint16_t)0x0800) /* Wakeup method */ +#define USART_CTLR1_M ((uint16_t)0x1000) /* Word length */ +#define USART_CTLR1_UE ((uint16_t)0x2000) /* USART Enable */ +#define USART_CTLR1_OVER8 ((uint16_t)0x8000) /* USART Oversmapling 8-bits */ + +/****************** Bit definition for USART_CTLR2 register *******************/ +#define USART_CTLR2_ADD ((uint16_t)0x000F) /* Address of the USART node */ +#define USART_CTLR2_LBDL ((uint16_t)0x0020) /* LIN Break Detection Length */ +#define USART_CTLR2_LBDIE ((uint16_t)0x0040) /* LIN Break Detection Interrupt Enable */ +#define USART_CTLR2_LBCL ((uint16_t)0x0100) /* Last Bit Clock pulse */ +#define USART_CTLR2_CPHA ((uint16_t)0x0200) /* Clock Phase */ +#define USART_CTLR2_CPOL ((uint16_t)0x0400) /* Clock Polarity */ +#define USART_CTLR2_CLKEN ((uint16_t)0x0800) /* Clock Enable */ + +#define USART_CTLR2_STOP ((uint16_t)0x3000) /* STOP[1:0] bits (STOP bits) */ +#define USART_CTLR2_STOP_0 ((uint16_t)0x1000) /* Bit 0 */ +#define USART_CTLR2_STOP_1 ((uint16_t)0x2000) /* Bit 1 */ + +#define USART_CTLR2_LINEN ((uint16_t)0x4000) /* LIN mode enable */ + +/****************** Bit definition for USART_CTLR3 register *******************/ +#define USART_CTLR3_EIE ((uint16_t)0x0001) /* Error Interrupt Enable */ +#define USART_CTLR3_IREN ((uint16_t)0x0002) /* IrDA mode Enable */ +#define USART_CTLR3_IRLP ((uint16_t)0x0004) /* IrDA Low-Power */ +#define USART_CTLR3_HDSEL ((uint16_t)0x0008) /* Half-Duplex Selection */ +#define USART_CTLR3_NACK ((uint16_t)0x0010) /* Smartcard NACK enable */ +#define USART_CTLR3_SCEN ((uint16_t)0x0020) /* Smartcard mode enable */ +#define USART_CTLR3_DMAR ((uint16_t)0x0040) /* DMA Enable Receiver */ +#define USART_CTLR3_DMAT ((uint16_t)0x0080) /* DMA Enable Transmitter */ +#define USART_CTLR3_RTSE ((uint16_t)0x0100) /* RTS Enable */ +#define USART_CTLR3_CTSE ((uint16_t)0x0200) /* CTS Enable */ +#define USART_CTLR3_CTSIE ((uint16_t)0x0400) /* CTS Interrupt Enable */ +#define USART_CTLR3_ONEBIT ((uint16_t)0x0800) /* One Bit method */ + +/****************** Bit definition for USART_GPR register ******************/ +#define USART_GPR_PSC ((uint16_t)0x00FF) /* PSC[7:0] bits (Prescaler value) */ +#define USART_GPR_PSC_0 ((uint16_t)0x0001) /* Bit 0 */ +#define USART_GPR_PSC_1 ((uint16_t)0x0002) /* Bit 1 */ +#define USART_GPR_PSC_2 ((uint16_t)0x0004) /* Bit 2 */ +#define USART_GPR_PSC_3 ((uint16_t)0x0008) /* Bit 3 */ +#define USART_GPR_PSC_4 ((uint16_t)0x0010) /* Bit 4 */ +#define USART_GPR_PSC_5 ((uint16_t)0x0020) /* Bit 5 */ +#define USART_GPR_PSC_6 ((uint16_t)0x0040) /* Bit 6 */ +#define USART_GPR_PSC_7 ((uint16_t)0x0080) /* Bit 7 */ + +#define USART_GPR_GT ((uint16_t)0xFF00) /* Guard time value */ + +/******************************************************************************/ +/* Window WATCHDOG */ +/******************************************************************************/ + +/******************* Bit definition for WWDG_CTLR register ********************/ +#define WWDG_CTLR_T ((uint8_t)0x7F) /* T[6:0] bits (7-Bit counter (MSB to LSB)) */ +#define WWDG_CTLR_T0 ((uint8_t)0x01) /* Bit 0 */ +#define WWDG_CTLR_T1 ((uint8_t)0x02) /* Bit 1 */ +#define WWDG_CTLR_T2 ((uint8_t)0x04) /* Bit 2 */ +#define WWDG_CTLR_T3 ((uint8_t)0x08) /* Bit 3 */ +#define WWDG_CTLR_T4 ((uint8_t)0x10) /* Bit 4 */ +#define WWDG_CTLR_T5 ((uint8_t)0x20) /* Bit 5 */ +#define WWDG_CTLR_T6 ((uint8_t)0x40) /* Bit 6 */ + +#define WWDG_CTLR_WDGA ((uint8_t)0x80) /* Activation bit */ + +/******************* Bit definition for WWDG_CFGR register *******************/ +#define WWDG_CFGR_W ((uint16_t)0x007F) /* W[6:0] bits (7-bit window value) */ +#define WWDG_CFGR_W0 ((uint16_t)0x0001) /* Bit 0 */ +#define WWDG_CFGR_W1 ((uint16_t)0x0002) /* Bit 1 */ +#define WWDG_CFGR_W2 ((uint16_t)0x0004) /* Bit 2 */ +#define WWDG_CFGR_W3 ((uint16_t)0x0008) /* Bit 3 */ +#define WWDG_CFGR_W4 ((uint16_t)0x0010) /* Bit 4 */ +#define WWDG_CFGR_W5 ((uint16_t)0x0020) /* Bit 5 */ +#define WWDG_CFGR_W6 ((uint16_t)0x0040) /* Bit 6 */ + +#define WWDG_CFGR_WDGTB ((uint16_t)0x0180) /* WDGTB[1:0] bits (Timer Base) */ +#define WWDG_CFGR_WDGTB0 ((uint16_t)0x0080) /* Bit 0 */ +#define WWDG_CFGR_WDGTB1 ((uint16_t)0x0100) /* Bit 1 */ + +#define WWDG_CFGR_EWI ((uint16_t)0x0200) /* Early Wakeup Interrupt */ + +/******************* Bit definition for WWDG_STATR register ********************/ +#define WWDG_STATR_EWIF ((uint8_t)0x01) /* Early Wakeup Interrupt Flag */ + +/******************************************************************************/ +/* ENHANCED FUNNCTION */ +/******************************************************************************/ + +/**************************** Enhanced register *****************************/ +#define EXTEN_USBD_LS ((uint32_t)0x00000001) /* Bit 0 */ +#define EXTEN_USBD_PU_EN ((uint32_t)0x00000002) /* Bit 1 */ +#define EXTEN_USBHD_IO_EN ((uint32_t)0x00000004) /* Bit 2 */ +#define EXTEN_USB_5V_SEL ((uint32_t)0x00000008) /* Bit 3 */ +#define EXTEN_PLL_HSI_PRE ((uint32_t)0x00000010) /* Bit 4 */ +#define EXTEN_LOCKUP_EN ((uint32_t)0x00000040) /* Bit 5 */ +#define EXTEN_LOCKUP_RSTF ((uint32_t)0x00000080) /* Bit 7 */ + +#define EXTEN_ULLDO_TRIM ((uint32_t)0x00000300) /* ULLDO_TRIM[1:0] bits */ +#define EXTEN_ULLDO_TRIM0 ((uint32_t)0x00000100) /* Bit 0 */ +#define EXTEN_ULLDO_TRIM1 ((uint32_t)0x00000200) /* Bit 1 */ + +#define EXTEN_IDO_TRIM ((uint32_t)0x00000400) /* Bit 10 */ +#define EXTEN_WRITE_EN ((uint32_t)0x00004000) /* Bit 14 */ +#define EXTEN_SHORT_WAKE ((uint32_t)0x00008000) /* Bit 15 */ + +#define EXTEN_FLASH_CLK_TRIM ((uint32_t)0x00070000) /* FLASH_CLK_TRIM[2:0] bits */ +#define EXTEN_FLASH_CLK_TRIM0 ((uint32_t)0x00010000) /* Bit 0 */ +#define EXTEN_FLASH_CLK_TRIM1 ((uint32_t)0x00020000) /* Bit 1 */ +#define EXTEN_FLASH_CLK_TRIM2 ((uint32_t)0x00040000) /* Bit 2 */ + + + +#include "ch32v10x_conf.h" + + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_H */ + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_adc.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_adc.h new file mode 100644 index 0000000000..6599f129d9 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_adc.h @@ -0,0 +1,193 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_adc.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* ADC firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_ADC_H +#define __CH32V10x_ADC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + + +/* ADC Init structure definition */ +typedef struct +{ + uint32_t ADC_Mode; /* Configures the ADC to operate in independent or + dual mode. + This parameter can be a value of @ref ADC_mode */ + + FunctionalState ADC_ScanConvMode; /* Specifies whether the conversion is performed in + Scan (multichannels) or Single (one channel) mode. + This parameter can be set to ENABLE or DISABLE */ + + FunctionalState ADC_ContinuousConvMode; /* Specifies whether the conversion is performed in + Continuous or Single mode. + This parameter can be set to ENABLE or DISABLE. */ + + uint32_t ADC_ExternalTrigConv; /* Defines the external trigger used to start the analog + to digital conversion of regular channels. This parameter + can be a value of @ref ADC_external_trigger_sources_for_regular_channels_conversion */ + + uint32_t ADC_DataAlign; /* Specifies whether the ADC data alignment is left or right. + This parameter can be a value of @ref ADC_data_align */ + + uint8_t ADC_NbrOfChannel; /* Specifies the number of ADC channels that will be converted + using the sequencer for regular channel group. + This parameter must range from 1 to 16. */ +}ADC_InitTypeDef; + +/* ADC_mode */ +#define ADC_Mode_Independent ((uint32_t)0x00000000) +#define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000) +#define ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000) +#define ADC_Mode_InjecSimult_FastInterl ((uint32_t)0x00030000) +#define ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000) +#define ADC_Mode_InjecSimult ((uint32_t)0x00050000) +#define ADC_Mode_RegSimult ((uint32_t)0x00060000) +#define ADC_Mode_FastInterl ((uint32_t)0x00070000) +#define ADC_Mode_SlowInterl ((uint32_t)0x00080000) +#define ADC_Mode_AlterTrig ((uint32_t)0x00090000) + +/* ADC_external_trigger_sources_for_regular_channels_conversion */ +#define ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000) +#define ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x00020000) +#define ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x00060000) +#define ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x00080000) +#define ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x000A0000) +#define ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO ((uint32_t)0x000C0000) + +#define ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00040000) +#define ADC_ExternalTrigConv_None ((uint32_t)0x000E0000) + +/* ADC_data_align */ +#define ADC_DataAlign_Right ((uint32_t)0x00000000) +#define ADC_DataAlign_Left ((uint32_t)0x00000800) + +/* ADC_channels */ +#define ADC_Channel_0 ((uint8_t)0x00) +#define ADC_Channel_1 ((uint8_t)0x01) +#define ADC_Channel_2 ((uint8_t)0x02) +#define ADC_Channel_3 ((uint8_t)0x03) +#define ADC_Channel_4 ((uint8_t)0x04) +#define ADC_Channel_5 ((uint8_t)0x05) +#define ADC_Channel_6 ((uint8_t)0x06) +#define ADC_Channel_7 ((uint8_t)0x07) +#define ADC_Channel_8 ((uint8_t)0x08) +#define ADC_Channel_9 ((uint8_t)0x09) +#define ADC_Channel_10 ((uint8_t)0x0A) +#define ADC_Channel_11 ((uint8_t)0x0B) +#define ADC_Channel_12 ((uint8_t)0x0C) +#define ADC_Channel_13 ((uint8_t)0x0D) +#define ADC_Channel_14 ((uint8_t)0x0E) +#define ADC_Channel_15 ((uint8_t)0x0F) +#define ADC_Channel_16 ((uint8_t)0x10) +#define ADC_Channel_17 ((uint8_t)0x11) + +#define ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16) +#define ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17) + +/* ADC_sampling_time */ +#define ADC_SampleTime_1Cycles5 ((uint8_t)0x00) +#define ADC_SampleTime_7Cycles5 ((uint8_t)0x01) +#define ADC_SampleTime_13Cycles5 ((uint8_t)0x02) +#define ADC_SampleTime_28Cycles5 ((uint8_t)0x03) +#define ADC_SampleTime_41Cycles5 ((uint8_t)0x04) +#define ADC_SampleTime_55Cycles5 ((uint8_t)0x05) +#define ADC_SampleTime_71Cycles5 ((uint8_t)0x06) +#define ADC_SampleTime_239Cycles5 ((uint8_t)0x07) + +/* ADC_external_trigger_sources_for_injected_channels_conversion */ +#define ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00002000) +#define ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00003000) +#define ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00004000) +#define ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00005000) +#define ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 ((uint32_t)0x00006000) + +#define ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00000000) +#define ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00001000) +#define ADC_ExternalTrigInjecConv_None ((uint32_t)0x00007000) + +/* ADC_injected_channel_selection */ +#define ADC_InjectedChannel_1 ((uint8_t)0x14) +#define ADC_InjectedChannel_2 ((uint8_t)0x18) +#define ADC_InjectedChannel_3 ((uint8_t)0x1C) +#define ADC_InjectedChannel_4 ((uint8_t)0x20) + +/* ADC_analog_watchdog_selection */ +#define ADC_AnalogWatchdog_SingleRegEnable ((uint32_t)0x00800200) +#define ADC_AnalogWatchdog_SingleInjecEnable ((uint32_t)0x00400200) +#define ADC_AnalogWatchdog_SingleRegOrInjecEnable ((uint32_t)0x00C00200) +#define ADC_AnalogWatchdog_AllRegEnable ((uint32_t)0x00800000) +#define ADC_AnalogWatchdog_AllInjecEnable ((uint32_t)0x00400000) +#define ADC_AnalogWatchdog_AllRegAllInjecEnable ((uint32_t)0x00C00000) +#define ADC_AnalogWatchdog_None ((uint32_t)0x00000000) + +/* ADC_interrupts_definition */ +#define ADC_IT_EOC ((uint16_t)0x0220) +#define ADC_IT_AWD ((uint16_t)0x0140) +#define ADC_IT_JEOC ((uint16_t)0x0480) + +/* ADC_flags_definition */ +#define ADC_FLAG_AWD ((uint8_t)0x01) +#define ADC_FLAG_EOC ((uint8_t)0x02) +#define ADC_FLAG_JEOC ((uint8_t)0x04) +#define ADC_FLAG_JSTRT ((uint8_t)0x08) +#define ADC_FLAG_STRT ((uint8_t)0x10) + + +void ADC_DeInit(ADC_TypeDef* ADCx); +void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct); +void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct); +void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState); +void ADC_ResetCalibration(ADC_TypeDef* ADCx); +FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx); +void ADC_StartCalibration(ADC_TypeDef* ADCx); +FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx); +void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx); +void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number); +void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); +void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx); +uint32_t ADC_GetDualModeConversionValue(void); +void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv); +void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState); +FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx); +void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime); +void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length); +void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset); +uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel); +void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog); +void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold); +void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel); +void ADC_TempSensorVrefintCmd(FunctionalState NewState); +FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); +void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG); +ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT); +void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT); +s32 TempSensor_Volt_To_Temper(s32 Value); + +#ifdef __cplusplus +} +#endif + +#endif /*__CH32V10x_ADC_H */ + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_bkp.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_bkp.h new file mode 100644 index 0000000000..7024e68e42 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_bkp.h @@ -0,0 +1,95 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_bkp.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* BKP firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_BKP_H +#define __CH32V10x_BKP_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* Tamper_Pin_active_level */ +#define BKP_TamperPinLevel_High ((uint16_t)0x0000) +#define BKP_TamperPinLevel_Low ((uint16_t)0x0001) + +/* RTC_output_source_to_output_on_the_Tamper_pin */ +#define BKP_RTCOutputSource_None ((uint16_t)0x0000) +#define BKP_RTCOutputSource_CalibClock ((uint16_t)0x0080) +#define BKP_RTCOutputSource_Alarm ((uint16_t)0x0100) +#define BKP_RTCOutputSource_Second ((uint16_t)0x0300) + +/* Data_Backup_Register */ +#define BKP_DR1 ((uint16_t)0x0004) +#define BKP_DR2 ((uint16_t)0x0008) +#define BKP_DR3 ((uint16_t)0x000C) +#define BKP_DR4 ((uint16_t)0x0010) +#define BKP_DR5 ((uint16_t)0x0014) +#define BKP_DR6 ((uint16_t)0x0018) +#define BKP_DR7 ((uint16_t)0x001C) +#define BKP_DR8 ((uint16_t)0x0020) +#define BKP_DR9 ((uint16_t)0x0024) +#define BKP_DR10 ((uint16_t)0x0028) +#define BKP_DR11 ((uint16_t)0x0040) +#define BKP_DR12 ((uint16_t)0x0044) +#define BKP_DR13 ((uint16_t)0x0048) +#define BKP_DR14 ((uint16_t)0x004C) +#define BKP_DR15 ((uint16_t)0x0050) +#define BKP_DR16 ((uint16_t)0x0054) +#define BKP_DR17 ((uint16_t)0x0058) +#define BKP_DR18 ((uint16_t)0x005C) +#define BKP_DR19 ((uint16_t)0x0060) +#define BKP_DR20 ((uint16_t)0x0064) +#define BKP_DR21 ((uint16_t)0x0068) +#define BKP_DR22 ((uint16_t)0x006C) +#define BKP_DR23 ((uint16_t)0x0070) +#define BKP_DR24 ((uint16_t)0x0074) +#define BKP_DR25 ((uint16_t)0x0078) +#define BKP_DR26 ((uint16_t)0x007C) +#define BKP_DR27 ((uint16_t)0x0080) +#define BKP_DR28 ((uint16_t)0x0084) +#define BKP_DR29 ((uint16_t)0x0088) +#define BKP_DR30 ((uint16_t)0x008C) +#define BKP_DR31 ((uint16_t)0x0090) +#define BKP_DR32 ((uint16_t)0x0094) +#define BKP_DR33 ((uint16_t)0x0098) +#define BKP_DR34 ((uint16_t)0x009C) +#define BKP_DR35 ((uint16_t)0x00A0) +#define BKP_DR36 ((uint16_t)0x00A4) +#define BKP_DR37 ((uint16_t)0x00A8) +#define BKP_DR38 ((uint16_t)0x00AC) +#define BKP_DR39 ((uint16_t)0x00B0) +#define BKP_DR40 ((uint16_t)0x00B4) +#define BKP_DR41 ((uint16_t)0x00B8) +#define BKP_DR42 ((uint16_t)0x00BC) + + +void BKP_DeInit(void); +void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel); +void BKP_TamperPinCmd(FunctionalState NewState); +void BKP_ITConfig(FunctionalState NewState); +void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource); +void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue); +void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data); +uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR); +FlagStatus BKP_GetFlagStatus(void); +void BKP_ClearFlag(void); +ITStatus BKP_GetITStatus(void); +void BKP_ClearITPendingBit(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_BKP_H */ + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_crc.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_crc.h new file mode 100644 index 0000000000..b31768dee9 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_crc.h @@ -0,0 +1,35 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_crc.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* CRC firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_CRC_H +#define __CH32V10x_CRC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + + +void CRC_ResetDR(void); +uint32_t CRC_CalcCRC(uint32_t Data); +uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength); +uint32_t CRC_GetCRC(void); +void CRC_SetIDRegister(uint8_t IDValue); +uint8_t CRC_GetIDRegister(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_CRC_H */ + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_dbgmcu.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_dbgmcu.h new file mode 100644 index 0000000000..4ae1a2bbc6 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_dbgmcu.h @@ -0,0 +1,48 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_dbgmcu.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* DBGMCU firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_DBGMCU_H +#define __CH32V10x_DBGMCU_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + + +/* CFGR0 Register */ +#define DBGMCU_IWDG_STOP ((uint32_t)0x00000001) +#define DBGMCU_WWDG_STOP ((uint32_t)0x00000002) +#define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00000004) +#define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00000008) +#define DBGMCU_TIM1_STOP ((uint32_t)0x00000010) +#define DBGMCU_TIM2_STOP ((uint32_t)0x00000020) +#define DBGMCU_TIM3_STOP ((uint32_t)0x00000040) +#define DBGMCU_TIM4_STOP ((uint32_t)0x00000080) + +/* CFGR1 Register */ +#define DBGMCU_SLEEP ((uint32_t)0x00000001) +#define DBGMCU_STOP ((uint32_t)0x00000002) +#define DBGMCU_STANDBY ((uint32_t)0x00000004) + + +void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_DBGMCU_H */ + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_dma.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_dma.h new file mode 100644 index 0000000000..f83ad86b81 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_dma.h @@ -0,0 +1,216 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_dma.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* DMA firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_DMA_H +#define __CH32V10x_DMA_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* DMA Init structure definition */ +typedef struct +{ + uint32_t DMA_PeripheralBaseAddr; /* Specifies the peripheral base address for DMAy Channelx. */ + + uint32_t DMA_MemoryBaseAddr; /* Specifies the memory base address for DMAy Channelx. */ + + uint32_t DMA_DIR; /* Specifies if the peripheral is the source or destination. + This parameter can be a value of @ref DMA_data_transfer_direction */ + + uint32_t DMA_BufferSize; /* Specifies the buffer size, in data unit, of the specified Channel. + The data unit is equal to the configuration set in DMA_PeripheralDataSize + or DMA_MemoryDataSize members depending in the transfer direction. */ + + uint32_t DMA_PeripheralInc; /* Specifies whether the Peripheral address register is incremented or not. + This parameter can be a value of @ref DMA_peripheral_incremented_mode */ + + uint32_t DMA_MemoryInc; /* Specifies whether the memory address register is incremented or not. + This parameter can be a value of @ref DMA_memory_incremented_mode */ + + uint32_t DMA_PeripheralDataSize; /* Specifies the Peripheral data width. + This parameter can be a value of @ref DMA_peripheral_data_size */ + + uint32_t DMA_MemoryDataSize; /* Specifies the Memory data width. + This parameter can be a value of @ref DMA_memory_data_size */ + + uint32_t DMA_Mode; /* Specifies the operation mode of the DMAy Channelx. + This parameter can be a value of @ref DMA_circular_normal_mode. + @note: The circular buffer mode cannot be used if the memory-to-memory + data transfer is configured on the selected Channel */ + + uint32_t DMA_Priority; /* Specifies the software priority for the DMAy Channelx. + This parameter can be a value of @ref DMA_priority_level */ + + uint32_t DMA_M2M; /* Specifies if the DMAy Channelx will be used in memory-to-memory transfer. + This parameter can be a value of @ref DMA_memory_to_memory */ +}DMA_InitTypeDef; + +/* DMA_data_transfer_direction */ +#define DMA_DIR_PeripheralDST ((uint32_t)0x00000010) +#define DMA_DIR_PeripheralSRC ((uint32_t)0x00000000) + +/* DMA_peripheral_incremented_mode */ +#define DMA_PeripheralInc_Enable ((uint32_t)0x00000040) +#define DMA_PeripheralInc_Disable ((uint32_t)0x00000000) + +/* DMA_memory_incremented_mode */ +#define DMA_MemoryInc_Enable ((uint32_t)0x00000080) +#define DMA_MemoryInc_Disable ((uint32_t)0x00000000) + +/* DMA_peripheral_data_size */ +#define DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000) +#define DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100) +#define DMA_PeripheralDataSize_Word ((uint32_t)0x00000200) + +/* DMA_memory_data_size */ +#define DMA_MemoryDataSize_Byte ((uint32_t)0x00000000) +#define DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400) +#define DMA_MemoryDataSize_Word ((uint32_t)0x00000800) + +/* DMA_circular_normal_mode */ +#define DMA_Mode_Circular ((uint32_t)0x00000020) +#define DMA_Mode_Normal ((uint32_t)0x00000000) + +/* DMA_priority_level */ +#define DMA_Priority_VeryHigh ((uint32_t)0x00003000) +#define DMA_Priority_High ((uint32_t)0x00002000) +#define DMA_Priority_Medium ((uint32_t)0x00001000) +#define DMA_Priority_Low ((uint32_t)0x00000000) + +/* DMA_memory_to_memory */ +#define DMA_M2M_Enable ((uint32_t)0x00004000) +#define DMA_M2M_Disable ((uint32_t)0x00000000) + +/* DMA_interrupts_definition */ +#define DMA_IT_TC ((uint32_t)0x00000002) +#define DMA_IT_HT ((uint32_t)0x00000004) +#define DMA_IT_TE ((uint32_t)0x00000008) + +#define DMA1_IT_GL1 ((uint32_t)0x00000001) +#define DMA1_IT_TC1 ((uint32_t)0x00000002) +#define DMA1_IT_HT1 ((uint32_t)0x00000004) +#define DMA1_IT_TE1 ((uint32_t)0x00000008) +#define DMA1_IT_GL2 ((uint32_t)0x00000010) +#define DMA1_IT_TC2 ((uint32_t)0x00000020) +#define DMA1_IT_HT2 ((uint32_t)0x00000040) +#define DMA1_IT_TE2 ((uint32_t)0x00000080) +#define DMA1_IT_GL3 ((uint32_t)0x00000100) +#define DMA1_IT_TC3 ((uint32_t)0x00000200) +#define DMA1_IT_HT3 ((uint32_t)0x00000400) +#define DMA1_IT_TE3 ((uint32_t)0x00000800) +#define DMA1_IT_GL4 ((uint32_t)0x00001000) +#define DMA1_IT_TC4 ((uint32_t)0x00002000) +#define DMA1_IT_HT4 ((uint32_t)0x00004000) +#define DMA1_IT_TE4 ((uint32_t)0x00008000) +#define DMA1_IT_GL5 ((uint32_t)0x00010000) +#define DMA1_IT_TC5 ((uint32_t)0x00020000) +#define DMA1_IT_HT5 ((uint32_t)0x00040000) +#define DMA1_IT_TE5 ((uint32_t)0x00080000) +#define DMA1_IT_GL6 ((uint32_t)0x00100000) +#define DMA1_IT_TC6 ((uint32_t)0x00200000) +#define DMA1_IT_HT6 ((uint32_t)0x00400000) +#define DMA1_IT_TE6 ((uint32_t)0x00800000) +#define DMA1_IT_GL7 ((uint32_t)0x01000000) +#define DMA1_IT_TC7 ((uint32_t)0x02000000) +#define DMA1_IT_HT7 ((uint32_t)0x04000000) +#define DMA1_IT_TE7 ((uint32_t)0x08000000) + +#define DMA2_IT_GL1 ((uint32_t)0x10000001) +#define DMA2_IT_TC1 ((uint32_t)0x10000002) +#define DMA2_IT_HT1 ((uint32_t)0x10000004) +#define DMA2_IT_TE1 ((uint32_t)0x10000008) +#define DMA2_IT_GL2 ((uint32_t)0x10000010) +#define DMA2_IT_TC2 ((uint32_t)0x10000020) +#define DMA2_IT_HT2 ((uint32_t)0x10000040) +#define DMA2_IT_TE2 ((uint32_t)0x10000080) +#define DMA2_IT_GL3 ((uint32_t)0x10000100) +#define DMA2_IT_TC3 ((uint32_t)0x10000200) +#define DMA2_IT_HT3 ((uint32_t)0x10000400) +#define DMA2_IT_TE3 ((uint32_t)0x10000800) +#define DMA2_IT_GL4 ((uint32_t)0x10001000) +#define DMA2_IT_TC4 ((uint32_t)0x10002000) +#define DMA2_IT_HT4 ((uint32_t)0x10004000) +#define DMA2_IT_TE4 ((uint32_t)0x10008000) +#define DMA2_IT_GL5 ((uint32_t)0x10010000) +#define DMA2_IT_TC5 ((uint32_t)0x10020000) +#define DMA2_IT_HT5 ((uint32_t)0x10040000) +#define DMA2_IT_TE5 ((uint32_t)0x10080000) + +/* DMA_flags_definition */ +#define DMA1_FLAG_GL1 ((uint32_t)0x00000001) +#define DMA1_FLAG_TC1 ((uint32_t)0x00000002) +#define DMA1_FLAG_HT1 ((uint32_t)0x00000004) +#define DMA1_FLAG_TE1 ((uint32_t)0x00000008) +#define DMA1_FLAG_GL2 ((uint32_t)0x00000010) +#define DMA1_FLAG_TC2 ((uint32_t)0x00000020) +#define DMA1_FLAG_HT2 ((uint32_t)0x00000040) +#define DMA1_FLAG_TE2 ((uint32_t)0x00000080) +#define DMA1_FLAG_GL3 ((uint32_t)0x00000100) +#define DMA1_FLAG_TC3 ((uint32_t)0x00000200) +#define DMA1_FLAG_HT3 ((uint32_t)0x00000400) +#define DMA1_FLAG_TE3 ((uint32_t)0x00000800) +#define DMA1_FLAG_GL4 ((uint32_t)0x00001000) +#define DMA1_FLAG_TC4 ((uint32_t)0x00002000) +#define DMA1_FLAG_HT4 ((uint32_t)0x00004000) +#define DMA1_FLAG_TE4 ((uint32_t)0x00008000) +#define DMA1_FLAG_GL5 ((uint32_t)0x00010000) +#define DMA1_FLAG_TC5 ((uint32_t)0x00020000) +#define DMA1_FLAG_HT5 ((uint32_t)0x00040000) +#define DMA1_FLAG_TE5 ((uint32_t)0x00080000) +#define DMA1_FLAG_GL6 ((uint32_t)0x00100000) +#define DMA1_FLAG_TC6 ((uint32_t)0x00200000) +#define DMA1_FLAG_HT6 ((uint32_t)0x00400000) +#define DMA1_FLAG_TE6 ((uint32_t)0x00800000) +#define DMA1_FLAG_GL7 ((uint32_t)0x01000000) +#define DMA1_FLAG_TC7 ((uint32_t)0x02000000) +#define DMA1_FLAG_HT7 ((uint32_t)0x04000000) +#define DMA1_FLAG_TE7 ((uint32_t)0x08000000) + +#define DMA2_FLAG_GL1 ((uint32_t)0x10000001) +#define DMA2_FLAG_TC1 ((uint32_t)0x10000002) +#define DMA2_FLAG_HT1 ((uint32_t)0x10000004) +#define DMA2_FLAG_TE1 ((uint32_t)0x10000008) +#define DMA2_FLAG_GL2 ((uint32_t)0x10000010) +#define DMA2_FLAG_TC2 ((uint32_t)0x10000020) +#define DMA2_FLAG_HT2 ((uint32_t)0x10000040) +#define DMA2_FLAG_TE2 ((uint32_t)0x10000080) +#define DMA2_FLAG_GL3 ((uint32_t)0x10000100) +#define DMA2_FLAG_TC3 ((uint32_t)0x10000200) +#define DMA2_FLAG_HT3 ((uint32_t)0x10000400) +#define DMA2_FLAG_TE3 ((uint32_t)0x10000800) +#define DMA2_FLAG_GL4 ((uint32_t)0x10001000) +#define DMA2_FLAG_TC4 ((uint32_t)0x10002000) +#define DMA2_FLAG_HT4 ((uint32_t)0x10004000) +#define DMA2_FLAG_TE4 ((uint32_t)0x10008000) +#define DMA2_FLAG_GL5 ((uint32_t)0x10010000) +#define DMA2_FLAG_TC5 ((uint32_t)0x10020000) +#define DMA2_FLAG_HT5 ((uint32_t)0x10040000) +#define DMA2_FLAG_TE5 ((uint32_t)0x10080000) + + +void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx); +void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct); +void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct); +void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState); +void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState); +void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber); +uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx); +FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG); +void DMA_ClearFlag(uint32_t DMAy_FLAG); +ITStatus DMA_GetITStatus(uint32_t DMAy_IT); +void DMA_ClearITPendingBit(uint32_t DMAy_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__CH32V10x_DMA_H */ + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_exti.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_exti.h new file mode 100644 index 0000000000..79c4d2ec62 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_exti.h @@ -0,0 +1,88 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_exti.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* EXTI firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_EXTI_H +#define __CH32V10x_EXTI_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* EXTI mode enumeration */ +typedef enum +{ + EXTI_Mode_Interrupt = 0x00, + EXTI_Mode_Event = 0x04 +}EXTIMode_TypeDef; + +/* EXTI Trigger enumeration */ +typedef enum +{ + EXTI_Trigger_Rising = 0x08, + EXTI_Trigger_Falling = 0x0C, + EXTI_Trigger_Rising_Falling = 0x10 +}EXTITrigger_TypeDef; + +/* EXTI Init Structure definition */ +typedef struct +{ + uint32_t EXTI_Line; /* Specifies the EXTI lines to be enabled or disabled. + This parameter can be any combination of @ref EXTI_Lines */ + + EXTIMode_TypeDef EXTI_Mode; /* Specifies the mode for the EXTI lines. + This parameter can be a value of @ref EXTIMode_TypeDef */ + + EXTITrigger_TypeDef EXTI_Trigger; /* Specifies the trigger signal active edge for the EXTI lines. + This parameter can be a value of @ref EXTIMode_TypeDef */ + + FunctionalState EXTI_LineCmd; /* Specifies the new state of the selected EXTI lines. + This parameter can be set either to ENABLE or DISABLE */ +}EXTI_InitTypeDef; + + +/* EXTI_Lines */ +#define EXTI_Line0 ((uint32_t)0x00001) /* External interrupt line 0 */ +#define EXTI_Line1 ((uint32_t)0x00002) /* External interrupt line 1 */ +#define EXTI_Line2 ((uint32_t)0x00004) /* External interrupt line 2 */ +#define EXTI_Line3 ((uint32_t)0x00008) /* External interrupt line 3 */ +#define EXTI_Line4 ((uint32_t)0x00010) /* External interrupt line 4 */ +#define EXTI_Line5 ((uint32_t)0x00020) /* External interrupt line 5 */ +#define EXTI_Line6 ((uint32_t)0x00040) /* External interrupt line 6 */ +#define EXTI_Line7 ((uint32_t)0x00080) /* External interrupt line 7 */ +#define EXTI_Line8 ((uint32_t)0x00100) /* External interrupt line 8 */ +#define EXTI_Line9 ((uint32_t)0x00200) /* External interrupt line 9 */ +#define EXTI_Line10 ((uint32_t)0x00400) /* External interrupt line 10 */ +#define EXTI_Line11 ((uint32_t)0x00800) /* External interrupt line 11 */ +#define EXTI_Line12 ((uint32_t)0x01000) /* External interrupt line 12 */ +#define EXTI_Line13 ((uint32_t)0x02000) /* External interrupt line 13 */ +#define EXTI_Line14 ((uint32_t)0x04000) /* External interrupt line 14 */ +#define EXTI_Line15 ((uint32_t)0x08000) /* External interrupt line 15 */ +#define EXTI_Line16 ((uint32_t)0x10000) /* External interrupt line 16 Connected to the PVD Output */ +#define EXTI_Line17 ((uint32_t)0x20000) /* External interrupt line 17 Connected to the RTC Alarm event */ +#define EXTI_Line18 ((uint32_t)0x40000) /* External interrupt line 18 Connected to the USB Device/USB OTG FS + Wakeup from suspend event */ +#define EXTI_Line19 ((uint32_t)0x80000) /* External interrupt line 19 Connected to the Ethernet Wakeup event */ + + +void EXTI_DeInit(void); +void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); +void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); +void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); +FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line); +void EXTI_ClearFlag(uint32_t EXTI_Line); +ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); +void EXTI_ClearITPendingBit(uint32_t EXTI_Line); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_EXTI_H */ + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_flash.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_flash.h new file mode 100644 index 0000000000..31dd06ab84 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_flash.h @@ -0,0 +1,157 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_flash.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the FLASH +* firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_FLASH_H +#define __CH32V10x_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* FLASH Status */ +typedef enum +{ + FLASH_BUSY = 1, + FLASH_ERROR_PG, + FLASH_ERROR_WRP, + FLASH_COMPLETE, + FLASH_TIMEOUT +}FLASH_Status; + + +/* Flash_Latency */ +#define FLASH_Latency_0 ((uint32_t)0x00000000) /* FLASH Zero Latency cycle */ +#define FLASH_Latency_1 ((uint32_t)0x00000001) /* FLASH One Latency cycle */ +#define FLASH_Latency_2 ((uint32_t)0x00000002) /* FLASH Two Latency cycles */ + +/* Half_Cycle_Enable_Disable */ +#define FLASH_HalfCycleAccess_Enable ((uint32_t)0x00000008) /* FLASH Half Cycle Enable */ +#define FLASH_HalfCycleAccess_Disable ((uint32_t)0x00000000) /* FLASH Half Cycle Disable */ + +/* Prefetch_Buffer_Enable_Disable */ +#define FLASH_PrefetchBuffer_Enable ((uint32_t)0x00000010) /* FLASH Prefetch Buffer Enable */ +#define FLASH_PrefetchBuffer_Disable ((uint32_t)0x00000000) /* FLASH Prefetch Buffer Disable */ + +/* Values to be used with CH32V10x Low and Medium density devices */ +#define FLASH_WRProt_Pages0to3 ((uint32_t)0x00000001) /* CH32 Low and Medium density devices: Write protection of page 0 to 3 */ +#define FLASH_WRProt_Pages4to7 ((uint32_t)0x00000002) /* CH32 Low and Medium density devices: Write protection of page 4 to 7 */ +#define FLASH_WRProt_Pages8to11 ((uint32_t)0x00000004) /* CH32 Low and Medium density devices: Write protection of page 8 to 11 */ +#define FLASH_WRProt_Pages12to15 ((uint32_t)0x00000008) /* CH32 Low and Medium density devices: Write protection of page 12 to 15 */ +#define FLASH_WRProt_Pages16to19 ((uint32_t)0x00000010) /* CH32 Low and Medium density devices: Write protection of page 16 to 19 */ +#define FLASH_WRProt_Pages20to23 ((uint32_t)0x00000020) /* CH32 Low and Medium density devices: Write protection of page 20 to 23 */ +#define FLASH_WRProt_Pages24to27 ((uint32_t)0x00000040) /* CH32 Low and Medium density devices: Write protection of page 24 to 27 */ +#define FLASH_WRProt_Pages28to31 ((uint32_t)0x00000080) /* CH32 Low and Medium density devices: Write protection of page 28 to 31 */ + +/* Values to be used with CH32V10x Medium-density devices */ +#define FLASH_WRProt_Pages32to35 ((uint32_t)0x00000100) /* CH32 Medium-density devices: Write protection of page 32 to 35 */ +#define FLASH_WRProt_Pages36to39 ((uint32_t)0x00000200) /* CH32 Medium-density devices: Write protection of page 36 to 39 */ +#define FLASH_WRProt_Pages40to43 ((uint32_t)0x00000400) /* CH32 Medium-density devices: Write protection of page 40 to 43 */ +#define FLASH_WRProt_Pages44to47 ((uint32_t)0x00000800) /* CH32 Medium-density devices: Write protection of page 44 to 47 */ +#define FLASH_WRProt_Pages48to51 ((uint32_t)0x00001000) /* CH32 Medium-density devices: Write protection of page 48 to 51 */ +#define FLASH_WRProt_Pages52to55 ((uint32_t)0x00002000) /* CH32 Medium-density devices: Write protection of page 52 to 55 */ +#define FLASH_WRProt_Pages56to59 ((uint32_t)0x00004000) /* CH32 Medium-density devices: Write protection of page 56 to 59 */ +#define FLASH_WRProt_Pages60to63 ((uint32_t)0x00008000) /* CH32 Medium-density devices: Write protection of page 60 to 63 */ +#define FLASH_WRProt_Pages64to67 ((uint32_t)0x00010000) /* CH32 Medium-density devices: Write protection of page 64 to 67 */ +#define FLASH_WRProt_Pages68to71 ((uint32_t)0x00020000) /* CH32 Medium-density devices: Write protection of page 68 to 71 */ +#define FLASH_WRProt_Pages72to75 ((uint32_t)0x00040000) /* CH32 Medium-density devices: Write protection of page 72 to 75 */ +#define FLASH_WRProt_Pages76to79 ((uint32_t)0x00080000) /* CH32 Medium-density devices: Write protection of page 76 to 79 */ +#define FLASH_WRProt_Pages80to83 ((uint32_t)0x00100000) /* CH32 Medium-density devices: Write protection of page 80 to 83 */ +#define FLASH_WRProt_Pages84to87 ((uint32_t)0x00200000) /* CH32 Medium-density devices: Write protection of page 84 to 87 */ +#define FLASH_WRProt_Pages88to91 ((uint32_t)0x00400000) /* CH32 Medium-density devices: Write protection of page 88 to 91 */ +#define FLASH_WRProt_Pages92to95 ((uint32_t)0x00800000) /* CH32 Medium-density devices: Write protection of page 92 to 95 */ +#define FLASH_WRProt_Pages96to99 ((uint32_t)0x01000000) /* CH32 Medium-density devices: Write protection of page 96 to 99 */ +#define FLASH_WRProt_Pages100to103 ((uint32_t)0x02000000) /* CH32 Medium-density devices: Write protection of page 100 to 103 */ +#define FLASH_WRProt_Pages104to107 ((uint32_t)0x04000000) /* CH32 Medium-density devices: Write protection of page 104 to 107 */ +#define FLASH_WRProt_Pages108to111 ((uint32_t)0x08000000) /* CH32 Medium-density devices: Write protection of page 108 to 111 */ +#define FLASH_WRProt_Pages112to115 ((uint32_t)0x10000000) /* CH32 Medium-density devices: Write protection of page 112 to 115 */ +#define FLASH_WRProt_Pages116to119 ((uint32_t)0x20000000) /* CH32 Medium-density devices: Write protection of page 115 to 119 */ +#define FLASH_WRProt_Pages120to123 ((uint32_t)0x40000000) /* CH32 Medium-density devices: Write protection of page 120 to 123 */ +#define FLASH_WRProt_Pages124to127 ((uint32_t)0x80000000) /* CH32 Medium-density devices: Write protection of page 124 to 127 */ + +#define FLASH_WRProt_Pages62to255 ((uint32_t)0x80000000) /* CH32 Medium-density devices: Write protection of page 62 to 255 */ + +#define FLASH_WRProt_AllPages ((uint32_t)0xFFFFFFFF) /* Write protection of all Pages */ + +/* Option_Bytes_IWatchdog */ +#define OB_IWDG_SW ((uint16_t)0x0001) /* Software IWDG selected */ +#define OB_IWDG_HW ((uint16_t)0x0000) /* Hardware IWDG selected */ + +/* Option_Bytes_nRST_STOP */ +#define OB_STOP_NoRST ((uint16_t)0x0002) /* No reset generated when entering in STOP */ +#define OB_STOP_RST ((uint16_t)0x0000) /* Reset generated when entering in STOP */ + +/* Option_Bytes_nRST_STDBY */ +#define OB_STDBY_NoRST ((uint16_t)0x0004) /* No reset generated when entering in STANDBY */ +#define OB_STDBY_RST ((uint16_t)0x0000) /* Reset generated when entering in STANDBY */ + +/* FLASH_Interrupts */ +#define FLASH_IT_ERROR ((uint32_t)0x00000400) /* FPEC error interrupt source */ +#define FLASH_IT_EOP ((uint32_t)0x00001000) /* End of FLASH Operation Interrupt source */ +#define FLASH_IT_BANK1_ERROR FLASH_IT_ERROR /* FPEC BANK1 error interrupt source */ +#define FLASH_IT_BANK1_EOP FLASH_IT_EOP /* End of FLASH BANK1 Operation Interrupt source */ + +/* FLASH_Flags */ +#define FLASH_FLAG_BSY ((uint32_t)0x00000001) /* FLASH Busy flag */ +#define FLASH_FLAG_EOP ((uint32_t)0x00000020) /* FLASH End of Operation flag */ +#define FLASH_FLAG_PGERR ((uint32_t)0x00000004) /* FLASH Program error flag */ +#define FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010) /* FLASH Write protected error flag */ +#define FLASH_FLAG_OPTERR ((uint32_t)0x00000001) /* FLASH Option Byte error flag */ + +#define FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY /* FLASH BANK1 Busy flag*/ +#define FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP /* FLASH BANK1 End of Operation flag */ +#define FLASH_FLAG_BANK1_PGERR FLASH_FLAG_PGERR /* FLASH BANK1 Program error flag */ +#define FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR /* FLASH BANK1 Write protected error flag */ + + +/*Functions used for all CH32V10x devices*/ +void FLASH_SetLatency(uint32_t FLASH_Latency); +void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess); +void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer); +void FLASH_Unlock(void); +void FLASH_Lock(void); +FLASH_Status FLASH_ErasePage(uint32_t Page_Address); +FLASH_Status FLASH_EraseAllPages(void); +FLASH_Status FLASH_EraseOptionBytes(void); +FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data); +FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data); +FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data); +FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages); +FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState); +FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY); +uint32_t FLASH_GetUserOptionByte(void); +uint32_t FLASH_GetWriteProtectionOptionByte(void); +FlagStatus FLASH_GetReadOutProtectionStatus(void); +FlagStatus FLASH_GetPrefetchBufferStatus(void); +void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState); +FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG); +void FLASH_ClearFlag(uint32_t FLASH_FLAG); +FLASH_Status FLASH_GetStatus(void); +FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout); +void FLASH_Unlock_Fast(void); +void FLASH_Lock_Fast(void); +void FLASH_BufReset(void); +void FLASH_BufLoad(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3); +void FLASH_ErasePage_Fast(uint32_t Page_Address); +void FLASH_ProgramPage_Fast(uint32_t Page_Address); + +/* New function used for all CH32V10x devices */ +void FLASH_UnlockBank1(void); +void FLASH_LockBank1(void); +FLASH_Status FLASH_EraseAllBank1Pages(void); +FLASH_Status FLASH_GetBank1Status(void); +FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout); + +#ifdef __cplusplus +} +#endif + + +#endif /* __CH32V10x_FLASH_H */ + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_gpio.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_gpio.h new file mode 100644 index 0000000000..4523fa337a --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_gpio.h @@ -0,0 +1,165 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_gpio.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* GPIO firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_GPIO_H +#define __CH32V10x_GPIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* Output Maximum frequency selection */ +typedef enum +{ + GPIO_Speed_10MHz = 1, + GPIO_Speed_2MHz, + GPIO_Speed_50MHz +}GPIOSpeed_TypeDef; + +/* Configuration Mode enumeration */ +typedef enum +{ GPIO_Mode_AIN = 0x0, + GPIO_Mode_IN_FLOATING = 0x04, + GPIO_Mode_IPD = 0x28, + GPIO_Mode_IPU = 0x48, + GPIO_Mode_Out_OD = 0x14, + GPIO_Mode_Out_PP = 0x10, + GPIO_Mode_AF_OD = 0x1C, + GPIO_Mode_AF_PP = 0x18 +}GPIOMode_TypeDef; + +/* GPIO Init structure definition */ +typedef struct +{ + uint16_t GPIO_Pin; /* Specifies the GPIO pins to be configured. + This parameter can be any value of @ref GPIO_pins_define */ + + GPIOSpeed_TypeDef GPIO_Speed; /* Specifies the speed for the selected pins. + This parameter can be a value of @ref GPIOSpeed_TypeDef */ + + GPIOMode_TypeDef GPIO_Mode; /* Specifies the operating mode for the selected pins. + This parameter can be a value of @ref GPIOMode_TypeDef */ +}GPIO_InitTypeDef; + +/* Bit_SET and Bit_RESET enumeration */ +typedef enum +{ + Bit_RESET = 0, + Bit_SET +}BitAction; + +/* GPIO_pins_define */ +#define GPIO_Pin_0 ((uint16_t)0x0001) /* Pin 0 selected */ +#define GPIO_Pin_1 ((uint16_t)0x0002) /* Pin 1 selected */ +#define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */ +#define GPIO_Pin_3 ((uint16_t)0x0008) /* Pin 3 selected */ +#define GPIO_Pin_4 ((uint16_t)0x0010) /* Pin 4 selected */ +#define GPIO_Pin_5 ((uint16_t)0x0020) /* Pin 5 selected */ +#define GPIO_Pin_6 ((uint16_t)0x0040) /* Pin 6 selected */ +#define GPIO_Pin_7 ((uint16_t)0x0080) /* Pin 7 selected */ +#define GPIO_Pin_8 ((uint16_t)0x0100) /* Pin 8 selected */ +#define GPIO_Pin_9 ((uint16_t)0x0200) /* Pin 9 selected */ +#define GPIO_Pin_10 ((uint16_t)0x0400) /* Pin 10 selected */ +#define GPIO_Pin_11 ((uint16_t)0x0800) /* Pin 11 selected */ +#define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */ +#define GPIO_Pin_13 ((uint16_t)0x2000) /* Pin 13 selected */ +#define GPIO_Pin_14 ((uint16_t)0x4000) /* Pin 14 selected */ +#define GPIO_Pin_15 ((uint16_t)0x8000) /* Pin 15 selected */ +#define GPIO_Pin_All ((uint16_t)0xFFFF) /* All pins selected */ + +/* GPIO_Remap_define */ +#define GPIO_Remap_SPI1 ((uint32_t)0x00000001) /* SPI1 Alternate Function mapping */ +#define GPIO_Remap_I2C1 ((uint32_t)0x00000002) /* I2C1 Alternate Function mapping */ +#define GPIO_Remap_USART1 ((uint32_t)0x00000004) /* USART1 Alternate Function mapping */ +#define GPIO_Remap_USART2 ((uint32_t)0x00000008) /* USART2 Alternate Function mapping */ +#define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010) /* USART3 Partial Alternate Function mapping */ +#define GPIO_FullRemap_USART3 ((uint32_t)0x00140030) /* USART3 Full Alternate Function mapping */ +#define GPIO_PartialRemap_TIM1 ((uint32_t)0x00160040) /* TIM1 Partial Alternate Function mapping */ +#define GPIO_FullRemap_TIM1 ((uint32_t)0x001600C0) /* TIM1 Full Alternate Function mapping */ +#define GPIO_PartialRemap1_TIM2 ((uint32_t)0x00180100) /* TIM2 Partial1 Alternate Function mapping */ +#define GPIO_PartialRemap2_TIM2 ((uint32_t)0x00180200) /* TIM2 Partial2 Alternate Function mapping */ +#define GPIO_FullRemap_TIM2 ((uint32_t)0x00180300) /* TIM2 Full Alternate Function mapping */ +#define GPIO_PartialRemap_TIM3 ((uint32_t)0x001A0800) /* TIM3 Partial Alternate Function mapping */ +#define GPIO_FullRemap_TIM3 ((uint32_t)0x001A0C00) /* TIM3 Full Alternate Function mapping */ +#define GPIO_Remap_TIM4 ((uint32_t)0x00001000) /* TIM4 Alternate Function mapping */ +#define GPIO_Remap1_CAN1 ((uint32_t)0x001D4000) /* CAN1 Alternate Function mapping */ +#define GPIO_Remap2_CAN1 ((uint32_t)0x001D6000) /* CAN1 Alternate Function mapping */ +#define GPIO_Remap_PD01 ((uint32_t)0x00008000) /* PD01 Alternate Function mapping */ +#define GPIO_Remap_ADC1_ETRGINJ ((uint32_t)0x00200002) /* ADC1 External Trigger Injected Conversion remapping */ +#define GPIO_Remap_ADC1_ETRGREG ((uint32_t)0x00200004) /* ADC1 External Trigger Regular Conversion remapping */ +#define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /* Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ +#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /* JTAG-DP Disabled and SW-DP Enabled */ +#define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /* Full SWJ Disabled (JTAG-DP + SW-DP) */ +#define GPIO_Remap_TIM2ITR1_PTP_SOF ((uint32_t)0x00202000) /* Ethernet PTP output or USB OTG SOF (Start of Frame) connected + to TIM2 Internal Trigger 1 for calibration + (only for Connectivity line devices) */ +#define GPIO_Remap_TIM1_DMA ((uint32_t)0x80000010) /* TIM1 DMA requests mapping (only for Value line devices) */ +#define GPIO_Remap_TIM67_DAC_DMA ((uint32_t)0x80000800) /* TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) */ +#define GPIO_Remap_MISC ((uint32_t)0x80002000) /* Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, + only for High density Value line devices) */ + +/* GPIO_Port_Sources */ +#define GPIO_PortSourceGPIOA ((uint8_t)0x00) +#define GPIO_PortSourceGPIOB ((uint8_t)0x01) +#define GPIO_PortSourceGPIOC ((uint8_t)0x02) +#define GPIO_PortSourceGPIOD ((uint8_t)0x03) +#define GPIO_PortSourceGPIOE ((uint8_t)0x04) +#define GPIO_PortSourceGPIOF ((uint8_t)0x05) +#define GPIO_PortSourceGPIOG ((uint8_t)0x06) + +/* GPIO_Pin_sources */ +#define GPIO_PinSource0 ((uint8_t)0x00) +#define GPIO_PinSource1 ((uint8_t)0x01) +#define GPIO_PinSource2 ((uint8_t)0x02) +#define GPIO_PinSource3 ((uint8_t)0x03) +#define GPIO_PinSource4 ((uint8_t)0x04) +#define GPIO_PinSource5 ((uint8_t)0x05) +#define GPIO_PinSource6 ((uint8_t)0x06) +#define GPIO_PinSource7 ((uint8_t)0x07) +#define GPIO_PinSource8 ((uint8_t)0x08) +#define GPIO_PinSource9 ((uint8_t)0x09) +#define GPIO_PinSource10 ((uint8_t)0x0A) +#define GPIO_PinSource11 ((uint8_t)0x0B) +#define GPIO_PinSource12 ((uint8_t)0x0C) +#define GPIO_PinSource13 ((uint8_t)0x0D) +#define GPIO_PinSource14 ((uint8_t)0x0E) +#define GPIO_PinSource15 ((uint8_t)0x0F) + + +void GPIO_DeInit(GPIO_TypeDef* GPIOx); +void GPIO_AFIODeInit(void); +void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); +void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); +uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); +uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); +void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); +void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); +void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); +void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); +void GPIO_EventOutputCmd(FunctionalState NewState); +void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); +void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_GPIO_H */ + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_i2c.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_i2c.h new file mode 100644 index 0000000000..84a36f415d --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_i2c.h @@ -0,0 +1,208 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_i2c.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* I2C firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_I2C_H +#define __CH32V10x_I2C_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* I2C Init structure definition */ +typedef struct +{ + uint32_t I2C_ClockSpeed; /* Specifies the clock frequency. + This parameter must be set to a value lower than 400kHz */ + + uint16_t I2C_Mode; /* Specifies the I2C mode. + This parameter can be a value of @ref I2C_mode */ + + uint16_t I2C_DutyCycle; /* Specifies the I2C fast mode duty cycle. + This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */ + + uint16_t I2C_OwnAddress1; /* Specifies the first device own address. + This parameter can be a 7-bit or 10-bit address. */ + + uint16_t I2C_Ack; /* Enables or disables the acknowledgement. + This parameter can be a value of @ref I2C_acknowledgement */ + + uint16_t I2C_AcknowledgedAddress; /* Specifies if 7-bit or 10-bit address is acknowledged. + This parameter can be a value of @ref I2C_acknowledged_address */ +}I2C_InitTypeDef; + +/* I2C_mode */ +#define I2C_Mode_I2C ((uint16_t)0x0000) +#define I2C_Mode_SMBusDevice ((uint16_t)0x0002) +#define I2C_Mode_SMBusHost ((uint16_t)0x000A) + +/* I2C_duty_cycle_in_fast_mode */ +#define I2C_DutyCycle_16_9 ((uint16_t)0x4000) /* I2C fast mode Tlow/Thigh = 16/9 */ +#define I2C_DutyCycle_2 ((uint16_t)0xBFFF) /* I2C fast mode Tlow/Thigh = 2 */ + +/* I2C_acknowledgement */ +#define I2C_Ack_Enable ((uint16_t)0x0400) +#define I2C_Ack_Disable ((uint16_t)0x0000) + +/* I2C_transfer_direction */ +#define I2C_Direction_Transmitter ((uint8_t)0x00) +#define I2C_Direction_Receiver ((uint8_t)0x01) + +/* I2C_acknowledged_address */ +#define I2C_AcknowledgedAddress_7bit ((uint16_t)0x4000) +#define I2C_AcknowledgedAddress_10bit ((uint16_t)0xC000) + +/* I2C_registers */ +#define I2C_Register_CTLR1 ((uint8_t)0x00) +#define I2C_Register_CTLR2 ((uint8_t)0x04) +#define I2C_Register_OADDR1 ((uint8_t)0x08) +#define I2C_Register_OADDR2 ((uint8_t)0x0C) +#define I2C_Register_DATAR ((uint8_t)0x10) +#define I2C_Register_STAR1 ((uint8_t)0x14) +#define I2C_Register_STAR2 ((uint8_t)0x18) +#define I2C_Register_CKCFGR ((uint8_t)0x1C) +#define I2C_Register_RTR ((uint8_t)0x20) + +/* I2C_SMBus_alert_pin_level */ +#define I2C_SMBusAlert_Low ((uint16_t)0x2000) +#define I2C_SMBusAlert_High ((uint16_t)0xDFFF) + +/* I2C_PEC_position */ +#define I2C_PECPosition_Next ((uint16_t)0x0800) +#define I2C_PECPosition_Current ((uint16_t)0xF7FF) + +/* I2C_NACK_position */ +#define I2C_NACKPosition_Next ((uint16_t)0x0800) +#define I2C_NACKPosition_Current ((uint16_t)0xF7FF) + +/* I2C_interrupts_definition */ +#define I2C_IT_BUF ((uint16_t)0x0400) +#define I2C_IT_EVT ((uint16_t)0x0200) +#define I2C_IT_ERR ((uint16_t)0x0100) + +/* I2C_interrupts_definition */ +#define I2C_IT_SMBALERT ((uint32_t)0x01008000) +#define I2C_IT_TIMEOUT ((uint32_t)0x01004000) +#define I2C_IT_PECERR ((uint32_t)0x01001000) +#define I2C_IT_OVR ((uint32_t)0x01000800) +#define I2C_IT_AF ((uint32_t)0x01000400) +#define I2C_IT_ARLO ((uint32_t)0x01000200) +#define I2C_IT_BERR ((uint32_t)0x01000100) +#define I2C_IT_TXE ((uint32_t)0x06000080) +#define I2C_IT_RXNE ((uint32_t)0x06000040) +#define I2C_IT_STOPF ((uint32_t)0x02000010) +#define I2C_IT_ADD10 ((uint32_t)0x02000008) +#define I2C_IT_BTF ((uint32_t)0x02000004) +#define I2C_IT_ADDR ((uint32_t)0x02000002) +#define I2C_IT_SB ((uint32_t)0x02000001) + +/* SR2 register flags */ +#define I2C_FLAG_DUALF ((uint32_t)0x00800000) +#define I2C_FLAG_SMBHOST ((uint32_t)0x00400000) +#define I2C_FLAG_SMBDEFAULT ((uint32_t)0x00200000) +#define I2C_FLAG_GENCALL ((uint32_t)0x00100000) +#define I2C_FLAG_TRA ((uint32_t)0x00040000) +#define I2C_FLAG_BUSY ((uint32_t)0x00020000) +#define I2C_FLAG_MSL ((uint32_t)0x00010000) + +/* SR1 register flags */ +#define I2C_FLAG_SMBALERT ((uint32_t)0x10008000) +#define I2C_FLAG_TIMEOUT ((uint32_t)0x10004000) +#define I2C_FLAG_PECERR ((uint32_t)0x10001000) +#define I2C_FLAG_OVR ((uint32_t)0x10000800) +#define I2C_FLAG_AF ((uint32_t)0x10000400) +#define I2C_FLAG_ARLO ((uint32_t)0x10000200) +#define I2C_FLAG_BERR ((uint32_t)0x10000100) +#define I2C_FLAG_TXE ((uint32_t)0x10000080) +#define I2C_FLAG_RXNE ((uint32_t)0x10000040) +#define I2C_FLAG_STOPF ((uint32_t)0x10000010) +#define I2C_FLAG_ADD10 ((uint32_t)0x10000008) +#define I2C_FLAG_BTF ((uint32_t)0x10000004) +#define I2C_FLAG_ADDR ((uint32_t)0x10000002) +#define I2C_FLAG_SB ((uint32_t)0x10000001) + + +/****************I2C Master Events (Events grouped in order of communication)********************/ + +#define I2C_EVENT_MASTER_MODE_SELECT ((uint32_t)0x00030001) /* BUSY, MSL and SB flag */ +#define I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((uint32_t)0x00070082) /* BUSY, MSL, ADDR, TXE and TRA flags */ +#define I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ((uint32_t)0x00030002) /* BUSY, MSL and ADDR flags */ +#define I2C_EVENT_MASTER_MODE_ADDRESS10 ((uint32_t)0x00030008) /* BUSY, MSL and ADD10 flags */ +#define I2C_EVENT_MASTER_BYTE_RECEIVED ((uint32_t)0x00030040) /* BUSY, MSL and RXNE flags */ +#define I2C_EVENT_MASTER_BYTE_TRANSMITTING ((uint32_t)0x00070080) /* TRA, BUSY, MSL, TXE flags */ +#define I2C_EVENT_MASTER_BYTE_TRANSMITTED ((uint32_t)0x00070084) /* TRA, BUSY, MSL, TXE and BTF flags */ + + +/******************I2C Slave Events (Events grouped in order of communication)******************/ + +#define I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED ((uint32_t)0x00020002) /* BUSY and ADDR flags */ +#define I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED ((uint32_t)0x00060082) /* TRA, BUSY, TXE and ADDR flags */ +#define I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED ((uint32_t)0x00820000) /* DUALF and BUSY flags */ +#define I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((uint32_t)0x00860080) /* DUALF, TRA, BUSY and TXE flags */ +#define I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED ((uint32_t)0x00120000) /* GENCALL and BUSY flags */ +#define I2C_EVENT_SLAVE_BYTE_RECEIVED ((uint32_t)0x00020040) /* BUSY and RXNE flags */ +#define I2C_EVENT_SLAVE_STOP_DETECTED ((uint32_t)0x00000010) /* STOPF flag */ +#define I2C_EVENT_SLAVE_BYTE_TRANSMITTED ((uint32_t)0x00060084) /* TRA, BUSY, TXE and BTF flags */ +#define I2C_EVENT_SLAVE_BYTE_TRANSMITTING ((uint32_t)0x00060080) /* TRA, BUSY and TXE flags */ +#define I2C_EVENT_SLAVE_ACK_FAILURE ((uint32_t)0x00000400) /* AF flag */ + + +void I2C_DeInit(I2C_TypeDef* I2Cx); +void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct); +void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct); +void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address); +void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState); +void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data); +uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx); +void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction); +uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register); +void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition); +void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert); +void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition); +void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState); +uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx); +void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState); +void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle); + +/**************************************************************************************** +* I2C State Monitoring Functions +****************************************************************************************/ + +ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT); +uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx); +FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); + +void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG); +ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT); +void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__CH32V10x_I2C_H */ + + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_iwdg.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_iwdg.h new file mode 100644 index 0000000000..e99c0ac827 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_iwdg.h @@ -0,0 +1,54 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_iwdg.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* IWDG firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_IWDG_H +#define __CH32V10x_IWDG_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* IWDG_WriteAccess */ +#define IWDG_WriteAccess_Enable ((uint16_t)0x5555) +#define IWDG_WriteAccess_Disable ((uint16_t)0x0000) + +/* IWDG_prescaler */ +#define IWDG_Prescaler_4 ((uint8_t)0x00) +#define IWDG_Prescaler_8 ((uint8_t)0x01) +#define IWDG_Prescaler_16 ((uint8_t)0x02) +#define IWDG_Prescaler_32 ((uint8_t)0x03) +#define IWDG_Prescaler_64 ((uint8_t)0x04) +#define IWDG_Prescaler_128 ((uint8_t)0x05) +#define IWDG_Prescaler_256 ((uint8_t)0x06) + +/* IWDG_Flag */ +#define IWDG_FLAG_PVU ((uint16_t)0x0001) +#define IWDG_FLAG_RVU ((uint16_t)0x0002) + + +void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess); +void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); +void IWDG_SetReload(uint16_t Reload); +void IWDG_ReloadCounter(void); +void IWDG_Enable(void); +FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_IWDG_H */ + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_misc.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_misc.h new file mode 100644 index 0000000000..723472f6dd --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_misc.h @@ -0,0 +1,44 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_misc.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* miscellaneous firmware library functions. +*******************************************************************************/ +#ifndef __CH32V10X_MISC_H +#define __CH32V10X_MISC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* NVIC Init Structure definition */ +typedef struct +{ + uint8_t NVIC_IRQChannel; + uint8_t NVIC_IRQChannelPreemptionPriority; + uint8_t NVIC_IRQChannelSubPriority; + FunctionalState NVIC_IRQChannelCmd; +} NVIC_InitTypeDef; + + +/* Preemption_Priority_Group */ +#define NVIC_PriorityGroup_0 ((uint32_t)0x00) +#define NVIC_PriorityGroup_1 ((uint32_t)0x01) +#define NVIC_PriorityGroup_2 ((uint32_t)0x02) +#define NVIC_PriorityGroup_3 ((uint32_t)0x03) +#define NVIC_PriorityGroup_4 ((uint32_t)0x04) + + +void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); +void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_MISC_H */ + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_pwr.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_pwr.h new file mode 100644 index 0000000000..b37bdf07a0 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_pwr.h @@ -0,0 +1,57 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_pwr.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the PWR +* firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_PWR_H +#define __CH32V10x_PWR_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* PVD_detection_level */ +#define PWR_PVDLevel_2V2 ((uint32_t)0x00000000) +#define PWR_PVDLevel_2V3 ((uint32_t)0x00000020) +#define PWR_PVDLevel_2V4 ((uint32_t)0x00000040) +#define PWR_PVDLevel_2V5 ((uint32_t)0x00000060) +#define PWR_PVDLevel_2V6 ((uint32_t)0x00000080) +#define PWR_PVDLevel_2V7 ((uint32_t)0x000000A0) +#define PWR_PVDLevel_2V8 ((uint32_t)0x000000C0) +#define PWR_PVDLevel_2V9 ((uint32_t)0x000000E0) + +/* Regulator_state_is_STOP_mode */ +#define PWR_Regulator_ON ((uint32_t)0x00000000) +#define PWR_Regulator_LowPower ((uint32_t)0x00000001) + +/* STOP_mode_entry */ +#define PWR_STOPEntry_WFI ((uint8_t)0x01) +#define PWR_STOPEntry_WFE ((uint8_t)0x02) + +/* PWR_Flag */ +#define PWR_FLAG_WU ((uint32_t)0x00000001) +#define PWR_FLAG_SB ((uint32_t)0x00000002) +#define PWR_FLAG_PVDO ((uint32_t)0x00000004) + + +void PWR_DeInit(void); +void PWR_BackupAccessCmd(FunctionalState NewState); +void PWR_PVDCmd(FunctionalState NewState); +void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); +void PWR_WakeUpPinCmd(FunctionalState NewState); +void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); +void PWR_EnterSTANDBYMode(void); +FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); +void PWR_ClearFlag(uint32_t PWR_FLAG); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_PWR_H */ + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_rcc.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_rcc.h new file mode 100644 index 0000000000..93512de341 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_rcc.h @@ -0,0 +1,232 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_rcc.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the RCC firmware functions. +*******************************************************************************/ +#ifndef __CH32V10x_RCC_H +#define __CH32V10x_RCC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* RCC_Exported_Types */ +typedef struct +{ + uint32_t SYSCLK_Frequency; /* returns SYSCLK clock frequency expressed in Hz */ + uint32_t HCLK_Frequency; /* returns HCLK clock frequency expressed in Hz */ + uint32_t PCLK1_Frequency; /* returns PCLK1 clock frequency expressed in Hz */ + uint32_t PCLK2_Frequency; /* returns PCLK2 clock frequency expressed in Hz */ + uint32_t ADCCLK_Frequency; /* returns ADCCLK clock frequency expressed in Hz */ +}RCC_ClocksTypeDef; + +/* HSE_configuration */ +#define RCC_HSE_OFF ((uint32_t)0x00000000) +#define RCC_HSE_ON ((uint32_t)0x00010000) +#define RCC_HSE_Bypass ((uint32_t)0x00040000) + +/* PLL_entry_clock_source */ +#define RCC_PLLSource_HSI_Div2 ((uint32_t)0x00000000) +#define RCC_PLLSource_HSE_Div1 ((uint32_t)0x00010000) +#define RCC_PLLSource_HSE_Div2 ((uint32_t)0x00030000) + +/* PLL_multiplication_factor */ +#define RCC_PLLMul_2 ((uint32_t)0x00000000) +#define RCC_PLLMul_3 ((uint32_t)0x00040000) +#define RCC_PLLMul_4 ((uint32_t)0x00080000) +#define RCC_PLLMul_5 ((uint32_t)0x000C0000) +#define RCC_PLLMul_6 ((uint32_t)0x00100000) +#define RCC_PLLMul_7 ((uint32_t)0x00140000) +#define RCC_PLLMul_8 ((uint32_t)0x00180000) +#define RCC_PLLMul_9 ((uint32_t)0x001C0000) +#define RCC_PLLMul_10 ((uint32_t)0x00200000) +#define RCC_PLLMul_11 ((uint32_t)0x00240000) +#define RCC_PLLMul_12 ((uint32_t)0x00280000) +#define RCC_PLLMul_13 ((uint32_t)0x002C0000) +#define RCC_PLLMul_14 ((uint32_t)0x00300000) +#define RCC_PLLMul_15 ((uint32_t)0x00340000) +#define RCC_PLLMul_16 ((uint32_t)0x00380000) + +/* System_clock_source */ +#define RCC_SYSCLKSource_HSI ((uint32_t)0x00000000) +#define RCC_SYSCLKSource_HSE ((uint32_t)0x00000001) +#define RCC_SYSCLKSource_PLLCLK ((uint32_t)0x00000002) + +/* AHB_clock_source */ +#define RCC_SYSCLK_Div1 ((uint32_t)0x00000000) +#define RCC_SYSCLK_Div2 ((uint32_t)0x00000080) +#define RCC_SYSCLK_Div4 ((uint32_t)0x00000090) +#define RCC_SYSCLK_Div8 ((uint32_t)0x000000A0) +#define RCC_SYSCLK_Div16 ((uint32_t)0x000000B0) +#define RCC_SYSCLK_Div64 ((uint32_t)0x000000C0) +#define RCC_SYSCLK_Div128 ((uint32_t)0x000000D0) +#define RCC_SYSCLK_Div256 ((uint32_t)0x000000E0) +#define RCC_SYSCLK_Div512 ((uint32_t)0x000000F0) + +/* APB1_APB2_clock_source */ +#define RCC_HCLK_Div1 ((uint32_t)0x00000000) +#define RCC_HCLK_Div2 ((uint32_t)0x00000400) +#define RCC_HCLK_Div4 ((uint32_t)0x00000500) +#define RCC_HCLK_Div8 ((uint32_t)0x00000600) +#define RCC_HCLK_Div16 ((uint32_t)0x00000700) + +/* RCC_Interrupt_source */ +#define RCC_IT_LSIRDY ((uint8_t)0x01) +#define RCC_IT_LSERDY ((uint8_t)0x02) +#define RCC_IT_HSIRDY ((uint8_t)0x04) +#define RCC_IT_HSERDY ((uint8_t)0x08) +#define RCC_IT_PLLRDY ((uint8_t)0x10) +#define RCC_IT_CSS ((uint8_t)0x80) + +/* USB_Device_clock_source */ +#define RCC_USBCLKSource_PLLCLK_1Div5 ((uint8_t)0x00) +#define RCC_USBCLKSource_PLLCLK_Div1 ((uint8_t)0x01) + +/* ADC_clock_source */ +#define RCC_PCLK2_Div2 ((uint32_t)0x00000000) +#define RCC_PCLK2_Div4 ((uint32_t)0x00004000) +#define RCC_PCLK2_Div6 ((uint32_t)0x00008000) +#define RCC_PCLK2_Div8 ((uint32_t)0x0000C000) + +/* LSE_configuration */ +#define RCC_LSE_OFF ((uint8_t)0x00) +#define RCC_LSE_ON ((uint8_t)0x01) +#define RCC_LSE_Bypass ((uint8_t)0x04) + +/* RTC_clock_source */ +#define RCC_RTCCLKSource_LSE ((uint32_t)0x00000100) +#define RCC_RTCCLKSource_LSI ((uint32_t)0x00000200) +#define RCC_RTCCLKSource_HSE_Div128 ((uint32_t)0x00000300) + +/* AHB_peripheral */ +#define RCC_AHBPeriph_DMA1 ((uint32_t)0x00000001) +#define RCC_AHBPeriph_DMA2 ((uint32_t)0x00000002) +#define RCC_AHBPeriph_SRAM ((uint32_t)0x00000004) +#define RCC_AHBPeriph_FLITF ((uint32_t)0x00000010) +#define RCC_AHBPeriph_CRC ((uint32_t)0x00000040) +#define RCC_AHBPeriph_FSMC ((uint32_t)0x00000100) +#define RCC_AHBPeriph_SDIO ((uint32_t)0x00000400) +#define RCC_AHBPeriph_USBHD ((uint32_t)0x00001000) + +/* APB2_peripheral */ +#define RCC_APB2Periph_AFIO ((uint32_t)0x00000001) +#define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004) +#define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008) +#define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010) +#define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020) +#define RCC_APB2Periph_GPIOE ((uint32_t)0x00000040) +#define RCC_APB2Periph_GPIOF ((uint32_t)0x00000080) +#define RCC_APB2Periph_GPIOG ((uint32_t)0x00000100) +#define RCC_APB2Periph_ADC1 ((uint32_t)0x00000200) +#define RCC_APB2Periph_ADC2 ((uint32_t)0x00000400) +#define RCC_APB2Periph_TIM1 ((uint32_t)0x00000800) +#define RCC_APB2Periph_SPI1 ((uint32_t)0x00001000) +#define RCC_APB2Periph_TIM8 ((uint32_t)0x00002000) +#define RCC_APB2Periph_USART1 ((uint32_t)0x00004000) +#define RCC_APB2Periph_ADC3 ((uint32_t)0x00008000) +#define RCC_APB2Periph_TIM15 ((uint32_t)0x00010000) +#define RCC_APB2Periph_TIM16 ((uint32_t)0x00020000) +#define RCC_APB2Periph_TIM17 ((uint32_t)0x00040000) +#define RCC_APB2Periph_TIM9 ((uint32_t)0x00080000) +#define RCC_APB2Periph_TIM10 ((uint32_t)0x00100000) +#define RCC_APB2Periph_TIM11 ((uint32_t)0x00200000) + +/* APB1_peripheral */ +#define RCC_APB1Periph_TIM2 ((uint32_t)0x00000001) +#define RCC_APB1Periph_TIM3 ((uint32_t)0x00000002) +#define RCC_APB1Periph_TIM4 ((uint32_t)0x00000004) +#define RCC_APB1Periph_TIM5 ((uint32_t)0x00000008) +#define RCC_APB1Periph_TIM6 ((uint32_t)0x00000010) +#define RCC_APB1Periph_TIM7 ((uint32_t)0x00000020) +#define RCC_APB1Periph_TIM12 ((uint32_t)0x00000040) +#define RCC_APB1Periph_TIM13 ((uint32_t)0x00000080) +#define RCC_APB1Periph_TIM14 ((uint32_t)0x00000100) +#define RCC_APB1Periph_WWDG ((uint32_t)0x00000800) +#define RCC_APB1Periph_SPI2 ((uint32_t)0x00004000) +#define RCC_APB1Periph_SPI3 ((uint32_t)0x00008000) +#define RCC_APB1Periph_USART2 ((uint32_t)0x00020000) +#define RCC_APB1Periph_USART3 ((uint32_t)0x00040000) +#define RCC_APB1Periph_UART4 ((uint32_t)0x00080000) +#define RCC_APB1Periph_UART5 ((uint32_t)0x00100000) +#define RCC_APB1Periph_I2C1 ((uint32_t)0x00200000) +#define RCC_APB1Periph_I2C2 ((uint32_t)0x00400000) +#define RCC_APB1Periph_USB ((uint32_t)0x00800000) +#define RCC_APB1Periph_CAN1 ((uint32_t)0x02000000) +#define RCC_APB1Periph_CAN2 ((uint32_t)0x04000000) +#define RCC_APB1Periph_BKP ((uint32_t)0x08000000) +#define RCC_APB1Periph_PWR ((uint32_t)0x10000000) +#define RCC_APB1Periph_DAC ((uint32_t)0x20000000) +#define RCC_APB1Periph_CEC ((uint32_t)0x40000000) + +/* Clock_source_to_output_on_MCO_pin */ +#define RCC_MCO_NoClock ((uint8_t)0x00) +#define RCC_MCO_SYSCLK ((uint8_t)0x04) +#define RCC_MCO_HSI ((uint8_t)0x05) +#define RCC_MCO_HSE ((uint8_t)0x06) +#define RCC_MCO_PLLCLK_Div2 ((uint8_t)0x07) + +/* RCC_Flag */ +#define RCC_FLAG_HSIRDY ((uint8_t)0x21) +#define RCC_FLAG_HSERDY ((uint8_t)0x31) +#define RCC_FLAG_PLLRDY ((uint8_t)0x39) +#define RCC_FLAG_LSERDY ((uint8_t)0x41) +#define RCC_FLAG_LSIRDY ((uint8_t)0x61) +#define RCC_FLAG_PINRST ((uint8_t)0x7A) +#define RCC_FLAG_PORRST ((uint8_t)0x7B) +#define RCC_FLAG_SFTRST ((uint8_t)0x7C) +#define RCC_FLAG_IWDGRST ((uint8_t)0x7D) +#define RCC_FLAG_WWDGRST ((uint8_t)0x7E) +#define RCC_FLAG_LPWRRST ((uint8_t)0x7F) + +/* SysTick_clock_source */ +#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB) +#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004) + + +void RCC_DeInit(void); +void RCC_HSEConfig(uint32_t RCC_HSE); +ErrorStatus RCC_WaitForHSEStartUp(void); +void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue); +void RCC_HSICmd(FunctionalState NewState); +void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul); +void RCC_PLLCmd(FunctionalState NewState); +void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource); +uint8_t RCC_GetSYSCLKSource(void); +void RCC_HCLKConfig(uint32_t RCC_SYSCLK); +void RCC_PCLK1Config(uint32_t RCC_HCLK); +void RCC_PCLK2Config(uint32_t RCC_HCLK); +void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState); +void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource); +void RCC_ADCCLKConfig(uint32_t RCC_PCLK2); +void RCC_LSEConfig(uint8_t RCC_LSE); +void RCC_LSICmd(FunctionalState NewState); +void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource); +void RCC_RTCCLKCmd(FunctionalState NewState); +void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks); +void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); +void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); +void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); +void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); +void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); +void RCC_BackupResetCmd(FunctionalState NewState); +void RCC_ClockSecuritySystemCmd(FunctionalState NewState); +void RCC_MCOConfig(uint8_t RCC_MCO); +FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG); +void RCC_ClearFlag(void); +ITStatus RCC_GetITStatus(uint8_t RCC_IT); +void RCC_ClearITPendingBit(uint8_t RCC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_RCC_H */ + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_rtc.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_rtc.h new file mode 100644 index 0000000000..d621340ad5 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_rtc.h @@ -0,0 +1,52 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_rtc.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the RTC +* firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_RTC_H +#define __CH32V10x_RTC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + + +/* RTC_interrupts_define */ +#define RTC_IT_OW ((uint16_t)0x0004) /* Overflow interrupt */ +#define RTC_IT_ALR ((uint16_t)0x0002) /* Alarm interrupt */ +#define RTC_IT_SEC ((uint16_t)0x0001) /* Second interrupt */ + +/* RTC_interrupts_flags */ +#define RTC_FLAG_RTOFF ((uint16_t)0x0020) /* RTC Operation OFF flag */ +#define RTC_FLAG_RSF ((uint16_t)0x0008) /* Registers Synchronized flag */ +#define RTC_FLAG_OW ((uint16_t)0x0004) /* Overflow flag */ +#define RTC_FLAG_ALR ((uint16_t)0x0002) /* Alarm flag */ +#define RTC_FLAG_SEC ((uint16_t)0x0001) /* Second flag */ + + +void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState); +void RTC_EnterConfigMode(void); +void RTC_ExitConfigMode(void); +uint32_t RTC_GetCounter(void); +void RTC_SetCounter(uint32_t CounterValue); +void RTC_SetPrescaler(uint32_t PrescalerValue); +void RTC_SetAlarm(uint32_t AlarmValue); +uint32_t RTC_GetDivider(void); +void RTC_WaitForLastTask(void); +void RTC_WaitForSynchro(void); +FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG); +void RTC_ClearFlag(uint16_t RTC_FLAG); +ITStatus RTC_GetITStatus(uint16_t RTC_IT); +void RTC_ClearITPendingBit(uint16_t RTC_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_RTC_H */ + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_spi.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_spi.h new file mode 100644 index 0000000000..86a8fe000e --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_spi.h @@ -0,0 +1,227 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_spi.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* SPI firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_SPI_H +#define __CH32V10x_SPI_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* SPI Init structure definition */ +typedef struct +{ + uint16_t SPI_Direction; /* Specifies the SPI unidirectional or bidirectional data mode. + This parameter can be a value of @ref SPI_data_direction */ + + uint16_t SPI_Mode; /* Specifies the SPI operating mode. + This parameter can be a value of @ref SPI_mode */ + + uint16_t SPI_DataSize; /* Specifies the SPI data size. + This parameter can be a value of @ref SPI_data_size */ + + uint16_t SPI_CPOL; /* Specifies the serial clock steady state. + This parameter can be a value of @ref SPI_Clock_Polarity */ + + uint16_t SPI_CPHA; /* Specifies the clock active edge for the bit capture. + This parameter can be a value of @ref SPI_Clock_Phase */ + + uint16_t SPI_NSS; /* Specifies whether the NSS signal is managed by + hardware (NSS pin) or by software using the SSI bit. + This parameter can be a value of @ref SPI_Slave_Select_management */ + + uint16_t SPI_BaudRatePrescaler; /* Specifies the Baud Rate prescaler value which will be + used to configure the transmit and receive SCK clock. + This parameter can be a value of @ref SPI_BaudRate_Prescaler. + @note The communication clock is derived from the master + clock. The slave clock does not need to be set. */ + + uint16_t SPI_FirstBit; /* Specifies whether data transfers start from MSB or LSB bit. + This parameter can be a value of @ref SPI_MSB_LSB_transmission */ + + uint16_t SPI_CRCPolynomial; /* Specifies the polynomial used for the CRC calculation. */ +}SPI_InitTypeDef; + +/* I2S Init structure definition */ +typedef struct +{ + + uint16_t I2S_Mode; /* Specifies the I2S operating mode. + This parameter can be a value of @ref I2S_Mode */ + + uint16_t I2S_Standard; /* Specifies the standard used for the I2S communication. + This parameter can be a value of @ref I2S_Standard */ + + uint16_t I2S_DataFormat; /* Specifies the data format for the I2S communication. + This parameter can be a value of @ref I2S_Data_Format */ + + uint16_t I2S_MCLKOutput; /* Specifies whether the I2S MCLK output is enabled or not. + This parameter can be a value of @ref I2S_MCLK_Output */ + + uint32_t I2S_AudioFreq; /* Specifies the frequency selected for the I2S communication. + This parameter can be a value of @ref I2S_Audio_Frequency */ + + uint16_t I2S_CPOL; /* Specifies the idle state of the I2S clock. + This parameter can be a value of @ref I2S_Clock_Polarity */ +}I2S_InitTypeDef; + +/* SPI_data_direction */ +#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000) +#define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400) +#define SPI_Direction_1Line_Rx ((uint16_t)0x8000) +#define SPI_Direction_1Line_Tx ((uint16_t)0xC000) + +/* SPI_mode */ +#define SPI_Mode_Master ((uint16_t)0x0104) +#define SPI_Mode_Slave ((uint16_t)0x0000) + +/* SPI_data_size */ +#define SPI_DataSize_16b ((uint16_t)0x0800) +#define SPI_DataSize_8b ((uint16_t)0x0000) + +/* SPI_Clock_Polarity */ +#define SPI_CPOL_Low ((uint16_t)0x0000) +#define SPI_CPOL_High ((uint16_t)0x0002) + +/* SPI_Clock_Phase */ +#define SPI_CPHA_1Edge ((uint16_t)0x0000) +#define SPI_CPHA_2Edge ((uint16_t)0x0001) + +/* SPI_Slave_Select_management */ +#define SPI_NSS_Soft ((uint16_t)0x0200) +#define SPI_NSS_Hard ((uint16_t)0x0000) + +/* SPI_BaudRate_Prescaler */ +#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000) +#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008) +#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010) +#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018) +#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020) +#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028) +#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030) +#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038) + +/* SPI_MSB_LSB_transmission */ +#define SPI_FirstBit_MSB ((uint16_t)0x0000) +#define SPI_FirstBit_LSB ((uint16_t)0x0080) + +/* I2S_Mode */ +#define I2S_Mode_SlaveTx ((uint16_t)0x0000) +#define I2S_Mode_SlaveRx ((uint16_t)0x0100) +#define I2S_Mode_MasterTx ((uint16_t)0x0200) +#define I2S_Mode_MasterRx ((uint16_t)0x0300) + +/* I2S_Standard */ +#define I2S_Standard_Phillips ((uint16_t)0x0000) +#define I2S_Standard_MSB ((uint16_t)0x0010) +#define I2S_Standard_LSB ((uint16_t)0x0020) +#define I2S_Standard_PCMShort ((uint16_t)0x0030) +#define I2S_Standard_PCMLong ((uint16_t)0x00B0) + +/* I2S_Data_Format */ +#define I2S_DataFormat_16b ((uint16_t)0x0000) +#define I2S_DataFormat_16bextended ((uint16_t)0x0001) +#define I2S_DataFormat_24b ((uint16_t)0x0003) +#define I2S_DataFormat_32b ((uint16_t)0x0005) + +/* I2S_MCLK_Output */ +#define I2S_MCLKOutput_Enable ((uint16_t)0x0200) +#define I2S_MCLKOutput_Disable ((uint16_t)0x0000) + +/* I2S_Audio_Frequency */ +#define I2S_AudioFreq_192k ((uint32_t)192000) +#define I2S_AudioFreq_96k ((uint32_t)96000) +#define I2S_AudioFreq_48k ((uint32_t)48000) +#define I2S_AudioFreq_44k ((uint32_t)44100) +#define I2S_AudioFreq_32k ((uint32_t)32000) +#define I2S_AudioFreq_22k ((uint32_t)22050) +#define I2S_AudioFreq_16k ((uint32_t)16000) +#define I2S_AudioFreq_11k ((uint32_t)11025) +#define I2S_AudioFreq_8k ((uint32_t)8000) +#define I2S_AudioFreq_Default ((uint32_t)2) + +/* I2S_Clock_Polarity */ +#define I2S_CPOL_Low ((uint16_t)0x0000) +#define I2S_CPOL_High ((uint16_t)0x0008) + +/* SPI_I2S_DMA_transfer_requests */ +#define SPI_I2S_DMAReq_Tx ((uint16_t)0x0002) +#define SPI_I2S_DMAReq_Rx ((uint16_t)0x0001) + +/* SPI_NSS_internal_software_management */ +#define SPI_NSSInternalSoft_Set ((uint16_t)0x0100) +#define SPI_NSSInternalSoft_Reset ((uint16_t)0xFEFF) + +/* SPI_CRC_Transmit_Receive */ +#define SPI_CRC_Tx ((uint8_t)0x00) +#define SPI_CRC_Rx ((uint8_t)0x01) + +/* SPI_direction_transmit_receive */ +#define SPI_Direction_Rx ((uint16_t)0xBFFF) +#define SPI_Direction_Tx ((uint16_t)0x4000) + +/* SPI_I2S_interrupts_definition */ +#define SPI_I2S_IT_TXE ((uint8_t)0x71) +#define SPI_I2S_IT_RXNE ((uint8_t)0x60) +#define SPI_I2S_IT_ERR ((uint8_t)0x50) +#define SPI_I2S_IT_OVR ((uint8_t)0x56) +#define SPI_IT_MODF ((uint8_t)0x55) +#define SPI_IT_CRCERR ((uint8_t)0x54) +#define I2S_IT_UDR ((uint8_t)0x53) + +/* SPI_I2S_flags_definition */ +#define SPI_I2S_FLAG_RXNE ((uint16_t)0x0001) +#define SPI_I2S_FLAG_TXE ((uint16_t)0x0002) +#define I2S_FLAG_CHSIDE ((uint16_t)0x0004) +#define I2S_FLAG_UDR ((uint16_t)0x0008) +#define SPI_FLAG_CRCERR ((uint16_t)0x0010) +#define SPI_FLAG_MODF ((uint16_t)0x0020) +#define SPI_I2S_FLAG_OVR ((uint16_t)0x0040) +#define SPI_I2S_FLAG_BSY ((uint16_t)0x0080) + + +void SPI_I2S_DeInit(SPI_TypeDef* SPIx); +void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct); +void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct); +void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct); +void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct); +void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState); +void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState); +void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data); +uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx); +void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft); +void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState); +void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize); +void SPI_TransmitCRC(SPI_TypeDef* SPIx); +void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState); +uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC); +uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx); +void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction); +FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); +void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG); +ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); +void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__CH32V10x_SPI_H */ + + + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_tim.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_tim.h new file mode 100644 index 0000000000..bbc9fd6f9b --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_tim.h @@ -0,0 +1,513 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_tim.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* TIM firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_TIM_H +#define __CH32V10x_TIM_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + +/* TIM Time Base Init structure definition */ +typedef struct +{ + uint16_t TIM_Prescaler; /* Specifies the prescaler value used to divide the TIM clock. + This parameter can be a number between 0x0000 and 0xFFFF */ + + uint16_t TIM_CounterMode; /* Specifies the counter mode. + This parameter can be a value of @ref TIM_Counter_Mode */ + + uint16_t TIM_Period; /* Specifies the period value to be loaded into the active + Auto-Reload Register at the next update event. + This parameter must be a number between 0x0000 and 0xFFFF. */ + + uint16_t TIM_ClockDivision; /* Specifies the clock division. + This parameter can be a value of @ref TIM_Clock_Division_CKD */ + + uint8_t TIM_RepetitionCounter; /* Specifies the repetition counter value. Each time the RCR downcounter + reaches zero, an update event is generated and counting restarts + from the RCR value (N). + This means in PWM mode that (N+1) corresponds to: + - the number of PWM periods in edge-aligned mode + - the number of half PWM period in center-aligned mode + This parameter must be a number between 0x00 and 0xFF. + @note This parameter is valid only for TIM1 and TIM8. */ +} TIM_TimeBaseInitTypeDef; + +/* TIM Output Compare Init structure definition */ +typedef struct +{ + uint16_t TIM_OCMode; /* Specifies the TIM mode. + This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */ + + uint16_t TIM_OutputState; /* Specifies the TIM Output Compare state. + This parameter can be a value of @ref TIM_Output_Compare_state */ + + uint16_t TIM_OutputNState; /* Specifies the TIM complementary Output Compare state. + This parameter can be a value of @ref TIM_Output_Compare_N_state + @note This parameter is valid only for TIM1 and TIM8. */ + + uint16_t TIM_Pulse; /* Specifies the pulse value to be loaded into the Capture Compare Register. + This parameter can be a number between 0x0000 and 0xFFFF */ + + uint16_t TIM_OCPolarity; /* Specifies the output polarity. + This parameter can be a value of @ref TIM_Output_Compare_Polarity */ + + uint16_t TIM_OCNPolarity; /* Specifies the complementary output polarity. + This parameter can be a value of @ref TIM_Output_Compare_N_Polarity + @note This parameter is valid only for TIM1 and TIM8. */ + + uint16_t TIM_OCIdleState; /* Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_Idle_State + @note This parameter is valid only for TIM1 and TIM8. */ + + uint16_t TIM_OCNIdleState; /* Specifies the TIM Output Compare pin state during Idle state. + This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State + @note This parameter is valid only for TIM1 and TIM8. */ +} TIM_OCInitTypeDef; + +/* TIM Input Capture Init structure definition */ +typedef struct +{ + uint16_t TIM_Channel; /* Specifies the TIM channel. + This parameter can be a value of @ref TIM_Channel */ + + uint16_t TIM_ICPolarity; /* Specifies the active edge of the input signal. + This parameter can be a value of @ref TIM_Input_Capture_Polarity */ + + uint16_t TIM_ICSelection; /* Specifies the input. + This parameter can be a value of @ref TIM_Input_Capture_Selection */ + + uint16_t TIM_ICPrescaler; /* Specifies the Input Capture Prescaler. + This parameter can be a value of @ref TIM_Input_Capture_Prescaler */ + + uint16_t TIM_ICFilter; /* Specifies the input capture filter. + This parameter can be a number between 0x0 and 0xF */ +} TIM_ICInitTypeDef; + +/* BDTR structure definition */ +typedef struct +{ + uint16_t TIM_OSSRState; /* Specifies the Off-State selection used in Run mode. + This parameter can be a value of @ref OSSR_Off_State_Selection_for_Run_mode_state */ + + uint16_t TIM_OSSIState; /* Specifies the Off-State used in Idle state. + This parameter can be a value of @ref OSSI_Off_State_Selection_for_Idle_mode_state */ + + uint16_t TIM_LOCKLevel; /* Specifies the LOCK level parameters. + This parameter can be a value of @ref Lock_level */ + + uint16_t TIM_DeadTime; /* Specifies the delay time between the switching-off and the + switching-on of the outputs. + This parameter can be a number between 0x00 and 0xFF */ + + uint16_t TIM_Break; /* Specifies whether the TIM Break input is enabled or not. + This parameter can be a value of @ref Break_Input_enable_disable */ + + uint16_t TIM_BreakPolarity; /* Specifies the TIM Break Input pin polarity. + This parameter can be a value of @ref Break_Polarity */ + + uint16_t TIM_AutomaticOutput; /* Specifies whether the TIM Automatic Output feature is enabled or not. + This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ +} TIM_BDTRInitTypeDef; + +/* TIM_Output_Compare_and_PWM_modes */ +#define TIM_OCMode_Timing ((uint16_t)0x0000) +#define TIM_OCMode_Active ((uint16_t)0x0010) +#define TIM_OCMode_Inactive ((uint16_t)0x0020) +#define TIM_OCMode_Toggle ((uint16_t)0x0030) +#define TIM_OCMode_PWM1 ((uint16_t)0x0060) +#define TIM_OCMode_PWM2 ((uint16_t)0x0070) + +/* TIM_One_Pulse_Mode */ +#define TIM_OPMode_Single ((uint16_t)0x0008) +#define TIM_OPMode_Repetitive ((uint16_t)0x0000) + +/* TIM_Channel */ +#define TIM_Channel_1 ((uint16_t)0x0000) +#define TIM_Channel_2 ((uint16_t)0x0004) +#define TIM_Channel_3 ((uint16_t)0x0008) +#define TIM_Channel_4 ((uint16_t)0x000C) + +/* TIM_Clock_Division_CKD */ +#define TIM_CKD_DIV1 ((uint16_t)0x0000) +#define TIM_CKD_DIV2 ((uint16_t)0x0100) +#define TIM_CKD_DIV4 ((uint16_t)0x0200) + +/* TIM_Counter_Mode */ +#define TIM_CounterMode_Up ((uint16_t)0x0000) +#define TIM_CounterMode_Down ((uint16_t)0x0010) +#define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020) +#define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040) +#define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060) + +/* TIM_Output_Compare_Polarity */ +#define TIM_OCPolarity_High ((uint16_t)0x0000) +#define TIM_OCPolarity_Low ((uint16_t)0x0002) + +/* TIM_Output_Compare_N_Polarity */ +#define TIM_OCNPolarity_High ((uint16_t)0x0000) +#define TIM_OCNPolarity_Low ((uint16_t)0x0008) + +/* TIM_Output_Compare_state */ +#define TIM_OutputState_Disable ((uint16_t)0x0000) +#define TIM_OutputState_Enable ((uint16_t)0x0001) + +/* TIM_Output_Compare_N_state */ +#define TIM_OutputNState_Disable ((uint16_t)0x0000) +#define TIM_OutputNState_Enable ((uint16_t)0x0004) + +/* TIM_Capture_Compare_state */ +#define TIM_CCx_Enable ((uint16_t)0x0001) +#define TIM_CCx_Disable ((uint16_t)0x0000) + +/* TIM_Capture_Compare_N_state */ +#define TIM_CCxN_Enable ((uint16_t)0x0004) +#define TIM_CCxN_Disable ((uint16_t)0x0000) + +/* Break_Input_enable_disable */ +#define TIM_Break_Enable ((uint16_t)0x1000) +#define TIM_Break_Disable ((uint16_t)0x0000) + +/* Break_Polarity */ +#define TIM_BreakPolarity_Low ((uint16_t)0x0000) +#define TIM_BreakPolarity_High ((uint16_t)0x2000) + +/* TIM_AOE_Bit_Set_Reset */ +#define TIM_AutomaticOutput_Enable ((uint16_t)0x4000) +#define TIM_AutomaticOutput_Disable ((uint16_t)0x0000) + +/* Lock_level */ +#define TIM_LOCKLevel_OFF ((uint16_t)0x0000) +#define TIM_LOCKLevel_1 ((uint16_t)0x0100) +#define TIM_LOCKLevel_2 ((uint16_t)0x0200) +#define TIM_LOCKLevel_3 ((uint16_t)0x0300) + +/* OSSI_Off_State_Selection_for_Idle_mode_state */ +#define TIM_OSSIState_Enable ((uint16_t)0x0400) +#define TIM_OSSIState_Disable ((uint16_t)0x0000) + +/* OSSR_Off_State_Selection_for_Run_mode_state */ +#define TIM_OSSRState_Enable ((uint16_t)0x0800) +#define TIM_OSSRState_Disable ((uint16_t)0x0000) + +/* TIM_Output_Compare_Idle_State */ +#define TIM_OCIdleState_Set ((uint16_t)0x0100) +#define TIM_OCIdleState_Reset ((uint16_t)0x0000) + +/* TIM_Output_Compare_N_Idle_State */ +#define TIM_OCNIdleState_Set ((uint16_t)0x0200) +#define TIM_OCNIdleState_Reset ((uint16_t)0x0000) + +/* TIM_Input_Capture_Polarity */ +#define TIM_ICPolarity_Rising ((uint16_t)0x0000) +#define TIM_ICPolarity_Falling ((uint16_t)0x0002) +#define TIM_ICPolarity_BothEdge ((uint16_t)0x000A) + +/* TIM_Input_Capture_Selection */ +#define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /* TIM Input 1, 2, 3 or 4 is selected to be + connected to IC1, IC2, IC3 or IC4, respectively */ +#define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /* TIM Input 1, 2, 3 or 4 is selected to be + connected to IC2, IC1, IC4 or IC3, respectively. */ +#define TIM_ICSelection_TRC ((uint16_t)0x0003) /* TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */ + +/* TIM_Input_Capture_Prescaler */ +#define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /* Capture performed each time an edge is detected on the capture input. */ +#define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /* Capture performed once every 2 events. */ +#define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /* Capture performed once every 4 events. */ +#define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /* Capture performed once every 8 events. */ + +/* TIM_interrupt_sources */ +#define TIM_IT_Update ((uint16_t)0x0001) +#define TIM_IT_CC1 ((uint16_t)0x0002) +#define TIM_IT_CC2 ((uint16_t)0x0004) +#define TIM_IT_CC3 ((uint16_t)0x0008) +#define TIM_IT_CC4 ((uint16_t)0x0010) +#define TIM_IT_COM ((uint16_t)0x0020) +#define TIM_IT_Trigger ((uint16_t)0x0040) +#define TIM_IT_Break ((uint16_t)0x0080) + +/* TIM_DMA_Base_address */ +#define TIM_DMABase_CR1 ((uint16_t)0x0000) +#define TIM_DMABase_CR2 ((uint16_t)0x0001) +#define TIM_DMABase_SMCR ((uint16_t)0x0002) +#define TIM_DMABase_DIER ((uint16_t)0x0003) +#define TIM_DMABase_SR ((uint16_t)0x0004) +#define TIM_DMABase_EGR ((uint16_t)0x0005) +#define TIM_DMABase_CCMR1 ((uint16_t)0x0006) +#define TIM_DMABase_CCMR2 ((uint16_t)0x0007) +#define TIM_DMABase_CCER ((uint16_t)0x0008) +#define TIM_DMABase_CNT ((uint16_t)0x0009) +#define TIM_DMABase_PSC ((uint16_t)0x000A) +#define TIM_DMABase_ARR ((uint16_t)0x000B) +#define TIM_DMABase_RCR ((uint16_t)0x000C) +#define TIM_DMABase_CCR1 ((uint16_t)0x000D) +#define TIM_DMABase_CCR2 ((uint16_t)0x000E) +#define TIM_DMABase_CCR3 ((uint16_t)0x000F) +#define TIM_DMABase_CCR4 ((uint16_t)0x0010) +#define TIM_DMABase_BDTR ((uint16_t)0x0011) +#define TIM_DMABase_DCR ((uint16_t)0x0012) + +/* TIM_DMA_Burst_Length */ +#define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000) +#define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100) +#define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200) +#define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300) +#define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400) +#define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500) +#define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600) +#define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700) +#define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800) +#define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900) +#define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00) +#define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00) +#define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00) +#define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00) +#define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00) +#define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00) +#define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000) +#define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100) + +/* TIM_DMA_sources */ +#define TIM_DMA_Update ((uint16_t)0x0100) +#define TIM_DMA_CC1 ((uint16_t)0x0200) +#define TIM_DMA_CC2 ((uint16_t)0x0400) +#define TIM_DMA_CC3 ((uint16_t)0x0800) +#define TIM_DMA_CC4 ((uint16_t)0x1000) +#define TIM_DMA_COM ((uint16_t)0x2000) +#define TIM_DMA_Trigger ((uint16_t)0x4000) + +/* TIM_External_Trigger_Prescaler */ +#define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000) +#define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000) +#define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000) +#define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000) + +/* TIM_Internal_Trigger_Selection */ +#define TIM_TS_ITR0 ((uint16_t)0x0000) +#define TIM_TS_ITR1 ((uint16_t)0x0010) +#define TIM_TS_ITR2 ((uint16_t)0x0020) +#define TIM_TS_ITR3 ((uint16_t)0x0030) +#define TIM_TS_TI1F_ED ((uint16_t)0x0040) +#define TIM_TS_TI1FP1 ((uint16_t)0x0050) +#define TIM_TS_TI2FP2 ((uint16_t)0x0060) +#define TIM_TS_ETRF ((uint16_t)0x0070) + +/* TIM_TIx_External_Clock_Source */ +#define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050) +#define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060) +#define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040) + +/* TIM_External_Trigger_Polarity */ +#define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000) +#define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000) + +/* TIM_Prescaler_Reload_Mode */ +#define TIM_PSCReloadMode_Update ((uint16_t)0x0000) +#define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001) + +/* TIM_Forced_Action */ +#define TIM_ForcedAction_Active ((uint16_t)0x0050) +#define TIM_ForcedAction_InActive ((uint16_t)0x0040) + +/* TIM_Encoder_Mode */ +#define TIM_EncoderMode_TI1 ((uint16_t)0x0001) +#define TIM_EncoderMode_TI2 ((uint16_t)0x0002) +#define TIM_EncoderMode_TI12 ((uint16_t)0x0003) + +/* TIM_Event_Source */ +#define TIM_EventSource_Update ((uint16_t)0x0001) +#define TIM_EventSource_CC1 ((uint16_t)0x0002) +#define TIM_EventSource_CC2 ((uint16_t)0x0004) +#define TIM_EventSource_CC3 ((uint16_t)0x0008) +#define TIM_EventSource_CC4 ((uint16_t)0x0010) +#define TIM_EventSource_COM ((uint16_t)0x0020) +#define TIM_EventSource_Trigger ((uint16_t)0x0040) +#define TIM_EventSource_Break ((uint16_t)0x0080) + +/* TIM_Update_Source */ +#define TIM_UpdateSource_Global ((uint16_t)0x0000) /* Source of update is the counter overflow/underflow + or the setting of UG bit, or an update generation + through the slave mode controller. */ +#define TIM_UpdateSource_Regular ((uint16_t)0x0001) /* Source of update is counter overflow/underflow. */ + +/* TIM_Output_Compare_Preload_State */ +#define TIM_OCPreload_Enable ((uint16_t)0x0008) +#define TIM_OCPreload_Disable ((uint16_t)0x0000) + +/* TIM_Output_Compare_Fast_State */ +#define TIM_OCFast_Enable ((uint16_t)0x0004) +#define TIM_OCFast_Disable ((uint16_t)0x0000) + +/* TIM_Output_Compare_Clear_State */ +#define TIM_OCClear_Enable ((uint16_t)0x0080) +#define TIM_OCClear_Disable ((uint16_t)0x0000) + +/* TIM_Trigger_Output_Source */ +#define TIM_TRGOSource_Reset ((uint16_t)0x0000) +#define TIM_TRGOSource_Enable ((uint16_t)0x0010) +#define TIM_TRGOSource_Update ((uint16_t)0x0020) +#define TIM_TRGOSource_OC1 ((uint16_t)0x0030) +#define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040) +#define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050) +#define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060) +#define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070) + +/* TIM_Slave_Mode */ +#define TIM_SlaveMode_Reset ((uint16_t)0x0004) +#define TIM_SlaveMode_Gated ((uint16_t)0x0005) +#define TIM_SlaveMode_Trigger ((uint16_t)0x0006) +#define TIM_SlaveMode_External1 ((uint16_t)0x0007) + +/* TIM_Master_Slave_Mode */ +#define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080) +#define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000) + +/* TIM_Flags */ +#define TIM_FLAG_Update ((uint16_t)0x0001) +#define TIM_FLAG_CC1 ((uint16_t)0x0002) +#define TIM_FLAG_CC2 ((uint16_t)0x0004) +#define TIM_FLAG_CC3 ((uint16_t)0x0008) +#define TIM_FLAG_CC4 ((uint16_t)0x0010) +#define TIM_FLAG_COM ((uint16_t)0x0020) +#define TIM_FLAG_Trigger ((uint16_t)0x0040) +#define TIM_FLAG_Break ((uint16_t)0x0080) +#define TIM_FLAG_CC1OF ((uint16_t)0x0200) +#define TIM_FLAG_CC2OF ((uint16_t)0x0400) +#define TIM_FLAG_CC3OF ((uint16_t)0x0800) +#define TIM_FLAG_CC4OF ((uint16_t)0x1000) + +/* TIM_Legacy */ +#define TIM_DMABurstLength_1Byte TIM_DMABurstLength_1Transfer +#define TIM_DMABurstLength_2Bytes TIM_DMABurstLength_2Transfers +#define TIM_DMABurstLength_3Bytes TIM_DMABurstLength_3Transfers +#define TIM_DMABurstLength_4Bytes TIM_DMABurstLength_4Transfers +#define TIM_DMABurstLength_5Bytes TIM_DMABurstLength_5Transfers +#define TIM_DMABurstLength_6Bytes TIM_DMABurstLength_6Transfers +#define TIM_DMABurstLength_7Bytes TIM_DMABurstLength_7Transfers +#define TIM_DMABurstLength_8Bytes TIM_DMABurstLength_8Transfers +#define TIM_DMABurstLength_9Bytes TIM_DMABurstLength_9Transfers +#define TIM_DMABurstLength_10Bytes TIM_DMABurstLength_10Transfers +#define TIM_DMABurstLength_11Bytes TIM_DMABurstLength_11Transfers +#define TIM_DMABurstLength_12Bytes TIM_DMABurstLength_12Transfers +#define TIM_DMABurstLength_13Bytes TIM_DMABurstLength_13Transfers +#define TIM_DMABurstLength_14Bytes TIM_DMABurstLength_14Transfers +#define TIM_DMABurstLength_15Bytes TIM_DMABurstLength_15Transfers +#define TIM_DMABurstLength_16Bytes TIM_DMABurstLength_16Transfers +#define TIM_DMABurstLength_17Bytes TIM_DMABurstLength_17Transfers +#define TIM_DMABurstLength_18Bytes TIM_DMABurstLength_18Transfers + + +void TIM_DeInit(TIM_TypeDef* TIMx); +void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); +void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); +void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct); +void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct); +void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); +void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct); +void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct); +void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct); +void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState); +void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource); +void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength); +void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState); +void TIM_InternalClockConfig(TIM_TypeDef* TIMx); +void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); +void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, + uint16_t TIM_ICPolarity, uint16_t ICFilter); +void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter); +void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, + uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter); +void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter); +void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode); +void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode); +void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource); +void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, + uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity); +void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction); +void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload); +void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast); +void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear); +void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity); +void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity); +void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx); +void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN); +void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode); +void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource); +void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState); +void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode); +void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource); +void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode); +void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode); +void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter); +void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload); +void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1); +void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2); +void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3); +void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4); +void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC); +void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD); +uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx); +uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx); +uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx); +uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx); +uint16_t TIM_GetCounter(TIM_TypeDef* TIMx); +uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx); +FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); +void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG); +ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT); +void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT); + +#ifdef __cplusplus +} +#endif + +#endif /*__CH32V10x_TIM_H */ + + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usart.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usart.h new file mode 100644 index 0000000000..f5592823de --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usart.h @@ -0,0 +1,193 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_usart.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the +* USART firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_USART_H +#define __CH32V10x_USART_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + + +/* USART Init Structure definition */ +typedef struct +{ + uint32_t USART_BaudRate; /* This member configures the USART communication baud rate. + The baud rate is computed using the following formula: + - IntegerDivider = ((PCLKx) / (16 * (USART_InitStruct->USART_BaudRate))) + - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5 */ + + uint16_t USART_WordLength; /* Specifies the number of data bits transmitted or received in a frame. + This parameter can be a value of @ref USART_Word_Length */ + + uint16_t USART_StopBits; /* Specifies the number of stop bits transmitted. + This parameter can be a value of @ref USART_Stop_Bits */ + + uint16_t USART_Parity; /* Specifies the parity mode. + This parameter can be a value of @ref USART_Parity + @note When parity is enabled, the computed parity is inserted + at the MSB position of the transmitted data (9th bit when + the word length is set to 9 data bits; 8th bit when the + word length is set to 8 data bits). */ + + uint16_t USART_Mode; /* Specifies wether the Receive or Transmit mode is enabled or disabled. + This parameter can be a value of @ref USART_Mode */ + + uint16_t USART_HardwareFlowControl; /* Specifies wether the hardware flow control mode is enabled + or disabled. + This parameter can be a value of @ref USART_Hardware_Flow_Control */ +} USART_InitTypeDef; + +/* USART Clock Init Structure definition */ +typedef struct +{ + + uint16_t USART_Clock; /* Specifies whether the USART clock is enabled or disabled. + This parameter can be a value of @ref USART_Clock */ + + uint16_t USART_CPOL; /* Specifies the steady state value of the serial clock. + This parameter can be a value of @ref USART_Clock_Polarity */ + + uint16_t USART_CPHA; /* Specifies the clock transition on which the bit capture is made. + This parameter can be a value of @ref USART_Clock_Phase */ + + uint16_t USART_LastBit; /* Specifies whether the clock pulse corresponding to the last transmitted + data bit (MSB) has to be output on the SCLK pin in synchronous mode. + This parameter can be a value of @ref USART_Last_Bit */ +} USART_ClockInitTypeDef; + +/* USART_Word_Length */ +#define USART_WordLength_8b ((uint16_t)0x0000) +#define USART_WordLength_9b ((uint16_t)0x1000) + +/* USART_Stop_Bits */ +#define USART_StopBits_1 ((uint16_t)0x0000) +#define USART_StopBits_0_5 ((uint16_t)0x1000) +#define USART_StopBits_2 ((uint16_t)0x2000) +#define USART_StopBits_1_5 ((uint16_t)0x3000) + +/* USART_Parity */ +#define USART_Parity_No ((uint16_t)0x0000) +#define USART_Parity_Even ((uint16_t)0x0400) +#define USART_Parity_Odd ((uint16_t)0x0600) + +/* USART_Mode */ +#define USART_Mode_Rx ((uint16_t)0x0004) +#define USART_Mode_Tx ((uint16_t)0x0008) + +/* USART_Hardware_Flow_Control */ +#define USART_HardwareFlowControl_None ((uint16_t)0x0000) +#define USART_HardwareFlowControl_RTS ((uint16_t)0x0100) +#define USART_HardwareFlowControl_CTS ((uint16_t)0x0200) +#define USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300) + +/* USART_Clock */ +#define USART_Clock_Disable ((uint16_t)0x0000) +#define USART_Clock_Enable ((uint16_t)0x0800) + +/* USART_Clock_Polarity */ +#define USART_CPOL_Low ((uint16_t)0x0000) +#define USART_CPOL_High ((uint16_t)0x0400) + +/* USART_Clock_Phase */ +#define USART_CPHA_1Edge ((uint16_t)0x0000) +#define USART_CPHA_2Edge ((uint16_t)0x0200) + +/* USART_Last_Bit */ +#define USART_LastBit_Disable ((uint16_t)0x0000) +#define USART_LastBit_Enable ((uint16_t)0x0100) + +/* USART_Interrupt_definition */ +#define USART_IT_PE ((uint16_t)0x0028) +#define USART_IT_TXE ((uint16_t)0x0727) +#define USART_IT_TC ((uint16_t)0x0626) +#define USART_IT_RXNE ((uint16_t)0x0525) +#define USART_IT_ORE_RX ((uint16_t)0x0325) +#define USART_IT_IDLE ((uint16_t)0x0424) +#define USART_IT_LBD ((uint16_t)0x0846) +#define USART_IT_CTS ((uint16_t)0x096A) +#define USART_IT_ERR ((uint16_t)0x0060) +#define USART_IT_ORE_ER ((uint16_t)0x0360) +#define USART_IT_NE ((uint16_t)0x0260) +#define USART_IT_FE ((uint16_t)0x0160) + +#define USART_IT_ORE USART_IT_ORE_ER + +/* USART_DMA_Requests */ +#define USART_DMAReq_Tx ((uint16_t)0x0080) +#define USART_DMAReq_Rx ((uint16_t)0x0040) + +/* USART_WakeUp_methods */ +#define USART_WakeUp_IdleLine ((uint16_t)0x0000) +#define USART_WakeUp_AddressMark ((uint16_t)0x0800) + +/* USART_LIN_Break_Detection_Length */ +#define USART_LINBreakDetectLength_10b ((uint16_t)0x0000) +#define USART_LINBreakDetectLength_11b ((uint16_t)0x0020) + +/* USART_IrDA_Low_Power */ +#define USART_IrDAMode_LowPower ((uint16_t)0x0004) +#define USART_IrDAMode_Normal ((uint16_t)0x0000) + +/* USART_Flags */ +#define USART_FLAG_CTS ((uint16_t)0x0200) +#define USART_FLAG_LBD ((uint16_t)0x0100) +#define USART_FLAG_TXE ((uint16_t)0x0080) +#define USART_FLAG_TC ((uint16_t)0x0040) +#define USART_FLAG_RXNE ((uint16_t)0x0020) +#define USART_FLAG_IDLE ((uint16_t)0x0010) +#define USART_FLAG_ORE ((uint16_t)0x0008) +#define USART_FLAG_NE ((uint16_t)0x0004) +#define USART_FLAG_FE ((uint16_t)0x0002) +#define USART_FLAG_PE ((uint16_t)0x0001) + + +void USART_DeInit(USART_TypeDef* USARTx); +void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); +void USART_StructInit(USART_InitTypeDef* USART_InitStruct); +void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct); +void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct); +void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState); +void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState); +void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address); +void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp); +void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength); +void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); +uint16_t USART_ReceiveData(USART_TypeDef* USARTx); +void USART_SendBreak(USART_TypeDef* USARTx); +void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime); +void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler); +void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState); +void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode); +void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState); +FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); +void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG); +ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT); +void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_USART_H */ + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usb.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usb.h new file mode 100644 index 0000000000..3bd1101630 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usb.h @@ -0,0 +1,707 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_usb.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the USB +* firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_USB_H +#define __CH32V10x_USB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef NULL +#define NULL 0 +#endif + +#ifndef VOID +#define VOID void +#endif +#ifndef CONST +#define CONST const +#endif +#ifndef BOOL +typedef unsigned char BOOL; +#endif +#ifndef BOOLEAN +typedef unsigned char BOOLEAN; +#endif +#ifndef CHAR +typedef char CHAR; +#endif +#ifndef INT8 +typedef char INT8; +#endif +#ifndef INT16 +typedef short INT16; +#endif +#ifndef INT32 +typedef long INT32; +#endif +#ifndef UINT8 +typedef unsigned char UINT8; +#endif +#ifndef UINT16 +typedef unsigned short UINT16; +#endif +#ifndef UINT32 +typedef unsigned long UINT32; +#endif +#ifndef UINT8V +typedef unsigned char volatile UINT8V; +#endif +#ifndef UINT16V +typedef unsigned short volatile UINT16V; +#endif +#ifndef UINT32V +typedef unsigned long volatile UINT32V; +#endif + +#ifndef PVOID +typedef void *PVOID; +#endif +#ifndef PCHAR +typedef char *PCHAR; +#endif +#ifndef PCHAR +typedef const char *PCCHAR; +#endif +#ifndef PINT8 +typedef char *PINT8; +#endif +#ifndef PINT16 +typedef short *PINT16; +#endif +#ifndef PINT32 +typedef long *PINT32; +#endif +#ifndef PUINT8 +typedef unsigned char *PUINT8; +#endif +#ifndef PUINT16 +typedef unsigned short *PUINT16; +#endif +#ifndef PUINT32 +typedef unsigned long *PUINT32; +#endif +#ifndef PUINT8V +typedef volatile unsigned char *PUINT8V; +#endif +#ifndef PUINT16V +typedef volatile unsigned short *PUINT16V; +#endif +#ifndef PUINT32V +typedef volatile unsigned long *PUINT32V; +#endif + +/******************************************************************************/ +/* Peripheral memory map */ +/******************************************************************************/ +/* USB */ +#define R32_USB_CONTROL (*((PUINT32V)(0x40023400))) // USB control & interrupt enable & device address +#define R8_USB_CTRL (*((PUINT8V)(0x40023400))) // USB base control +#define RB_UC_HOST_MODE 0x80 // enable USB host mode: 0=device mode, 1=host mode +#define RB_UC_LOW_SPEED 0x40 // enable USB low speed: 0=12Mbps, 1=1.5Mbps +#define RB_UC_DEV_PU_EN 0x20 // USB device enable and internal pullup resistance enable +#define RB_UC_SYS_CTRL1 0x20 // USB system control high bit +#define RB_UC_SYS_CTRL0 0x10 // USB system control low bit +#define MASK_UC_SYS_CTRL 0x30 // bit mask of USB system control +// bUC_HOST_MODE & bUC_SYS_CTRL1 & bUC_SYS_CTRL0: USB system control +// 0 00: disable USB device and disable internal pullup resistance +// 0 01: enable USB device and disable internal pullup resistance, need external pullup resistance +// 0 1x: enable USB device and enable internal pullup resistance +// 1 00: enable USB host and normal status +// 1 01: enable USB host and force UDP/UDM output SE0 state +// 1 10: enable USB host and force UDP/UDM output J state +// 1 11: enable USB host and force UDP/UDM output resume or K state +#define RB_UC_INT_BUSY 0x08 // enable automatic responding busy for device mode or automatic pause for host mode during interrupt flag UIF_TRANSFER valid +#define RB_UC_RESET_SIE 0x04 // force reset USB SIE, need software clear +#define RB_UC_CLR_ALL 0x02 // force clear FIFO and count of USB +#define RB_UC_DMA_EN 0x01 // DMA enable and DMA interrupt enable for USB + +#define R8_UDEV_CTRL (*((PUINT8V)(0x40023401))) // USB device physical prot control +#define RB_UD_PD_DIS 0x80 // disable USB UDP/UDM pulldown resistance: 0=enable pulldown, 1=disable +#define RB_UD_DP_PIN 0x20 // ReadOnly: indicate current UDP pin level +#define RB_UD_DM_PIN 0x10 // ReadOnly: indicate current UDM pin level +#define RB_UD_LOW_SPEED 0x04 // enable USB physical port low speed: 0=full speed, 1=low speed +#define RB_UD_GP_BIT 0x02 // general purpose bit +#define RB_UD_PORT_EN 0x01 // enable USB physical port I/O: 0=disable, 1=enable + +#define R8_UHOST_CTRL R8_UDEV_CTRL // USB host physical prot control +#define RB_UH_PD_DIS 0x80 // disable USB UDP/UDM pulldown resistance: 0=enable pulldown, 1=disable +#define RB_UH_DP_PIN 0x20 // ReadOnly: indicate current UDP pin level +#define RB_UH_DM_PIN 0x10 // ReadOnly: indicate current UDM pin level +#define RB_UH_LOW_SPEED 0x04 // enable USB port low speed: 0=full speed, 1=low speed +#define RB_UH_BUS_RESET 0x02 // control USB bus reset: 0=normal, 1=force bus reset +#define RB_UH_PORT_EN 0x01 // enable USB port: 0=disable, 1=enable port, automatic disabled if USB device detached + +#define R8_USB_INT_EN (*((PUINT8V)(0x40023402))) // USB interrupt enable +#define RB_UIE_DEV_SOF 0x80 // enable interrupt for SOF received for USB device mode +#define RB_UIE_DEV_NAK 0x40 // enable interrupt for NAK responded for USB device mode +#define RB_UIE_FIFO_OV 0x10 // enable interrupt for FIFO overflow +#define RB_UIE_HST_SOF 0x08 // enable interrupt for host SOF timer action for USB host mode +#define RB_UIE_SUSPEND 0x04 // enable interrupt for USB suspend or resume event +#define RB_UIE_TRANSFER 0x02 // enable interrupt for USB transfer completion +#define RB_UIE_DETECT 0x01 // enable interrupt for USB device detected event for USB host mode +#define RB_UIE_BUS_RST 0x01 // enable interrupt for USB bus reset event for USB device mode + +#define R8_USB_DEV_AD (*((PUINT8V)(0x40023403))) // USB device address +#define RB_UDA_GP_BIT 0x80 // general purpose bit +#define MASK_USB_ADDR 0x7F // bit mask for USB device address + +#define R32_USB_STATUS (*((PUINT32V)(0x40023404))) // USB miscellaneous status & interrupt flag & interrupt status +#define R8_USB_MIS_ST (*((PUINT8V)(0x40023405))) // USB miscellaneous status +#define RB_UMS_SOF_PRES 0x80 // RO, indicate host SOF timer presage status +#define RB_UMS_SOF_ACT 0x40 // RO, indicate host SOF timer action status for USB host +#define RB_UMS_SIE_FREE 0x20 // RO, indicate USB SIE free status +#define RB_UMS_R_FIFO_RDY 0x10 // RO, indicate USB receiving FIFO ready status (not empty) +#define RB_UMS_BUS_RESET 0x08 // RO, indicate USB bus reset status +#define RB_UMS_SUSPEND 0x04 // RO, indicate USB suspend status +#define RB_UMS_DM_LEVEL 0x02 // RO, indicate UDM level saved at device attached to USB host +#define RB_UMS_DEV_ATTACH 0x01 // RO, indicate device attached status on USB host + +#define R8_USB_INT_FG (*((PUINT8V)(0x40023406))) // USB interrupt flag +#define RB_U_IS_NAK 0x80 // RO, indicate current USB transfer is NAK received +#define RB_U_TOG_OK 0x40 // RO, indicate current USB transfer toggle is OK +#define RB_U_SIE_FREE 0x20 // RO, indicate USB SIE free status +#define RB_UIF_FIFO_OV 0x10 // FIFO overflow interrupt flag for USB, direct bit address clear or write 1 to clear +#define RB_UIF_HST_SOF 0x08 // host SOF timer interrupt flag for USB host, direct bit address clear or write 1 to clear +#define RB_UIF_SUSPEND 0x04 // USB suspend or resume event interrupt flag, direct bit address clear or write 1 to clear +#define RB_UIF_TRANSFER 0x02 // USB transfer completion interrupt flag, direct bit address clear or write 1 to clear +#define RB_UIF_DETECT 0x01 // device detected event interrupt flag for USB host mode, direct bit address clear or write 1 to clear +#define RB_UIF_BUS_RST 0x01 // bus reset event interrupt flag for USB device mode, direct bit address clear or write 1 to clear + +#define R8_USB_INT_ST (*((PUINT8V)(0x40023407))) // USB interrupt status +#define RB_UIS_IS_NAK 0x80 // RO, indicate current USB transfer is NAK received for USB device mode +#define RB_UIS_TOG_OK 0x40 // RO, indicate current USB transfer toggle is OK +#define RB_UIS_TOKEN1 0x20 // RO, current token PID code bit 1 received for USB device mode +#define RB_UIS_TOKEN0 0x10 // RO, current token PID code bit 0 received for USB device mode +#define MASK_UIS_TOKEN 0x30 // RO, bit mask of current token PID code received for USB device mode +#define UIS_TOKEN_OUT 0x00 +#define UIS_TOKEN_SOF 0x10 +#define UIS_TOKEN_IN 0x20 +#define UIS_TOKEN_SETUP 0x30 +// bUIS_TOKEN1 & bUIS_TOKEN0: current token PID code received for USB device mode +// 00: OUT token PID received +// 01: SOF token PID received +// 10: IN token PID received +// 11: SETUP token PID received +#define MASK_UIS_ENDP 0x0F // RO, bit mask of current transfer endpoint number for USB device mode +#define MASK_UIS_H_RES 0x0F // RO, bit mask of current transfer handshake response for USB host mode: 0000=no response, time out from device, others=handshake response PID received + +#define R8_USB_RX_LEN (*((PUINT8V)(0x40023408))) // USB receiving length +#define R32_USB_BUF_MODE (*((PUINT32V)(0x4002340c))) // USB endpoint buffer mode +#define R8_UEP4_1_MOD (*((PUINT8V)(0x4002340c))) // endpoint 4/1 mode +#define RB_UEP1_RX_EN 0x80 // enable USB endpoint 1 receiving (OUT) +#define RB_UEP1_TX_EN 0x40 // enable USB endpoint 1 transmittal (IN) +#define RB_UEP1_BUF_MOD 0x10 // buffer mode of USB endpoint 1 +// bUEPn_RX_EN & bUEPn_TX_EN & bUEPn_BUF_MOD: USB endpoint 1/2/3 buffer mode, buffer start address is UEPn_DMA +// 0 0 x: disable endpoint and disable buffer +// 1 0 0: 64 bytes buffer for receiving (OUT endpoint) +// 1 0 1: dual 64 bytes buffer by toggle bit bUEP_R_TOG selection for receiving (OUT endpoint), total=128bytes +// 0 1 0: 64 bytes buffer for transmittal (IN endpoint) +// 0 1 1: dual 64 bytes buffer by toggle bit bUEP_T_TOG selection for transmittal (IN endpoint), total=128bytes +// 1 1 0: 64 bytes buffer for receiving (OUT endpoint) + 64 bytes buffer for transmittal (IN endpoint), total=128bytes +// 1 1 1: dual 64 bytes buffer by bUEP_R_TOG selection for receiving (OUT endpoint) + dual 64 bytes buffer by bUEP_T_TOG selection for transmittal (IN endpoint), total=256bytes +#define RB_UEP4_RX_EN 0x08 // enable USB endpoint 4 receiving (OUT) +#define RB_UEP4_TX_EN 0x04 // enable USB endpoint 4 transmittal (IN) +// bUEP4_RX_EN & bUEP4_TX_EN: USB endpoint 4 buffer mode, buffer start address is UEP0_DMA +// 0 0: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) +// 1 0: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) + 64 bytes buffer for endpoint 4 receiving (OUT endpoint), total=128bytes +// 0 1: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) + 64 bytes buffer for endpoint 4 transmittal (IN endpoint), total=128bytes +// 1 1: single 64 bytes buffer for endpoint 0 receiving & transmittal (OUT & IN endpoint) +// + 64 bytes buffer for endpoint 4 receiving (OUT endpoint) + 64 bytes buffer for endpoint 4 transmittal (IN endpoint), total=192bytes + +#define R8_UEP2_3_MOD (*((PUINT8V)(0x4002340d))) // endpoint 2/3 mode +#define RB_UEP3_RX_EN 0x80 // enable USB endpoint 3 receiving (OUT) +#define RB_UEP3_TX_EN 0x40 // enable USB endpoint 3 transmittal (IN) +#define RB_UEP3_BUF_MOD 0x10 // buffer mode of USB endpoint 3 +#define RB_UEP2_RX_EN 0x08 // enable USB endpoint 2 receiving (OUT) +#define RB_UEP2_TX_EN 0x04 // enable USB endpoint 2 transmittal (IN) +#define RB_UEP2_BUF_MOD 0x01 // buffer mode of USB endpoint 2 + +#define R8_UH_EP_MOD R8_UEP2_3_MOD //host endpoint mode +#define RB_UH_EP_TX_EN 0x40 // enable USB host OUT endpoint transmittal +#define RB_UH_EP_TBUF_MOD 0x10 // buffer mode of USB host OUT endpoint +// bUH_EP_TX_EN & bUH_EP_TBUF_MOD: USB host OUT endpoint buffer mode, buffer start address is UH_TX_DMA +// 0 x: disable endpoint and disable buffer +// 1 0: 64 bytes buffer for transmittal (OUT endpoint) +// 1 1: dual 64 bytes buffer by toggle bit bUH_T_TOG selection for transmittal (OUT endpoint), total=128bytes +#define RB_UH_EP_RX_EN 0x08 // enable USB host IN endpoint receiving +#define RB_UH_EP_RBUF_MOD 0x01 // buffer mode of USB host IN endpoint +// bUH_EP_RX_EN & bUH_EP_RBUF_MOD: USB host IN endpoint buffer mode, buffer start address is UH_RX_DMA +// 0 x: disable endpoint and disable buffer +// 1 0: 64 bytes buffer for receiving (IN endpoint) +// 1 1: dual 64 bytes buffer by toggle bit bUH_R_TOG selection for receiving (IN endpoint), total=128bytes + +#define R8_UEP5_6_MOD (*((PUINT8V)(0x4002340e))) // endpoint 5/6 mode +#define RB_UEP6_RX_EN 0x80 // enable USB endpoint 6 receiving (OUT) +#define RB_UEP6_TX_EN 0x40 // enable USB endpoint 6 transmittal (IN) +#define RB_UEP6_BUF_MOD 0x10 // buffer mode of USB endpoint 6 +#define RB_UEP5_RX_EN 0x08 // enable USB endpoint 5 receiving (OUT) +#define RB_UEP5_TX_EN 0x04 // enable USB endpoint 5 transmittal (IN) +#define RB_UEP5_BUF_MOD 0x01 // buffer mode of USB endpoint 5 + +#define R8_UEP7_MOD (*((PUINT8V)(0x4002340f))) // endpoint 7 mode +#define RB_UEP7_RX_EN 0x08 // enable USB endpoint 7 receiving (OUT) +#define RB_UEP7_TX_EN 0x04 // enable USB endpoint 7 transmittal (IN) +#define RB_UEP7_BUF_MOD 0x01 // buffer mode of USB endpoint 7 + + +#define R16_UEP0_DMA (*((PUINT16V)(0x40023410))) // endpoint 0 DMA buffer address +#define R16_UEP1_DMA (*((PUINT16V)(0x40023414))) // endpoint 1 DMA buffer address +#define R16_UEP2_DMA (*((PUINT16V)(0x40023418))) // endpoint 2 DMA buffer address +#define R16_UH_RX_DMA R16_UEP2_DMA // host rx endpoint buffer high address +#define R16_UEP3_DMA (*((PUINT16V)(0x4002341c))) // endpoint 3 DMA buffer address + +#define R16_UEP4_DMA (*((PUINT16V)(0x40023420))) // endpoint 4 DMA buffer address +#define R16_UEP5_DMA (*((PUINT16V)(0x40023424))) // endpoint 5 DMA buffer address +#define R16_UEP6_DMA (*((PUINT16V)(0x40023428))) // endpoint 6 DMA buffer address +#define R16_UEP7_DMA (*((PUINT16V)(0x4002342c))) // endpoint 7 DMA buffer address + +#define R16_UH_TX_DMA R16_UEP3_DMA // host tx endpoint buffer high address +#define R32_USB_EP0_CTRL (*((PUINT32V)(0x40023430))) // endpoint 0 control & transmittal length +#define R8_UEP0_T_LEN (*((PUINT8V)(0x40023430))) // endpoint 0 transmittal length +#define R8_UEP0_CTRL (*((PUINT8V)(0x40023432))) // endpoint 0 control +#define R32_USB_EP1_CTRL (*((PUINT32V)(0x40023434))) // endpoint 1 control & transmittal length +#define R8_UEP1_T_LEN (*((PUINT8V)(0x40023434))) // endpoint 1 transmittal length +#define R8_UEP1_CTRL (*((PUINT8V)(0x40023436))) // endpoint 1 control +#define RB_UEP_R_TOG 0x80 // expected data toggle flag of USB endpoint X receiving (OUT): 0=DATA0, 1=DATA1 +#define RB_UEP_T_TOG 0x40 // prepared data toggle flag of USB endpoint X transmittal (IN): 0=DATA0, 1=DATA1 +#define RB_UEP_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion on endpoint 1/2/3: 0=manual toggle, 1=automatic toggle +#define RB_UEP_R_RES1 0x08 // handshake response type high bit for USB endpoint X receiving (OUT) +#define RB_UEP_R_RES0 0x04 // handshake response type low bit for USB endpoint X receiving (OUT) +#define MASK_UEP_R_RES 0x0C // bit mask of handshake response type for USB endpoint X receiving (OUT) +#define UEP_R_RES_ACK 0x00 +#define UEP_R_RES_TOUT 0x04 +#define UEP_R_RES_NAK 0x08 +#define UEP_R_RES_STALL 0x0C +// RB_UEP_R_RES1 & RB_UEP_R_RES0: handshake response type for USB endpoint X receiving (OUT) +// 00: ACK (ready) +// 01: no response, time out to host, for non-zero endpoint isochronous transactions +// 10: NAK (busy) +// 11: STALL (error) +#define RB_UEP_T_RES1 0x02 // handshake response type high bit for USB endpoint X transmittal (IN) +#define RB_UEP_T_RES0 0x01 // handshake response type low bit for USB endpoint X transmittal (IN) +#define MASK_UEP_T_RES 0x03 // bit mask of handshake response type for USB endpoint X transmittal (IN) +#define UEP_T_RES_ACK 0x00 +#define UEP_T_RES_TOUT 0x01 +#define UEP_T_RES_NAK 0x02 +#define UEP_T_RES_STALL 0x03 +// bUEP_T_RES1 & bUEP_T_RES0: handshake response type for USB endpoint X transmittal (IN) +// 00: DATA0 or DATA1 then expecting ACK (ready) +// 01: DATA0 or DATA1 then expecting no response, time out from host, for non-zero endpoint isochronous transactions +// 10: NAK (busy) +// 11: STALL (error) + +#define R8_UH_SETUP R8_UEP1_CTRL // host aux setup +#define RB_UH_PRE_PID_EN 0x80 // USB host PRE PID enable for low speed device via hub +#define RB_UH_SOF_EN 0x40 // USB host automatic SOF enable + +#define R32_USB_EP2_CTRL (*((PUINT32V)(0x40023438))) // endpoint 2 control & transmittal length +#define R8_UEP2_T_LEN (*((PUINT8V)(0x40023438))) // endpoint 2 transmittal length +#define R8_UEP2_CTRL (*((PUINT8V)(0x4002343a))) // endpoint 2 control + +#define R8_UH_EP_PID R8_UEP2_T_LEN // host endpoint and PID +#define MASK_UH_TOKEN 0xF0 // bit mask of token PID for USB host transfer +#define MASK_UH_ENDP 0x0F // bit mask of endpoint number for USB host transfer + +#define R8_UH_RX_CTRL R8_UEP2_CTRL // host receiver endpoint control +#define RB_UH_R_TOG 0x80 // expected data toggle flag of host receiving (IN): 0=DATA0, 1=DATA1 +#define RB_UH_R_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion: 0=manual toggle, 1=automatic toggle +#define RB_UH_R_RES 0x04 // prepared handshake response type for host receiving (IN): 0=ACK (ready), 1=no response, time out to device, for isochronous transactions + +#define R32_USB_EP3_CTRL (*((PUINT32V)(0x4002343c))) // endpoint 3 control & transmittal length +#define R8_UEP3_T_LEN (*((PUINT16V)(0x4002343c))) // endpoint 3 transmittal length +#define R8_UEP3_CTRL (*((PUINT8V)(0x4002343e))) // endpoint 3 control +#define R8_UH_TX_LEN (*((PUINT16V)(0x4002343c))) //R8_UEP3_T_LEN // host transmittal endpoint transmittal length + +#define R8_UH_TX_CTRL R8_UEP3_CTRL // host transmittal endpoint control +#define RB_UH_T_TOG 0x40 // prepared data toggle flag of host transmittal (SETUP/OUT): 0=DATA0, 1=DATA1 +#define RB_UH_T_AUTO_TOG 0x10 // enable automatic toggle after successful transfer completion: 0=manual toggle, 1=automatic toggle +#define RB_UH_T_RES 0x01 // expected handshake response type for host transmittal (SETUP/OUT): 0=ACK (ready), 1=no response, time out from device, for isochronous transactions + +#define R32_USB_EP4_CTRL (*((PUINT32V)(0x40023440))) // endpoint 4 control & transmittal length +#define R8_UEP4_T_LEN (*((PUINT8V)(0x40023440))) // endpoint 4 transmittal length +#define R8_UEP4_CTRL (*((PUINT8V)(0x40023442))) // endpoint 4 control + +#define R32_USB_EP5_CTRL (*((PUINT32V)(0x40023444))) // endpoint 5 control & transmittal length +#define R8_UEP5_T_LEN (*((PUINT8V)(0x40023444))) // endpoint 5 transmittal length +#define R8_UEP5_CTRL (*((PUINT8V)(0x40023446))) // endpoint 5 control + +#define R32_USB_EP6_CTRL (*((PUINT32V)(0x40023448))) // endpoint 6 control & transmittal length +#define R8_UEP6_T_LEN (*((PUINT8V)(0x40023448))) // endpoint 6 transmittal length +#define R8_UEP6_CTRL (*((PUINT8V)(0x4002344a))) // endpoint 6 control + +#define R32_USB_EP7_CTRL (*((PUINT32V)(0x4002344c))) // endpoint 7 control & transmittal length +#define R8_UEP7_T_LEN (*((PUINT8V)(0x4002344c))) // endpoint 7 transmittal length +#define R8_UEP7_CTRL (*((PUINT8V)(0x4002344e))) // endpoint 7 control + + +#ifdef __cplusplus +} +#endif + +#endif //__CH32V10x_USB_H + + +#ifndef __USB_TYPE__ +#define __USB_TYPE__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* USB constant and structure define */ + +/* USB PID */ +#ifndef USB_PID_SETUP +#define USB_PID_NULL 0x00 /* reserved PID */ +#define USB_PID_SOF 0x05 +#define USB_PID_SETUP 0x0D +#define USB_PID_IN 0x09 +#define USB_PID_OUT 0x01 +#define USB_PID_ACK 0x02 +#define USB_PID_NAK 0x0A +#define USB_PID_STALL 0x0E +#define USB_PID_DATA0 0x03 +#define USB_PID_DATA1 0x0B +#define USB_PID_PRE 0x0C +#endif + +/* USB standard device request code */ +#ifndef USB_GET_DESCRIPTOR +#define USB_GET_STATUS 0x00 +#define USB_CLEAR_FEATURE 0x01 +#define USB_SET_FEATURE 0x03 +#define USB_SET_ADDRESS 0x05 +#define USB_GET_DESCRIPTOR 0x06 +#define USB_SET_DESCRIPTOR 0x07 +#define USB_GET_CONFIGURATION 0x08 +#define USB_SET_CONFIGURATION 0x09 +#define USB_GET_INTERFACE 0x0A +#define USB_SET_INTERFACE 0x0B +#define USB_SYNCH_FRAME 0x0C +#endif + +/* USB hub class request code */ +#ifndef HUB_GET_DESCRIPTOR +#define HUB_GET_STATUS 0x00 +#define HUB_CLEAR_FEATURE 0x01 +#define HUB_GET_STATE 0x02 +#define HUB_SET_FEATURE 0x03 +#define HUB_GET_DESCRIPTOR 0x06 +#define HUB_SET_DESCRIPTOR 0x07 +#endif + +/* USB HID class request code */ +#ifndef HID_GET_REPORT +#define HID_GET_REPORT 0x01 +#define HID_GET_IDLE 0x02 +#define HID_GET_PROTOCOL 0x03 +#define HID_SET_REPORT 0x09 +#define HID_SET_IDLE 0x0A +#define HID_SET_PROTOCOL 0x0B +#endif + +/* Bit define for USB request type */ +#ifndef USB_REQ_TYP_MASK +#define USB_REQ_TYP_IN 0x80 /* control IN, device to host */ +#define USB_REQ_TYP_OUT 0x00 /* control OUT, host to device */ +#define USB_REQ_TYP_READ 0x80 /* control read, device to host */ +#define USB_REQ_TYP_WRITE 0x00 /* control write, host to device */ +#define USB_REQ_TYP_MASK 0x60 /* bit mask of request type */ +#define USB_REQ_TYP_STANDARD 0x00 +#define USB_REQ_TYP_CLASS 0x20 +#define USB_REQ_TYP_VENDOR 0x40 +#define USB_REQ_TYP_RESERVED 0x60 +#define USB_REQ_RECIP_MASK 0x1F /* bit mask of request recipient */ +#define USB_REQ_RECIP_DEVICE 0x00 +#define USB_REQ_RECIP_INTERF 0x01 +#define USB_REQ_RECIP_ENDP 0x02 +#define USB_REQ_RECIP_OTHER 0x03 +#endif + +/* USB request type for hub class request */ +#ifndef HUB_GET_HUB_DESCRIPTOR +#define HUB_CLEAR_HUB_FEATURE 0x20 +#define HUB_CLEAR_PORT_FEATURE 0x23 +#define HUB_GET_BUS_STATE 0xA3 +#define HUB_GET_HUB_DESCRIPTOR 0xA0 +#define HUB_GET_HUB_STATUS 0xA0 +#define HUB_GET_PORT_STATUS 0xA3 +#define HUB_SET_HUB_DESCRIPTOR 0x20 +#define HUB_SET_HUB_FEATURE 0x20 +#define HUB_SET_PORT_FEATURE 0x23 +#endif + +/* Hub class feature selectors */ +#ifndef HUB_PORT_RESET +#define HUB_C_HUB_LOCAL_POWER 0 +#define HUB_C_HUB_OVER_CURRENT 1 +#define HUB_PORT_CONNECTION 0 +#define HUB_PORT_ENABLE 1 +#define HUB_PORT_SUSPEND 2 +#define HUB_PORT_OVER_CURRENT 3 +#define HUB_PORT_RESET 4 +#define HUB_PORT_POWER 8 +#define HUB_PORT_LOW_SPEED 9 +#define HUB_C_PORT_CONNECTION 16 +#define HUB_C_PORT_ENABLE 17 +#define HUB_C_PORT_SUSPEND 18 +#define HUB_C_PORT_OVER_CURRENT 19 +#define HUB_C_PORT_RESET 20 +#endif + +/* USB descriptor type */ +#ifndef USB_DESCR_TYP_DEVICE +#define USB_DESCR_TYP_DEVICE 0x01 +#define USB_DESCR_TYP_CONFIG 0x02 +#define USB_DESCR_TYP_STRING 0x03 +#define USB_DESCR_TYP_INTERF 0x04 +#define USB_DESCR_TYP_ENDP 0x05 +#define USB_DESCR_TYP_QUALIF 0x06 +#define USB_DESCR_TYP_SPEED 0x07 +#define USB_DESCR_TYP_OTG 0x09 +#define USB_DESCR_TYP_HID 0x21 +#define USB_DESCR_TYP_REPORT 0x22 +#define USB_DESCR_TYP_PHYSIC 0x23 +#define USB_DESCR_TYP_CS_INTF 0x24 +#define USB_DESCR_TYP_CS_ENDP 0x25 +#define USB_DESCR_TYP_HUB 0x29 +#endif + +/* USB device class */ +#ifndef USB_DEV_CLASS_HUB +#define USB_DEV_CLASS_RESERVED 0x00 +#define USB_DEV_CLASS_AUDIO 0x01 +#define USB_DEV_CLASS_COMMUNIC 0x02 +#define USB_DEV_CLASS_HID 0x03 +#define USB_DEV_CLASS_MONITOR 0x04 +#define USB_DEV_CLASS_PHYSIC_IF 0x05 +#define USB_DEV_CLASS_POWER 0x06 +#define USB_DEV_CLASS_PRINTER 0x07 +#define USB_DEV_CLASS_STORAGE 0x08 +#define USB_DEV_CLASS_HUB 0x09 +#define USB_DEV_CLASS_VEN_SPEC 0xFF +#endif + +/* USB endpoint type and attributes */ +#ifndef USB_ENDP_TYPE_MASK +#define USB_ENDP_DIR_MASK 0x80 +#define USB_ENDP_ADDR_MASK 0x0F +#define USB_ENDP_TYPE_MASK 0x03 +#define USB_ENDP_TYPE_CTRL 0x00 +#define USB_ENDP_TYPE_ISOCH 0x01 +#define USB_ENDP_TYPE_BULK 0x02 +#define USB_ENDP_TYPE_INTER 0x03 +#endif + +#ifndef USB_DEVICE_ADDR +#define USB_DEVICE_ADDR 0x02 +#endif +#ifndef DEFAULT_ENDP0_SIZE +#define DEFAULT_ENDP0_SIZE 8 /* default maximum packet size for endpoint 0 */ +#endif +#ifndef MAX_PACKET_SIZE +#define MAX_PACKET_SIZE 64 /* maximum packet size */ +#endif +#ifndef USB_BO_CBW_SIZE +#define USB_BO_CBW_SIZE 0x1F +#define USB_BO_CSW_SIZE 0x0D +#endif +#ifndef USB_BO_CBW_SIG0 +#define USB_BO_CBW_SIG0 0x55 +#define USB_BO_CBW_SIG1 0x53 +#define USB_BO_CBW_SIG2 0x42 +#define USB_BO_CBW_SIG3 0x43 +#define USB_BO_CSW_SIG0 0x55 +#define USB_BO_CSW_SIG1 0x53 +#define USB_BO_CSW_SIG2 0x42 +#define USB_BO_CSW_SIG3 0x53 +#endif + +#ifndef __PACKED +#define __PACKED __attribute__((packed)) +#endif + +typedef struct __PACKED _USB_SETUP_REQ { + UINT8 bRequestType; + UINT8 bRequest; + UINT16 wValue; + UINT16 wIndex; + UINT16 wLength; +} USB_SETUP_REQ, *PUSB_SETUP_REQ; + + +typedef struct __PACKED _USB_DEVICE_DESCR { + UINT8 bLength; + UINT8 bDescriptorType; + UINT16 bcdUSB; + UINT8 bDeviceClass; + UINT8 bDeviceSubClass; + UINT8 bDeviceProtocol; + UINT8 bMaxPacketSize0; + UINT16 idVendor; + UINT16 idProduct; + UINT16 bcdDevice; + UINT8 iManufacturer; + UINT8 iProduct; + UINT8 iSerialNumber; + UINT8 bNumConfigurations; +} USB_DEV_DESCR, *PUSB_DEV_DESCR; + + +typedef struct __PACKED _USB_CONFIG_DESCR { + UINT8 bLength; + UINT8 bDescriptorType; + UINT16 wTotalLength; + UINT8 bNumInterfaces; + UINT8 bConfigurationValue; + UINT8 iConfiguration; + UINT8 bmAttributes; + UINT8 MaxPower; +} USB_CFG_DESCR, *PUSB_CFG_DESCR; + + +typedef struct __PACKED _USB_INTERF_DESCR { + UINT8 bLength; + UINT8 bDescriptorType; + UINT8 bInterfaceNumber; + UINT8 bAlternateSetting; + UINT8 bNumEndpoints; + UINT8 bInterfaceClass; + UINT8 bInterfaceSubClass; + UINT8 bInterfaceProtocol; + UINT8 iInterface; +} USB_ITF_DESCR, *PUSB_ITF_DESCR; + + +typedef struct __PACKED _USB_ENDPOINT_DESCR { + UINT8 bLength; + UINT8 bDescriptorType; + UINT8 bEndpointAddress; + UINT8 bmAttributes; + UINT16 wMaxPacketSize; + UINT8 bInterval; +} USB_ENDP_DESCR, *PUSB_ENDP_DESCR; + + +typedef struct __PACKED _USB_CONFIG_DESCR_LONG { + USB_CFG_DESCR cfg_descr; + USB_ITF_DESCR itf_descr; + USB_ENDP_DESCR endp_descr[1]; +} USB_CFG_DESCR_LONG, *PUSB_CFG_DESCR_LONG; + + +typedef struct __PACKED _USB_HUB_DESCR { + UINT8 bDescLength; + UINT8 bDescriptorType; + UINT8 bNbrPorts; + UINT8 wHubCharacteristicsL; + UINT8 wHubCharacteristicsH; + UINT8 bPwrOn2PwrGood; + UINT8 bHubContrCurrent; + UINT8 DeviceRemovable; + UINT8 PortPwrCtrlMask; +} USB_HUB_DESCR, *PUSB_HUB_DESCR; + + +typedef struct __PACKED _USB_HID_DESCR { + UINT8 bLength; + UINT8 bDescriptorType; + UINT16 bcdHID; + UINT8 bCountryCode; + UINT8 bNumDescriptors; + UINT8 bDescriptorTypeX; + UINT8 wDescriptorLengthL; + UINT8 wDescriptorLengthH; +} USB_HID_DESCR, *PUSB_HID_DESCR; + + +typedef struct __PACKED _UDISK_BOC_CBW {/* command of BulkOnly USB-FlashDisk */ + UINT32 mCBW_Sig; + UINT32 mCBW_Tag; + UINT32 mCBW_DataLen; /* uppest byte of data length, always is 0 */ + UINT8 mCBW_Flag; /* transfer direction and etc. */ + UINT8 mCBW_LUN; + UINT8 mCBW_CB_Len; /* length of command block */ + UINT8 mCBW_CB_Buf[16]; /* command block buffer */ +} UDISK_BOC_CBW, *PXUDISK_BOC_CBW; + + +typedef struct __PACKED _UDISK_BOC_CSW {/* status of BulkOnly USB-FlashDisk */ + UINT32 mCBW_Sig; + UINT32 mCBW_Tag; + UINT32 mCSW_Residue; /* return: remainder bytes */ /* uppest byte of remainder length, always is 0 */ + UINT8 mCSW_Status; /* return: result status */ +} UDISK_BOC_CSW, *PXUDISK_BOC_CSW; + + +extern PUINT8 pEP0_RAM_Addr; //ep0(64) +extern PUINT8 pEP1_RAM_Addr; //ep1_out(64)+ep1_in(64) +extern PUINT8 pEP2_RAM_Addr; //ep2_out(64)+ep2_in(64) +extern PUINT8 pEP3_RAM_Addr; //ep3_out(64)+ep3_in(64) +extern PUINT8 pEP4_RAM_Addr; //ep4_out(64)+ep4_in(64) +extern PUINT8 pEP5_RAM_Addr; //ep5_out(64)+ep5_in(64) +extern PUINT8 pEP6_RAM_Addr; //ep6_out(64)+ep6_in(64) +extern PUINT8 pEP7_RAM_Addr; //ep7_out(64)+ep7_in(64) + +#define pSetupReqPak ((PUSB_SETUP_REQ)pEP0_RAM_Addr) +#define pEP0_DataBuf (pEP0_RAM_Addr) +#define pEP1_OUT_DataBuf (pEP1_RAM_Addr) +#define pEP1_IN_DataBuf (pEP1_RAM_Addr+64) +#define pEP2_OUT_DataBuf (pEP2_RAM_Addr) +#define pEP2_IN_DataBuf (pEP2_RAM_Addr+64) +#define pEP3_OUT_DataBuf (pEP3_RAM_Addr) +#define pEP3_IN_DataBuf (pEP3_RAM_Addr+64) +#define pEP4_OUT_DataBuf (pEP4_RAM_Addr) +#define pEP4_IN_DataBuf (pEP4_RAM_Addr+64) +#define pEP5_OUT_DataBuf (pEP5_RAM_Addr) +#define pEP5_IN_DataBuf (pEP5_RAM_Addr+64) +#define pEP6_OUT_DataBuf (pEP6_RAM_Addr) +#define pEP6_IN_DataBuf (pEP6_RAM_Addr+64) +#define pEP7_OUT_DataBuf (pEP7_RAM_Addr) +#define pEP7_IN_DataBuf (pEP7_RAM_Addr+64) + + + +void USB_DeviceInit( void ); +void USB_DevTransProcess( void ); + +void DevEP1_OUT_Deal( UINT8 l ); +void DevEP2_OUT_Deal( UINT8 l ); +void DevEP3_OUT_Deal( UINT8 l ); +void DevEP4_OUT_Deal( UINT8 l ); +void DevEP5_OUT_Deal( UINT8 l ); +void DevEP6_OUT_Deal( UINT8 l ); +void DevEP7_OUT_Deal( UINT8 l ); + +void DevEP1_IN_Deal( UINT8 l ); +void DevEP2_IN_Deal( UINT8 l ); +void DevEP3_IN_Deal( UINT8 l ); +void DevEP4_IN_Deal( UINT8 l ); +void DevEP5_IN_Deal( UINT8 l ); +void DevEP6_IN_Deal( UINT8 l ); +void DevEP7_IN_Deal( UINT8 l ); + +#define EP1_GetINSta() (R8_UEP1_CTRL&UEP_T_RES_NAK) +#define EP2_GetINSta() (R8_UEP2_CTRL&UEP_T_RES_NAK) +#define EP3_GetINSta() (R8_UEP3_CTRL&UEP_T_RES_NAK) +#define EP4_GetINSta() (R8_UEP4_CTRL&UEP_T_RES_NAK) +#define EP5_GetINSta() (R8_UEP5_CTRL&UEP_T_RES_NAK) +#define EP6_GetINSta() (R8_UEP6_CTRL&UEP_T_RES_NAK) +#define EP7_GetINSta() (R8_UEP7_CTRL&UEP_T_RES_NAK) + +#ifdef __cplusplus +} +#endif + +#endif // __USB_TYPE__ + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usb_host.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usb_host.h new file mode 100644 index 0000000000..3a5b7480c7 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_usb_host.h @@ -0,0 +1,97 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_usb_host.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the USB +* Host firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_USBHOST_H +#define __CH32V10x_USBHOST_H + +#include "ch32v10x_usb.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#define ERR_SUCCESS 0x00 +#define ERR_USB_CONNECT 0x15 +#define ERR_USB_DISCON 0x16 +#define ERR_USB_BUF_OVER 0x17 +#define ERR_USB_DISK_ERR 0x1F +#define ERR_USB_TRANSFER 0x20 +#define ERR_USB_UNSUPPORT 0xFB +#define ERR_USB_UNKNOWN 0xFE +#define ERR_AOA_PROTOCOL 0x41 + +#define ROOT_DEV_DISCONNECT 0 +#define ROOT_DEV_CONNECTED 1 +#define ROOT_DEV_FAILED 2 +#define ROOT_DEV_SUCCESS 3 +#define DEV_TYPE_KEYBOARD ( USB_DEV_CLASS_HID | 0x20 ) +#define DEV_TYPE_MOUSE ( USB_DEV_CLASS_HID | 0x30 ) +#define DEF_AOA_DEVICE 0xF0 +#define DEV_TYPE_UNKNOW 0xFF + +#define HUB_MAX_PORTS 4 +#define WAIT_USB_TOUT_200US 3000 + +typedef struct +{ + UINT8 DeviceStatus; + UINT8 DeviceAddress; + UINT8 DeviceSpeed; + UINT8 DeviceType; + UINT16 DeviceVID; + UINT16 DevicePID; + UINT8 GpVar[4]; + UINT8 GpHUBPortNum; +} _RootHubDev; + + +extern _RootHubDev ThisUsbDev; +extern UINT8 UsbDevEndp0Size; +extern UINT8 FoundNewDev; + +extern PUINT8 pHOST_RX_RAM_Addr; +extern PUINT8 pHOST_TX_RAM_Addr; +#define pSetupReq ((PUSB_SETUP_REQ)pHOST_TX_RAM_Addr) + +extern const UINT8 SetupGetDevDescr[]; +extern const UINT8 SetupGetCfgDescr[]; +extern const UINT8 SetupSetUsbAddr[]; +extern const UINT8 SetupSetUsbConfig[]; +extern const UINT8 SetupSetUsbInterface[]; +extern const UINT8 SetupClrEndpStall[]; + + +void DisableRootHubPort(void) ; +UINT8 AnalyzeRootHub( void ) ; +void SetHostUsbAddr( UINT8 addr ); +void SetUsbSpeed( UINT8 FullSpeed ); +void ResetRootHubPort(void); +UINT8 EnableRootHubPort(void); +void SelectHubPort( UINT8 HubPortIndex ); +UINT8 WaitUSB_Interrupt( void ); +UINT8 USBHostTransact( UINT8 endp_pid, UINT8 tog, UINT32 timeout ); +UINT8 HostCtrlTransfer( PUINT8 DataBuf, PUINT8 RetLen ); +void CopySetupReqPkg( const UINT8 *pReqPkt ); +UINT8 CtrlGetDeviceDescr( PUINT8 DataBuf ); +UINT8 CtrlGetConfigDescr( PUINT8 DataBuf ); +UINT8 CtrlSetUsbAddress( UINT8 addr ); +UINT8 CtrlSetUsbConfig( UINT8 cfg ); +UINT8 CtrlClearEndpStall( UINT8 endp ) ; +UINT8 CtrlSetUsbIntercace( UINT8 cfg ); + +void USB_HostInit( void ); +UINT8 InitRootDevice( PUINT8 DataBuf ); +UINT8 HubGetPortStatus( UINT8 HubPortIndex ); // ѯHUB˿״̬,TxBuffer +UINT8 HubSetPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ); // HUB˿ +UINT8 HubClearPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ); // HUB˿ +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_USBHOST_H */ + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_wwdg.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_wwdg.h new file mode 100644 index 0000000000..780eaeff75 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/inc/ch32v10x_wwdg.h @@ -0,0 +1,40 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_wwdg.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file contains all the functions prototypes for the WWDG +* firmware library. +*******************************************************************************/ +#ifndef __CH32V10x_WWDG_H +#define __CH32V10x_WWDG_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "ch32v10x.h" + + +/* WWDG_Prescaler */ +#define WWDG_Prescaler_1 ((uint32_t)0x00000000) +#define WWDG_Prescaler_2 ((uint32_t)0x00000080) +#define WWDG_Prescaler_4 ((uint32_t)0x00000100) +#define WWDG_Prescaler_8 ((uint32_t)0x00000180) + + +void WWDG_DeInit(void); +void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); +void WWDG_SetWindowValue(uint8_t WindowValue); +void WWDG_EnableIT(void); +void WWDG_SetCounter(uint8_t Counter); +void WWDG_Enable(uint8_t Counter); +FlagStatus WWDG_GetFlagStatus(void); +void WWDG_ClearFlag(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __CH32V10x_WWDG_H */ + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_adc.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_adc.c new file mode 100644 index 0000000000..ab125bf62e --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_adc.c @@ -0,0 +1,1029 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_adc.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the ADC firmware functions. +*******************************************************************************/ +#include "ch32v10x_adc.h" +#include "ch32v10x_rcc.h" + +/* ADC DISCNUM mask */ +#define CTLR1_DISCNUM_Reset ((uint32_t)0xFFFF1FFF) + +/* ADC DISCEN mask */ +#define CTLR1_DISCEN_Set ((uint32_t)0x00000800) +#define CTLR1_DISCEN_Reset ((uint32_t)0xFFFFF7FF) + +/* ADC JAUTO mask */ +#define CTLR1_JAUTO_Set ((uint32_t)0x00000400) +#define CTLR1_JAUTO_Reset ((uint32_t)0xFFFFFBFF) + +/* ADC JDISCEN mask */ +#define CTLR1_JDISCEN_Set ((uint32_t)0x00001000) +#define CTLR1_JDISCEN_Reset ((uint32_t)0xFFFFEFFF) + +/* ADC AWDCH mask */ +#define CTLR1_AWDCH_Reset ((uint32_t)0xFFFFFFE0) + +/* ADC Analog watchdog enable mode mask */ +#define CTLR1_AWDMode_Reset ((uint32_t)0xFF3FFDFF) + +/* CTLR1 register Mask */ +#define CTLR1_CLEAR_Mask ((uint32_t)0xFFF0FEFF) + +/* ADC ADON mask */ +#define CTLR2_ADON_Set ((uint32_t)0x00000001) +#define CTLR2_ADON_Reset ((uint32_t)0xFFFFFFFE) + +/* ADC DMA mask */ +#define CTLR2_DMA_Set ((uint32_t)0x00000100) +#define CTLR2_DMA_Reset ((uint32_t)0xFFFFFEFF) + +/* ADC RSTCAL mask */ +#define CTLR2_RSTCAL_Set ((uint32_t)0x00000008) + +/* ADC CAL mask */ +#define CTLR2_CAL_Set ((uint32_t)0x00000004) + +/* ADC SWSTART mask */ +#define CTLR2_SWSTART_Set ((uint32_t)0x00400000) + +/* ADC EXTTRIG mask */ +#define CTLR2_EXTTRIG_Set ((uint32_t)0x00100000) +#define CTLR2_EXTTRIG_Reset ((uint32_t)0xFFEFFFFF) + +/* ADC Software start mask */ +#define CTLR2_EXTTRIG_SWSTART_Set ((uint32_t)0x00500000) +#define CTLR2_EXTTRIG_SWSTART_Reset ((uint32_t)0xFFAFFFFF) + +/* ADC JEXTSEL mask */ +#define CTLR2_JEXTSEL_Reset ((uint32_t)0xFFFF8FFF) + +/* ADC JEXTTRIG mask */ +#define CTLR2_JEXTTRIG_Set ((uint32_t)0x00008000) +#define CTLR2_JEXTTRIG_Reset ((uint32_t)0xFFFF7FFF) + +/* ADC JSWSTART mask */ +#define CTLR2_JSWSTART_Set ((uint32_t)0x00200000) + +/* ADC injected software start mask */ +#define CTLR2_JEXTTRIG_JSWSTART_Set ((uint32_t)0x00208000) +#define CTLR2_JEXTTRIG_JSWSTART_Reset ((uint32_t)0xFFDF7FFF) + +/* ADC TSPD mask */ +#define CTLR2_TSVREFE_Set ((uint32_t)0x00800000) +#define CTLR2_TSVREFE_Reset ((uint32_t)0xFF7FFFFF) + +/* CTLR2 register Mask */ +#define CTLR2_CLEAR_Mask ((uint32_t)0xFFF1F7FD) + +/* ADC SQx mask */ +#define RSQR3_SQ_Set ((uint32_t)0x0000001F) +#define RSQR2_SQ_Set ((uint32_t)0x0000001F) +#define RSQR1_SQ_Set ((uint32_t)0x0000001F) + +/* RSQR1 register Mask */ +#define RSQR1_CLEAR_Mask ((uint32_t)0xFF0FFFFF) + +/* ADC JSQx mask */ +#define ISQR_JSQ_Set ((uint32_t)0x0000001F) + +/* ADC JL mask */ +#define ISQR_JL_Set ((uint32_t)0x00300000) +#define ISQR_JL_Reset ((uint32_t)0xFFCFFFFF) + +/* ADC SMPx mask */ +#define SAMPTR1_SMP_Set ((uint32_t)0x00000007) +#define SAMPTR2_SMP_Set ((uint32_t)0x00000007) + +/* ADC IDATARx registers offset */ +#define IDATAR_Offset ((uint8_t)0x28) + +/* ADC1 RDATAR register base address */ +#define RDATAR_ADDRESS ((uint32_t)0x4001244C) + +/******************************************************************************* +* Function Name : ADC_DeInit +* Description : Deinitializes the ADCx peripheral registers to their default +* reset values. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Return : None +*******************************************************************************/ +void ADC_DeInit(ADC_TypeDef* ADCx) +{ + if (ADCx == ADC1) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE); + } +} + +/******************************************************************************* +* Function Name : ADC_Init +* Description : Initializes the ADCx peripheral according to the specified +* parameters in the ADC_InitStruct. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_InitStruct: pointer to an ADC_InitTypeDef structure that +* contains the configuration information for the specified ADC peripheral. +* Return : None +*******************************************************************************/ +void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct) +{ + uint32_t tmpreg1 = 0; + uint8_t tmpreg2 = 0; + + tmpreg1 = ADCx->CTLR1; + tmpreg1 &= CTLR1_CLEAR_Mask; + tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8)); + ADCx->CTLR1 = tmpreg1; + + tmpreg1 = ADCx->CTLR2; + tmpreg1 &= CTLR2_CLEAR_Mask; + tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv | + ((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1)); + ADCx->CTLR2 = tmpreg1; + + tmpreg1 = ADCx->RSQR1; + tmpreg1 &= RSQR1_CLEAR_Mask; + tmpreg2 |= (uint8_t) (ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1); + tmpreg1 |= (uint32_t)tmpreg2 << 20; + ADCx->RSQR1 = tmpreg1; +} + +/******************************************************************************* +* Function Name : ADC_StructInit +* Description : Fills each ADC_InitStruct member with its default value. +* Input : ADC_InitStruct : pointer to an ADC_InitTypeDef structure that +* contains the configuration information for the specified ADC peripheral. +* Return : None +*******************************************************************************/ +void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct) +{ + ADC_InitStruct->ADC_Mode = ADC_Mode_Independent; + ADC_InitStruct->ADC_ScanConvMode = DISABLE; + ADC_InitStruct->ADC_ContinuousConvMode = DISABLE; + ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; + ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right; + ADC_InitStruct->ADC_NbrOfChannel = 1; +} + +/******************************************************************************* +* Function Name : ADC_Cmd +* Description : Enables or disables the specified ADC peripheral. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR2 |= CTLR2_ADON_Set; + } + else + { + ADCx->CTLR2 &= CTLR2_ADON_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_DMACmd +* Description : Enables or disables the specified ADC DMA request. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR2 |= CTLR2_DMA_Set; + } + else + { + ADCx->CTLR2 &= CTLR2_DMA_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_ITConfig +* Description : Enables or disables the specified ADC interrupts. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_IT: specifies the ADC interrupt sources to be enabled or disabled. +* ADC_IT_EOC: End of conversion interrupt mask. +* ADC_IT_AWD: Analog watchdog interrupt mask. +* ADC_IT_JEOC: End of injected conversion interrupt mask. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState) +{ + uint8_t itmask = 0; + + itmask = (uint8_t)ADC_IT; + + if (NewState != DISABLE) + { + ADCx->CTLR1 |= itmask; + } + else + { + ADCx->CTLR1 &= (~(uint32_t)itmask); + } +} + +/******************************************************************************* +* Function Name : ADC_ResetCalibration +* Description : Resets the selected ADC calibration registers. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Return : None +*******************************************************************************/ +void ADC_ResetCalibration(ADC_TypeDef* ADCx) +{ + ADCx->CTLR2 |= CTLR2_RSTCAL_Set; +} + +/******************************************************************************* +* Function Name : ADC_GetResetCalibrationStatus +* Description : Gets the selected ADC reset calibration registers status. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + + if ((ADCx->CTLR2 & CTLR2_RSTCAL_Set) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : ADC_StartCalibration +* Description : Starts the selected ADC calibration process. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Return : None +*******************************************************************************/ +void ADC_StartCalibration(ADC_TypeDef* ADCx) +{ + ADCx->CTLR2 |= CTLR2_CAL_Set; +} + +/******************************************************************************* +* Function Name : ADC_GetCalibrationStatus +* Description : Starts the selected ADC calibration process. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + + if ((ADCx->CTLR2 & CTLR2_CAL_Set) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : ADC_SoftwareStartConvCmd +* Description : Enables or disables the selected ADC software start conversion. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR2 |= CTLR2_EXTTRIG_SWSTART_Set; + } + else + { + ADCx->CTLR2 &= CTLR2_EXTTRIG_SWSTART_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_GetSoftwareStartConvStatus +* Description : Gets the selected ADC Software start conversion Status. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + + if ((ADCx->CTLR2 & CTLR2_SWSTART_Set) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : ADC_DiscModeChannelCountConfig +* Description : Configures the discontinuous mode for the selected ADC regular +* group channel. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Number: specifies the discontinuous mode regular channel +* count value. +* This number must be between 1 and 8. +* Return : None +*******************************************************************************/ +void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number) +{ + uint32_t tmpreg1 = 0; + uint32_t tmpreg2 = 0; + + tmpreg1 = ADCx->CTLR1; + tmpreg1 &= CTLR1_DISCNUM_Reset; + tmpreg2 = Number - 1; + tmpreg1 |= tmpreg2 << 13; + ADCx->CTLR1 = tmpreg1; +} + +/******************************************************************************* +* Function Name : ADC_DiscModeCmd +* Description : Enables or disables the discontinuous mode on regular group +* channel for the specified ADC. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR1 |= CTLR1_DISCEN_Set; + } + else + { + ADCx->CTLR1 &= CTLR1_DISCEN_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_RegularChannelConfig +* Description : Configures for the selected ADC regular channel its corresponding +* rank in the sequencer and its sample time. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_Channel: the ADC channel to configure. +* ADC_Channel_0: ADC Channel0 selected. +* ADC_Channel_1: ADC Channel1 selected. +* ADC_Channel_2: ADC Channel2 selected. +* ADC_Channel_3: ADC Channel3 selected. +* ADC_Channel_4: ADC Channel4 selected. +* ADC_Channel_5: ADC Channel5 selected. +* ADC_Channel_6: ADC Channel6 selected. +* ADC_Channel_7: ADC Channel7 selected. +* ADC_Channel_8: ADC Channel8 selected. +* ADC_Channel_9: ADC Channel9 selected. +* ADC_Channel_10: ADC Channel10 selected. +* ADC_Channel_11: ADC Channel11 selected. +* ADC_Channel_12: ADC Channel12 selected. +* ADC_Channel_13: ADC Channel13 selected. +* ADC_Channel_14: ADC Channel14 selected. +* ADC_Channel_15: ADC Channel15 selected. +* ADC_Channel_16: ADC Channel16 selected. +* ADC_Channel_17: ADC Channel17 selected. +* Rank: The rank in the regular group sequencer. +* This parameter must be between 1 to 16. +* ADC_SampleTime: The sample time value to be set for the selected channel. +* ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles. +* ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles. +* ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles. +* ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles. +* ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles. +* ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles. +* ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles. +* ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles. +* Return : None +*******************************************************************************/ +void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) +{ + uint32_t tmpreg1 = 0, tmpreg2 = 0; + + if (ADC_Channel > ADC_Channel_9) + { + tmpreg1 = ADCx->SAMPTR1; + tmpreg2 = SAMPTR1_SMP_Set << (3 * (ADC_Channel - 10)); + tmpreg1 &= ~tmpreg2; + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10)); + tmpreg1 |= tmpreg2; + ADCx->SAMPTR1 = tmpreg1; + } + else + { + tmpreg1 = ADCx->SAMPTR2; + tmpreg2 = SAMPTR2_SMP_Set << (3 * ADC_Channel); + tmpreg1 &= ~tmpreg2; + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); + tmpreg1 |= tmpreg2; + ADCx->SAMPTR2 = tmpreg1; + } + + if (Rank < 7) + { + tmpreg1 = ADCx->RSQR3; + tmpreg2 = RSQR3_SQ_Set << (5 * (Rank - 1)); + tmpreg1 &= ~tmpreg2; + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1)); + tmpreg1 |= tmpreg2; + ADCx->RSQR3 = tmpreg1; + } + else if (Rank < 13) + { + tmpreg1 = ADCx->RSQR2; + tmpreg2 = RSQR2_SQ_Set << (5 * (Rank - 7)); + tmpreg1 &= ~tmpreg2; + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7)); + tmpreg1 |= tmpreg2; + ADCx->RSQR2 = tmpreg1; + } + else + { + tmpreg1 = ADCx->RSQR1; + tmpreg2 = RSQR1_SQ_Set << (5 * (Rank - 13)); + tmpreg1 &= ~tmpreg2; + tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13)); + tmpreg1 |= tmpreg2; + ADCx->RSQR1 = tmpreg1; + } +} + +/******************************************************************************* +* Function Name : ADC_ExternalTrigConvCmd +* Description : Enables or disables the ADCx conversion through external trigger. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR2 |= CTLR2_EXTTRIG_Set; + } + else + { + ADCx->CTLR2 &= CTLR2_EXTTRIG_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_GetConversionValue +* Description : Returns the last ADCx conversion result data for regular channel. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Return : ADCx->RDATAR: +* The Data conversion value. +*******************************************************************************/ +uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx) +{ + return (uint16_t) ADCx->RDATAR; +} + +/******************************************************************************* +* Function Name : ADC_GetDualModeConversionValue +* Description : Returns the last ADC1 and ADC2 conversion result data in dual mode. +* Input : None +* Return : RDATAR_ADDRESS: +* The Data conversion value. +*******************************************************************************/ +uint32_t ADC_GetDualModeConversionValue(void) +{ + return (*(__IO uint32_t *) RDATAR_ADDRESS); +} + +/******************************************************************************* +* Function Name : ADC_AutoInjectedConvCmd +* Description : Enables or disables the selected ADC automatic injected group +* conversion after regular one. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR1 |= CTLR1_JAUTO_Set; + } + else + { + ADCx->CTLR1 &= CTLR1_JAUTO_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_InjectedDiscModeCmd +* Description : Enables or disables the discontinuous mode for injected group +* channel for the specified ADC. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR1 |= CTLR1_JDISCEN_Set; + } + else + { + ADCx->CTLR1 &= CTLR1_JDISCEN_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_ExternalTrigInjectedConvConfig +* Description : Configures the ADCx external trigger for injected channels conversion. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_ExternalTrigInjecConv: specifies the ADC trigger to start +* injected conversion. +* ADC_ExternalTrigInjecConv_T1_TRGO: Timer1 TRGO event selected. +* ADC_ExternalTrigInjecConv_T1_CC4: Timer1 capture compare4 selected. +* ADC_ExternalTrigInjecConv_T2_TRGO: Timer2 TRGO event selected. +* ADC_ExternalTrigInjecConv_T2_CC1: Timer2 capture compare1 selected. +* ADC_ExternalTrigInjecConv_T3_CC4: Timer3 capture compare4 selected. +* ADC_ExternalTrigInjecConv_T4_TRGO: Timer4 TRGO event selected. +* ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4: External interrupt +* line 15 event selected. +* ADC_ExternalTrigInjecConv_None: Injected conversion started +* by software and not by external trigger. +* Return : None +*******************************************************************************/ +void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv) +{ + uint32_t tmpreg = 0; + + tmpreg = ADCx->CTLR2; + tmpreg &= CTLR2_JEXTSEL_Reset; + tmpreg |= ADC_ExternalTrigInjecConv; + ADCx->CTLR2 = tmpreg; +} + +/******************************************************************************* +* Function Name : ADC_ExternalTrigInjectedConvCmd +* Description : Enables or disables the ADCx injected channels conversion through +* external trigger. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR2 |= CTLR2_JEXTTRIG_Set; + } + else + { + ADCx->CTLR2 &= CTLR2_JEXTTRIG_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_SoftwareStartInjectedConvCmd +* Description : Enables or disables the selected ADC start of the injected +* channels conversion. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADCx->CTLR2 |= CTLR2_JEXTTRIG_JSWSTART_Set; + } + else + { + ADCx->CTLR2 &= CTLR2_JEXTTRIG_JSWSTART_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_GetSoftwareStartInjectedConvCmdStatus +* Description : Gets the selected ADC Software start injected conversion Status. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx) +{ + FlagStatus bitstatus = RESET; + + if ((ADCx->CTLR2 & CTLR2_JSWSTART_Set) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : ADC_InjectedChannelConfig +* Description : Configures for the selected ADC injected channel its corresponding +* rank in the sequencer and its sample time. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_Channel: the ADC channel to configure. +* ADC_Channel_0: ADC Channel0 selected. +* ADC_Channel_1: ADC Channel1 selected. +* ADC_Channel_2: ADC Channel2 selected. +* ADC_Channel_3: ADC Channel3 selected. +* ADC_Channel_4: ADC Channel4 selected. +* ADC_Channel_5: ADC Channel5 selected. +* ADC_Channel_6: ADC Channel6 selected. +* ADC_Channel_7: ADC Channel7 selected. +* ADC_Channel_8: ADC Channel8 selected. +* ADC_Channel_9: ADC Channel9 selected. +* ADC_Channel_10: ADC Channel10 selected. +* ADC_Channel_11: ADC Channel11 selected. +* ADC_Channel_12: ADC Channel12 selected. +* ADC_Channel_13: ADC Channel13 selected. +* ADC_Channel_14: ADC Channel14 selected. +* ADC_Channel_15: ADC Channel15 selected. +* ADC_Channel_16: ADC Channel16 selected. +* ADC_Channel_17: ADC Channel17 selected. +* Rank: The rank in the injected group sequencer. +* This parameter must be between 1 to 4. +* ADC_SampleTime: The sample time value to be set for the selected channel. +* ADC_SampleTime_1Cycles5: Sample time equal to 1.5 cycles. +* ADC_SampleTime_7Cycles5: Sample time equal to 7.5 cycles. +* ADC_SampleTime_13Cycles5: Sample time equal to 13.5 cycles. +* ADC_SampleTime_28Cycles5: Sample time equal to 28.5 cycles. +* ADC_SampleTime_41Cycles5: Sample time equal to 41.5 cycles. +* ADC_SampleTime_55Cycles5: Sample time equal to 55.5 cycles. +* ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles. +* ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles. +* Return : None +*******************************************************************************/ +void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime) +{ + uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0; + + if (ADC_Channel > ADC_Channel_9) + { + tmpreg1 = ADCx->SAMPTR1; + tmpreg2 = SAMPTR1_SMP_Set << (3*(ADC_Channel - 10)); + tmpreg1 &= ~tmpreg2; + tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10)); + tmpreg1 |= tmpreg2; + ADCx->SAMPTR1 = tmpreg1; + } + else + { + tmpreg1 = ADCx->SAMPTR2; + tmpreg2 = SAMPTR2_SMP_Set << (3 * ADC_Channel); + tmpreg1 &= ~tmpreg2; + tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel); + tmpreg1 |= tmpreg2; + ADCx->SAMPTR2 = tmpreg1; + } + + tmpreg1 = ADCx->ISQR; + tmpreg3 = (tmpreg1 & ISQR_JL_Set)>> 20; + tmpreg2 = ISQR_JSQ_Set << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1))); + tmpreg1 &= ~tmpreg2; + tmpreg2 = (uint32_t)ADC_Channel << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1))); + tmpreg1 |= tmpreg2; + ADCx->ISQR = tmpreg1; +} + +/******************************************************************************* +* Function Name : ADC_InjectedSequencerLengthConfig +* Description : Configures the sequencer length for injected channels. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* Length: The sequencer length. +* This parameter must be a number between 1 to 4. +* Return : None +*******************************************************************************/ +void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length) +{ + uint32_t tmpreg1 = 0; + uint32_t tmpreg2 = 0; + + tmpreg1 = ADCx->ISQR; + tmpreg1 &= ISQR_JL_Reset; + tmpreg2 = Length - 1; + tmpreg1 |= tmpreg2 << 20; + ADCx->ISQR = tmpreg1; +} + +/******************************************************************************* +* Function Name : ADC_SetInjectedOffset +* Description : Set the injected channels conversion value offset. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_InjectedChannel: the ADC injected channel to set its offset. +* ADC_InjectedChannel_1: Injected Channel1 selected. +* ADC_InjectedChannel_2: Injected Channel2 selected. +* ADC_InjectedChannel_3: Injected Channel3 selected. +* ADC_InjectedChannel_4: Injected Channel4 selected. +* Offset: the offset value for the selected ADC injected channel. +* This parameter must be a 12bit value. +* Return : None +*******************************************************************************/ +void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset) +{ + __IO uint32_t tmp = 0; + + tmp = (uint32_t)ADCx; + tmp += ADC_InjectedChannel; + + *(__IO uint32_t *) tmp = (uint32_t)Offset; +} + +/******************************************************************************* +* Function Name : ADC_GetInjectedConversionValue +* Description : Returns the ADC injected channel conversion result. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_InjectedChannel: the converted ADC injected channel. +* ADC_InjectedChannel_1: Injected Channel1 selected. +* ADC_InjectedChannel_2: Injected Channel2 selected. +* ADC_InjectedChannel_3: Injected Channel3 selected. +* ADC_InjectedChannel_4: Injected Channel4 selected. +* Return : tmp: The Data conversion value. +*******************************************************************************/ +uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel) +{ + __IO uint32_t tmp = 0; + + tmp = (uint32_t)ADCx; + tmp += ADC_InjectedChannel + IDATAR_Offset; + + return (uint16_t) (*(__IO uint32_t*) tmp); +} + +/******************************************************************************* +* Function Name : ADC_AnalogWatchdogCmd +* Description : Enables or disables the analog watchdog on single/all regular +* or injected channels. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_AnalogWatchdog: the ADC analog watchdog configuration. +* ADC_AnalogWatchdog_SingleRegEnable: Analog watchdog on a +* single regular channel. +* ADC_AnalogWatchdog_SingleInjecEnable: Analog watchdog on a +* single injected channel. +* ADC_AnalogWatchdog_SingleRegOrInjecEnable: Analog watchdog +* on a single regular or injected channel. +* ADC_AnalogWatchdog_AllRegEnable: Analog watchdog on all +* regular channel. +* ADC_AnalogWatchdog_AllInjecEnable: Analog watchdog on all +* injected channel. +* ADC_AnalogWatchdog_AllRegAllInjecEnable: Analog watchdog on +* all regular and injected channels. +* ADC_AnalogWatchdog_None: No channel guarded by the analog +* watchdog. +* Return : None +*******************************************************************************/ +void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog) +{ + uint32_t tmpreg = 0; + + tmpreg = ADCx->CTLR1; + tmpreg &= CTLR1_AWDMode_Reset; + tmpreg |= ADC_AnalogWatchdog; + ADCx->CTLR1 = tmpreg; +} + +/******************************************************************************* +* Function Name : ADC_AnalogWatchdogThresholdsConfig +* Description : Configures the high and low thresholds of the analog watchdog. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* HighThreshold: the ADC analog watchdog High threshold value. +* This parameter must be a 12bit value. +* LowThreshold: the ADC analog watchdog Low threshold value. +* This parameter must be a 12bit value. +* Return : None +*******************************************************************************/ +void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, + uint16_t LowThreshold) +{ + ADCx->WDHTR = HighThreshold; + ADCx->WDLTR = LowThreshold; +} + +/******************************************************************************* +* Function Name : ADC_AnalogWatchdogSingleChannelConfig +* Description : Configures the analog watchdog guarded single channel. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_Channel: the ADC channel to configure for the analog watchdog. +* ADC_Channel_0: ADC Channel0 selected. +* ADC_Channel_1: ADC Channel1 selected. +* ADC_Channel_2: ADC Channel2 selected. +* ADC_Channel_3: ADC Channel3 selected. +* ADC_Channel_4: ADC Channel4 selected. +* ADC_Channel_5: ADC Channel5 selected. +* ADC_Channel_6: ADC Channel6 selected. +* ADC_Channel_7: ADC Channel7 selected. +* ADC_Channel_8: ADC Channel8 selected. +* ADC_Channel_9: ADC Channel9 selected. +* ADC_Channel_10: ADC Channel10 selected. +* ADC_Channel_11: ADC Channel11 selected. +* ADC_Channel_12: ADC Channel12 selected. +* ADC_Channel_13: ADC Channel13 selected. +* ADC_Channel_14: ADC Channel14 selected. +* ADC_Channel_15: ADC Channel15 selected. +* ADC_Channel_16: ADC Channel16 selected. +* ADC_Channel_17: ADC Channel17 selected. +* Return : None +*******************************************************************************/ +void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel) +{ + uint32_t tmpreg = 0; + + tmpreg = ADCx->CTLR1; + tmpreg &= CTLR1_AWDCH_Reset; + tmpreg |= ADC_Channel; + ADCx->CTLR1 = tmpreg; +} + +/******************************************************************************* +* Function Name : ADC_TempSensorVrefintCmd +* Description : Enables or disables the temperature sensor and Vrefint channel. +* Input : NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void ADC_TempSensorVrefintCmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + ADC1->CTLR2 |= CTLR2_TSVREFE_Set; + } + else + { + ADC1->CTLR2 &= CTLR2_TSVREFE_Reset; + } +} + +/******************************************************************************* +* Function Name : ADC_GetFlagStatus +* Description : Checks whether the specified ADC flag is set or not. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_FLAG: specifies the flag to check. +* ADC_FLAG_AWD: Analog watchdog flag. +* ADC_FLAG_EOC: End of conversion flag. +* ADC_FLAG_JEOC: End of injected group conversion flag. +* ADC_FLAG_JSTRT: Start of injected group conversion flag. +* ADC_FLAG_STRT: Start of regular group conversion flag. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG) +{ + FlagStatus bitstatus = RESET; + + if ((ADCx->STATR & ADC_FLAG) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : ADC_ClearFlag +* Description : Clears the ADCx's pending flags. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_FLAG: specifies the flag to clear. +* ADC_FLAG_AWD: Analog watchdog flag. +* ADC_FLAG_EOC: End of conversion flag. +* ADC_FLAG_JEOC: End of injected group conversion flag. +* ADC_FLAG_JSTRT: Start of injected group conversion flag. +* ADC_FLAG_STRT: Start of regular group conversion flag. +* Return : None +*******************************************************************************/ +void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG) +{ + ADCx->STATR = ~(uint32_t)ADC_FLAG; +} + +/******************************************************************************* +* Function Name : ADC_GetITStatus +* Description : Checks whether the specified ADC interrupt has occurred or not. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_IT: specifies the ADC interrupt source to check. +* ADC_IT_EOC: End of conversion interrupt mask. +* ADC_IT_AWD: Analog watchdog interrupt mask. +* ADC_IT_JEOC: End of injected conversion interrupt mask. +* Return : ITStatus: SET or RESET. +*******************************************************************************/ +ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT) +{ + ITStatus bitstatus = RESET; + uint32_t itmask = 0, enablestatus = 0; + + itmask = ADC_IT >> 8; + enablestatus = (ADCx->CTLR1 & (uint8_t)ADC_IT) ; + + if (((ADCx->STATR & itmask) != (uint32_t)RESET) && enablestatus) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : ADC_ClearITPendingBit +* Description : Clears the ADCx's interrupt pending bits. +* Input : ADCx: +* where x can be 1 to select the ADC peripheral. +* ADC_IT: specifies the ADC interrupt pending bit to clear. +* ADC_IT_EOC: End of conversion interrupt mask. +* ADC_IT_AWD: Analog watchdog interrupt mask. +* ADC_IT_JEOC: End of injected conversion interrupt mask. +* Return : None +*******************************************************************************/ +void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT) +{ + uint8_t itmask = 0; + + itmask = (uint8_t)(ADC_IT >> 8); + ADCx->STATR = ~(uint32_t)itmask; +} + +/******************************************************************************* +* Function Name : TempSensor_Volt_To_Temper +* Description : Internal Temperature Sensor Voltage to temperature. +* Input : Value: Voltage Value. +* Return : Temper: Temperature Value. +*******************************************************************************/ +s32 TempSensor_Volt_To_Temper(s32 Value) +{ + s32 Temper, Refer_Volt, Refer_Temper; + s32 k=43; + + Refer_Volt = (s32)((*(u32*)0x1FFFF898)&0x0000FFFF); + Refer_Temper = (s32)(((*(u32*)0x1FFFF898)>>16) & 0x0000FFFF); + + Temper = Refer_Temper + ((Value-Refer_Volt)*10+(k>>1))/k; + + return Temper; +} + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_bkp.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_bkp.c new file mode 100644 index 0000000000..693101fe09 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_bkp.c @@ -0,0 +1,221 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_bkp.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the BKP firmware functions. +*******************************************************************************/ +#include "ch32v10x_bkp.h" +#include "ch32v10x_rcc.h" + +/* BKP registers bit mask */ + +/* OCTLR register bit mask */ +#define OCTLR_CAL_MASK ((uint16_t)0xFF80) +#define OCTLR_MASK ((uint16_t)0xFC7F) + +/******************************************************************************* +* Function Name : BKP_DeInit +* Description : Deinitializes the BKP peripheral registers to their default +* reset values. +* Input : None +* Return : None +*******************************************************************************/ +void BKP_DeInit(void) +{ + RCC_BackupResetCmd(ENABLE); + RCC_BackupResetCmd(DISABLE); +} + +/******************************************************************************* +* Function Name : BKP_TamperPinLevelConfig +* Description : Configures the Tamper Pin active level. +* Input : BKP_TamperPinLevel: specifies the Tamper Pin active level. +* BKP_TamperPinLevel_High: Tamper pin active on high level. +* BKP_TamperPinLevel_Low: Tamper pin active on low level. +* Return : None +*******************************************************************************/ +void BKP_TamperPinLevelConfig(uint16_t BKP_TamperPinLevel) +{ + if(BKP_TamperPinLevel) + { + BKP->TPCTLR |= (1<<1); + } + else + { + BKP->TPCTLR &= ~(1<<1); + } +} + +/******************************************************************************* +* Function Name : BKP_TamperPinCmd +* Description : Configures the Tamper Pin active level. +* Input : NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void BKP_TamperPinCmd(FunctionalState NewState) +{ + if(NewState) + { + BKP->TPCTLR |= (1<<0); + } + else + { + BKP->TPCTLR &= ~(1<<0); + } +} + +/******************************************************************************* +* Function Name : BKP_ITConfig +* Description : Enables or disables the Tamper Pin Interrupt. +* Input : NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void BKP_ITConfig(FunctionalState NewState) +{ + if(NewState) + { + BKP->TPCSR |= (1<<2); + } + else + { + BKP->TPCSR &= ~(1<<2); + } +} + +/******************************************************************************* +* Function Name : BKP_RTCOutputConfig +* Description : Select the RTC output source to output on the Tamper pin. +* Input : BKP_RTCOutputSource: specifies the RTC output source. +* BKP_RTCOutputSource_None: no RTC output on the Tamper pin. +* BKP_RTCOutputSource_CalibClock: output the RTC clock with +* frequency divided by 64 on the Tamper pin. +* BKP_RTCOutputSource_Alarm: output the RTC Alarm pulse signal +* on the Tamper pin. +* BKP_RTCOutputSource_Second: output the RTC Second pulse +* signal on the Tamper pin. +* Return : None +*******************************************************************************/ +void BKP_RTCOutputConfig(uint16_t BKP_RTCOutputSource) +{ + uint16_t tmpreg = 0; + + tmpreg = BKP->OCTLR; + tmpreg &= OCTLR_MASK; + tmpreg |= BKP_RTCOutputSource; + BKP->OCTLR = tmpreg; +} + +/******************************************************************************* +* Function Name : BKP_SetRTCCalibrationValue +* Description : Sets RTC Clock Calibration value. +* Input : CalibrationValue: specifies the RTC Clock Calibration value. +* This parameter must be a number between 0 and 0x1F. +* Return : None +*******************************************************************************/ +void BKP_SetRTCCalibrationValue(uint8_t CalibrationValue) +{ + uint16_t tmpreg = 0; + + tmpreg = BKP->OCTLR; + tmpreg &= OCTLR_CAL_MASK; + tmpreg |= CalibrationValue; + BKP->OCTLR = tmpreg; +} + +/******************************************************************************* +* Function Name : BKP_WriteBackupRegister +* Description : Writes user data to the specified Data Backup Register. +* Input : BKP_DR: specifies the Data Backup Register. +* Data: data to write. +* Return : None +*******************************************************************************/ +void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) +{ + __IO uint32_t tmp = 0; + + tmp = (uint32_t)BKP_BASE; + tmp += BKP_DR; + *(__IO uint32_t *) tmp = Data; +} + +/******************************************************************************* +* Function Name : BKP_ReadBackupRegister +* Description : Reads data from the specified Data Backup Register. +* Input : BKP_DR: specifies the Data Backup Register. +* This parameter can be BKP_DRx where x:[1, 42]. +* Return : None +*******************************************************************************/ +uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR) +{ + __IO uint32_t tmp = 0; + + tmp = (uint32_t)BKP_BASE; + tmp += BKP_DR; + + return (*(__IO uint16_t *) tmp); +} + +/******************************************************************************* +* Function Name : BKP_GetFlagStatus +* Description : Checks whether the Tamper Pin Event flag is set or not. +* Input : None +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus BKP_GetFlagStatus(void) +{ + if(BKP->TPCSR & (1<<8)) + { + return SET; + } + else + { + return RESET; + } +} + +/******************************************************************************* +* Function Name : BKP_ClearFlag +* Description : Clears Tamper Pin Event pending flag. +* Input : None +* Return : None +*******************************************************************************/ +void BKP_ClearFlag(void) +{ + BKP->TPCSR |= BKP_CTE; +} + +/******************************************************************************* +* Function Name : BKP_GetITStatus +* Description : Checks whether the Tamper Pin Interrupt has occurred or not. +* Input : None +* Return : ITStatus: SET or RESET. +*******************************************************************************/ +ITStatus BKP_GetITStatus(void) +{ + if(BKP->TPCSR & (1<<9)) + { + return SET; + } + else + { + return RESET; + } +} + +/******************************************************************************* +* Function Name : BKP_ClearITPendingBit +* Description : Clears Tamper Pin Interrupt pending bit. +* Input : None +* Return : None +*******************************************************************************/ +void BKP_ClearITPendingBit(void) +{ + BKP->TPCSR |= BKP_CTI; +} + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_crc.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_crc.c new file mode 100644 index 0000000000..c5624cb51c --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_crc.c @@ -0,0 +1,92 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_crc.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the CRC firmware functions. +*******************************************************************************/ +#include "ch32v10x_crc.h" + +/******************************************************************************* +* Function Name : CRC_ResetDR +* Description : Resets the CRC Data register (DR). +* Input : None +* Return : None +*******************************************************************************/ +void CRC_ResetDR(void) +{ + CRC->CTLR = CRC_CTLR_RESET; +} + +/******************************************************************************* +* Function Name : CRC_CalcCRC +* Description : Computes the 32-bit CRC of a given data word(32-bit). +* Input : Data: data word(32-bit) to compute its CRC. +* Return : 32-bit CRC. +*******************************************************************************/ +uint32_t CRC_CalcCRC(uint32_t Data) +{ + CRC->DATAR = Data; + + return (CRC->DATAR); +} + +/******************************************************************************* +* Function Name : CRC_CalcBlockCRC +* Description : Computes the 32-bit CRC of a given buffer of data word(32-bit). +* Input : pBuffer: pointer to the buffer containing the data to be computed. +* BufferLength: length of the buffer to be computed. +* Return : 32-bit CRC. +*******************************************************************************/ +uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength) +{ + uint32_t index = 0; + + for(index = 0; index < BufferLength; index++) + { + CRC->DATAR = pBuffer[index]; + } + + return (CRC->DATAR); +} + +/******************************************************************************* +* Function Name : CRC_GetCRC +* Description : Returns the current CRC value. +* Input : None +* Return : 32-bit CRC. +*******************************************************************************/ +uint32_t CRC_GetCRC(void) +{ + return (CRC->IDATAR); +} + +/******************************************************************************* +* Function Name : CRC_SetIDRegister +* Description : Stores a 8-bit data in the Independent Data(ID) register. +* Input : IDValue: 8-bit value to be stored in the ID register. +* Return : None +*******************************************************************************/ +void CRC_SetIDRegister(uint8_t IDValue) +{ + CRC->IDATAR = IDValue; +} + +/******************************************************************************* +* Function Name : CRC_GetIDRegister +* Description : Returns the 8-bit data stored in the Independent Data(ID) register. +* Input : None +* Return : 8-bit value of the ID register. +*******************************************************************************/ +uint8_t CRC_GetIDRegister(void) +{ + return (CRC->IDATAR); +} + + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_dbgmcu.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_dbgmcu.c new file mode 100644 index 0000000000..cb76368140 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_dbgmcu.c @@ -0,0 +1,60 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_dbgmcu.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the DBGMCU firmware functions. +****************************************************************************************/ +#include "ch32v10x_dbgmcu.h" + +/******************************************************************************* +* Function Name : DBGMCU_Config +* Description : Configures the specified peripheral and low power mode behavior +* when the MCU under Debug mode. +* Input : DBGMCU_Periph: specifies the peripheral and low power mode. +* DBGMCU_IWDG_STOP: Debug IWDG stopped when Core is halted +* DBGMCU_WWDG_STOP: Debug WWDG stopped when Core is halted +* DBGMCU_I2C1_SMBUS_TIMEOUT: I2C1 SMBUS timeout mode stopped when Core is halted +* DBGMCU_I2C2_SMBUS_TIMEOUT: I2C2 SMBUS timeout mode stopped when Core is halted +* DBGMCU_TIM1_STOP: TIM1 counter stopped when Core is halted +* DBGMCU_TIM2_STOP: TIM2 counter stopped when Core is halted +* DBGMCU_TIM3_STOP: TIM3 counter stopped when Core is halted +* DBGMCU_TIM4_STOP: TIM4 counter stopped when Core is halted +* DBGMCU_SLEEP: Keep debugger connection during SLEEP mode +* DBGMCU_STOP: Keep debugger connection during STOP mode +* DBGMCU_STANDBY: Keep debugger connection during STANDBY mode +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState) +{ + if((DBGMCU_Periph == DBGMCU_SLEEP) || (DBGMCU_Periph == DBGMCU_STOP) || (DBGMCU_Periph == DBGMCU_STANDBY)) + { + if (NewState != DISABLE) + { + DBGMCU->CFGR1 |= DBGMCU_Periph; + } + else + { + DBGMCU->CFGR1 &= ~DBGMCU_Periph; + } + } + else + { + if (NewState != DISABLE) + { + DBGMCU->CFGR0 |= DBGMCU_Periph; + } + else + { + DBGMCU->CFGR0 &= ~DBGMCU_Periph; + } + } +} + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_dma.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_dma.c new file mode 100644 index 0000000000..a7d8895333 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_dma.c @@ -0,0 +1,528 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_dma.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the DMA firmware functions. +*******************************************************************************/ +#include "ch32v10x_dma.h" +#include "ch32v10x_rcc.h" + +/* DMA1 Channelx interrupt pending bit masks */ +#define DMA1_Channel1_IT_Mask ((uint32_t)(DMA_GIF1 | DMA_TCIF1 | DMA_HTIF1 | DMA_TEIF1)) +#define DMA1_Channel2_IT_Mask ((uint32_t)(DMA_GIF2 | DMA_TCIF2 | DMA_HTIF2 | DMA_TEIF2)) +#define DMA1_Channel3_IT_Mask ((uint32_t)(DMA_GIF3 | DMA_TCIF3 | DMA_HTIF3 | DMA_TEIF3)) +#define DMA1_Channel4_IT_Mask ((uint32_t)(DMA_GIF4 | DMA_TCIF4 | DMA_HTIF4 | DMA_TEIF4)) +#define DMA1_Channel5_IT_Mask ((uint32_t)(DMA_GIF5 | DMA_TCIF5 | DMA_HTIF5 | DMA_TEIF5)) +#define DMA1_Channel6_IT_Mask ((uint32_t)(DMA_GIF6 | DMA_TCIF6 | DMA_HTIF6 | DMA_TEIF6)) +#define DMA1_Channel7_IT_Mask ((uint32_t)(DMA_GIF7 | DMA_TCIF7 | DMA_HTIF7 | DMA_TEIF7)) + +/* DMA2 Channelx interrupt pending bit masks */ +#define DMA2_Channel1_IT_Mask ((uint32_t)(DMA_GIF1 | DMA_TCIF1 | DMA_HTIF1 | DMA_TEIF1)) +#define DMA2_Channel2_IT_Mask ((uint32_t)(DMA_GIF2 | DMA_TCIF2 | DMA_HTIF2 | DMA_TEIF2)) +#define DMA2_Channel3_IT_Mask ((uint32_t)(DMA_GIF3 | DMA_TCIF3 | DMA_HTIF3 | DMA_TEIF3)) +#define DMA2_Channel4_IT_Mask ((uint32_t)(DMA_GIF4 | DMA_TCIF4 | DMA_HTIF4 | DMA_TEIF4)) +#define DMA2_Channel5_IT_Mask ((uint32_t)(DMA_GIF5 | DMA_TCIF5 | DMA_HTIF5 | DMA_TEIF5)) + +/* DMA2 FLAG mask */ +#define FLAG_Mask ((uint32_t)0x10000000) + +/* DMA registers Masks */ +#define CFGR_CLEAR_Mask ((uint32_t)0xFFFF800F) + + +/******************************************************************************** +* Function Name : DMA_DeInit +* Description : Deinitializes the DMAy Channelx registers to their default reset +* values. +* Input : DMAy_Channelx:here y can be 1 or 2 to select the DMA and x can be +* 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the +* DMA Channel. +* Return : None +*********************************************************************************/ +void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx) +{ + DMAy_Channelx->CFGR &= (uint16_t)(~DMA_CFGR1_EN); + DMAy_Channelx->CFGR = 0; + DMAy_Channelx->CNTR = 0; + DMAy_Channelx->PADDR = 0; + DMAy_Channelx->MADDR = 0; + if (DMAy_Channelx == DMA1_Channel1) + { + DMA1->INTFCR |= DMA1_Channel1_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel2) + { + DMA1->INTFCR |= DMA1_Channel2_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel3) + { + DMA1->INTFCR |= DMA1_Channel3_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel4) + { + DMA1->INTFCR |= DMA1_Channel4_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel5) + { + DMA1->INTFCR |= DMA1_Channel5_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel6) + { + DMA1->INTFCR |= DMA1_Channel6_IT_Mask; + } + else if (DMAy_Channelx == DMA1_Channel7) + { + DMA1->INTFCR |= DMA1_Channel7_IT_Mask; + } + else if (DMAy_Channelx == DMA2_Channel1) + { + DMA2->INTFCR |= DMA2_Channel1_IT_Mask; + } + else if (DMAy_Channelx == DMA2_Channel2) + { + DMA2->INTFCR |= DMA2_Channel2_IT_Mask; + } + else if (DMAy_Channelx == DMA2_Channel3) + { + DMA2->INTFCR |= DMA2_Channel3_IT_Mask; + } + else if (DMAy_Channelx == DMA2_Channel4) + { + DMA2->INTFCR |= DMA2_Channel4_IT_Mask; + } + else + { + if (DMAy_Channelx == DMA2_Channel5) + { + DMA2->INTFCR |= DMA2_Channel5_IT_Mask; + } + } +} + + +/******************************************************************************** +* Function Name : DMA_Init +* Description : Initializes the DMAy Channelx according to the specified +* parameters in the DMA_InitStruct. +* Input : DMAy_Channelx:here y can be 1 or 2 to select the DMA and x can be +* 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the +* DMA Channel. +* DMA_InitStruct:pointer to a DMA_InitTypeDef structure that +* contains the configuration information for the +* specified DMA Channel. +* Return : None +*********************************************************************************/ +void DMA_Init(DMA_Channel_TypeDef* DMAy_Channelx, DMA_InitTypeDef* DMA_InitStruct) +{ + uint32_t tmpreg = 0; + + tmpreg = DMAy_Channelx->CFGR; + tmpreg &= CFGR_CLEAR_Mask; + tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode | + DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc | + DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize | + DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M; + + DMAy_Channelx->CFGR = tmpreg; + DMAy_Channelx->CNTR = DMA_InitStruct->DMA_BufferSize; + DMAy_Channelx->PADDR = DMA_InitStruct->DMA_PeripheralBaseAddr; + DMAy_Channelx->MADDR = DMA_InitStruct->DMA_MemoryBaseAddr; +} + + +/******************************************************************************** +* Function Name : DMA_StructInit +* Description : Fills each DMA_InitStruct member with its default value. +* Input : DMA_InitStruct : pointer to a DMA_InitTypeDef structure which will +* 1 to 7 for DMA1 and 1 to 5 for DMA2 to select the +* be initialized. +* Return : None +*********************************************************************************/ +void DMA_StructInit(DMA_InitTypeDef* DMA_InitStruct) +{ + DMA_InitStruct->DMA_PeripheralBaseAddr = 0; + DMA_InitStruct->DMA_MemoryBaseAddr = 0; + DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralSRC; + DMA_InitStruct->DMA_BufferSize = 0; + DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable; + DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; + DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; + DMA_InitStruct->DMA_Mode = DMA_Mode_Normal; + DMA_InitStruct->DMA_Priority = DMA_Priority_Low; + DMA_InitStruct->DMA_M2M = DMA_M2M_Disable; +} + + +/******************************************************************************** +* Function Name : DMA_Cmd +* Description : Enables or disables the specified DMAy Channelx. +* Input : DMAy_Channelx: where y can be 1 or 2 to select the DMA and x can +* be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select +* the DMA Channel. +* NewState : new state of the DMAy Channelx(ENABLE or DISABLE). +* Return : None +*********************************************************************************/ +void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + DMAy_Channelx->CFGR |= DMA_CFGR1_EN; + } + else + { + DMAy_Channelx->CFGR &= (uint16_t)(~DMA_CFGR1_EN); + } +} + +/******************************************************************************** +* Function Name : DMA_ITConfig +* Description : Enables or disables the specified DMAy Channelx interrupts. +* Input : DMAy_Channelx: where y can be 1 or 2 to select the DMA and x can +* be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select +* the DMA Channel. +* DMA_IT : specifies the DMA interrupts sources to be enabled +* or disabled. +* DMA_IT_TC : Transfer complete interrupt mask +* DMA_IT_HT : Half transfer interrupt mask +* DMA_IT_TE : Transfer error interrupt mask +* NewState : new state of the DMAy Channelx(ENABLE or DISABLE). +* Return : None +*********************************************************************************/ +void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, uint32_t DMA_IT, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + DMAy_Channelx->CFGR |= DMA_IT; + } + else + { + DMAy_Channelx->CFGR &= ~DMA_IT; + } +} + +/******************************************************************************** +* Function Name : DMA_SetCurrDataCounter +* Description : Sets the number of data units in the current DMAy Channelx transfer. +* Input : DMAy_Channelx: where y can be 1 or 2 to select the DMA and x can +* be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select +* the DMA Channel. +* DataNumber : The number of data units in the current DMAy Channelx +* transfer. +* Return : None +*********************************************************************************/ +void DMA_SetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx, uint16_t DataNumber) +{ + DMAy_Channelx->CNTR = DataNumber; +} + +/******************************************************************************** +* Function Name : DMA_SetCurrDataCounter +* Description : Sets the number of data units in the current DMAy Channelx transfer. +* Input : DMAy_Channelx: where y can be 1 or 2 to select the DMA and x can +* be 1 to 7 for DMA1 and 1 to 5 for DMA2 to select +* the DMA Channel. +* Return : DataNumber : The number of remaining data units in the current +* DMAy Channelx transfer. +*********************************************************************************/ +uint16_t DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx) +{ + return ((uint16_t)(DMAy_Channelx->CNTR)); +} + + +/******************************************************************************** +* Function Name : DMA_GetFlagStatus +* Description : Checks whether the specified DMAy Channelx flag is set or not. +* Input : DMAy_FLAG: specifies the flag to check. +* DMA1_FLAG_GL1: DMA1 Channel1 global flag. +* DMA1_FLAG_TC1: DMA1 Channel1 transfer complete flag. +* DMA1_FLAG_HT1: DMA1 Channel1 half transfer flag. +* DMA1_FLAG_TE1: DMA1 Channel1 transfer error flag. +* DMA1_FLAG_GL2: DMA1 Channel2 global flag. +* DMA1_FLAG_TC2: DMA1 Channel2 transfer complete flag. +* DMA1_FLAG_HT2: DMA1 Channel2 half transfer flag. +* DMA1_FLAG_TE2: DMA1 Channel2 transfer error flag. +* DMA1_FLAG_GL3: DMA1 Channel3 global flag. +* DMA1_FLAG_TC3: DMA1 Channel3 transfer complete flag. +* DMA1_FLAG_HT3: DMA1 Channel3 half transfer flag. +* DMA1_FLAG_TE3: DMA1 Channel3 transfer error flag. +* DMA1_FLAG_GL4: DMA1 Channel4 global flag. +* DMA1_FLAG_TC4: DMA1 Channel4 transfer complete flag. +* DMA1_FLAG_HT4: DMA1 Channel4 half transfer flag. +* DMA1_FLAG_TE4: DMA1 Channel4 transfer error flag. +* DMA1_FLAG_GL5: DMA1 Channel5 global flag. +* DMA1_FLAG_TC5: DMA1 Channel5 transfer complete flag. +* DMA1_FLAG_HT5: DMA1 Channel5 half transfer flag. +* DMA1_FLAG_TE5: DMA1 Channel5 transfer error flag. +* DMA1_FLAG_GL6: DMA1 Channel6 global flag. +* DMA1_FLAG_TC6: DMA1 Channel6 transfer complete flag. +* DMA1_FLAG_HT6: DMA1 Channel6 half transfer flag. +* DMA1_FLAG_TE6: DMA1 Channel6 transfer error flag. +* DMA1_FLAG_GL7: DMA1 Channel7 global flag. +* DMA1_FLAG_TC7: DMA1 Channel7 transfer complete flag. +* DMA1_FLAG_HT7: DMA1 Channel7 half transfer flag. +* DMA1_FLAG_TE7: DMA1 Channel7 transfer error flag. +* DMA2_FLAG_GL1: DMA2 Channel1 global flag. +* DMA2_FLAG_TC1: DMA2 Channel1 transfer complete flag. +* DMA2_FLAG_HT1: DMA2 Channel1 half transfer flag. +* DMA2_FLAG_TE1: DMA2 Channel1 transfer error flag. +* DMA2_FLAG_GL2: DMA2 Channel2 global flag. +* DMA2_FLAG_TC2: DMA2 Channel2 transfer complete flag. +* DMA2_FLAG_HT2: DMA2 Channel2 half transfer flag. +* DMA2_FLAG_TE2: DMA2 Channel2 transfer error flag. +* DMA2_FLAG_GL3: DMA2 Channel3 global flag. +* DMA2_FLAG_TC3: DMA2 Channel3 transfer complete flag. +* DMA2_FLAG_HT3: DMA2 Channel3 half transfer flag. +* DMA2_FLAG_TE3: DMA2 Channel3 transfer error flag. +* DMA2_FLAG_GL4: DMA2 Channel4 global flag. +* DMA2_FLAG_TC4: DMA2 Channel4 transfer complete flag. +* DMA2_FLAG_HT4: DMA2 Channel4 half transfer flag. +* DMA2_FLAG_TE4: DMA2 Channel4 transfer error flag. +* DMA2_FLAG_GL5: DMA2 Channel5 global flag. +* DMA2_FLAG_TC5: DMA2 Channel5 transfer complete flag. +* DMA2_FLAG_HT5: DMA2 Channel5 half transfer flag. +* DMA2_FLAG_TE5: DMA2 Channel5 transfer error flag. +* Return : The new state of DMAy_FLAG (SET or RESET). +*********************************************************************************/ +FlagStatus DMA_GetFlagStatus(uint32_t DMAy_FLAG) +{ + FlagStatus bitstatus = RESET; + uint32_t tmpreg = 0; + + if ((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET) + { + tmpreg = DMA2->INTFR ; + } + else + { + tmpreg = DMA1->INTFR ; + } + + if ((tmpreg & DMAy_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + + +/******************************************************************************** +* Function Name : DMA_ClearFlag +* Description : Clears the DMAy Channelx's pending flags. +* Input : DMAy_FLAG: specifies the flag to check. +* DMA1_FLAG_GL1: DMA1 Channel1 global flag. +* DMA1_FLAG_TC1: DMA1 Channel1 transfer complete flag. +* DMA1_FLAG_HT1: DMA1 Channel1 half transfer flag. +* DMA1_FLAG_TE1: DMA1 Channel1 transfer error flag. +* DMA1_FLAG_GL2: DMA1 Channel2 global flag. +* DMA1_FLAG_TC2: DMA1 Channel2 transfer complete flag. +* DMA1_FLAG_HT2: DMA1 Channel2 half transfer flag. +* DMA1_FLAG_TE2: DMA1 Channel2 transfer error flag. +* DMA1_FLAG_GL3: DMA1 Channel3 global flag. +* DMA1_FLAG_TC3: DMA1 Channel3 transfer complete flag. +* DMA1_FLAG_HT3: DMA1 Channel3 half transfer flag. +* DMA1_FLAG_TE3: DMA1 Channel3 transfer error flag. +* DMA1_FLAG_GL4: DMA1 Channel4 global flag. +* DMA1_FLAG_TC4: DMA1 Channel4 transfer complete flag. +* DMA1_FLAG_HT4: DMA1 Channel4 half transfer flag. +* DMA1_FLAG_TE4: DMA1 Channel4 transfer error flag. +* DMA1_FLAG_GL5: DMA1 Channel5 global flag. +* DMA1_FLAG_TC5: DMA1 Channel5 transfer complete flag. +* DMA1_FLAG_HT5: DMA1 Channel5 half transfer flag. +* DMA1_FLAG_TE5: DMA1 Channel5 transfer error flag. +* DMA1_FLAG_GL6: DMA1 Channel6 global flag. +* DMA1_FLAG_TC6: DMA1 Channel6 transfer complete flag. +* DMA1_FLAG_HT6: DMA1 Channel6 half transfer flag. +* DMA1_FLAG_TE6: DMA1 Channel6 transfer error flag. +* DMA1_FLAG_GL7: DMA1 Channel7 global flag. +* DMA1_FLAG_TC7: DMA1 Channel7 transfer complete flag. +* DMA1_FLAG_HT7: DMA1 Channel7 half transfer flag. +* DMA1_FLAG_TE7: DMA1 Channel7 transfer error flag. +* DMA2_FLAG_GL1: DMA2 Channel1 global flag. +* DMA2_FLAG_TC1: DMA2 Channel1 transfer complete flag. +* DMA2_FLAG_HT1: DMA2 Channel1 half transfer flag. +* DMA2_FLAG_TE1: DMA2 Channel1 transfer error flag. +* DMA2_FLAG_GL2: DMA2 Channel2 global flag. +* DMA2_FLAG_TC2: DMA2 Channel2 transfer complete flag. +* DMA2_FLAG_HT2: DMA2 Channel2 half transfer flag. +* DMA2_FLAG_TE2: DMA2 Channel2 transfer error flag. +* DMA2_FLAG_GL3: DMA2 Channel3 global flag. +* DMA2_FLAG_TC3: DMA2 Channel3 transfer complete flag. +* DMA2_FLAG_HT3: DMA2 Channel3 half transfer flag. +* DMA2_FLAG_TE3: DMA2 Channel3 transfer error flag. +* DMA2_FLAG_GL4: DMA2 Channel4 global flag. +* DMA2_FLAG_TC4: DMA2 Channel4 transfer complete flag. +* DMA2_FLAG_HT4: DMA2 Channel4 half transfer flag. +* DMA2_FLAG_TE4: DMA2 Channel4 transfer error flag. +* DMA2_FLAG_GL5: DMA2 Channel5 global flag. +* DMA2_FLAG_TC5: DMA2 Channel5 transfer complete flag. +* DMA2_FLAG_HT5: DMA2 Channel5 half transfer flag. +* DMA2_FLAG_TE5: DMA2 Channel5 transfer error flag. +* Return : None +*********************************************************************************/ +void DMA_ClearFlag(uint32_t DMAy_FLAG) +{ + if ((DMAy_FLAG & FLAG_Mask) != (uint32_t)RESET) + { + DMA2->INTFCR = DMAy_FLAG; + } + else + { + DMA1->INTFCR = DMAy_FLAG; + } +} + +/******************************************************************************** +* Function Name : DMA_GetITStatus +* Description : Checks whether the specified DMAy Channelx interrupt has occurred +* or not. +* Input : DMAy_IT: specifies the DMAy interrupt source to check. +* DMA1_IT_GL1: DMA1 Channel1 global flag. +* DMA1_IT_TC1: DMA1 Channel1 transfer complete flag. +* DMA1_IT_HT1: DMA1 Channel1 half transfer flag. +* DMA1_IT_TE1: DMA1 Channel1 transfer error flag. +* DMA1_IT_GL2: DMA1 Channel2 global flag. +* DMA1_IT_TC2: DMA1 Channel2 transfer complete flag. +* DMA1_IT_HT2: DMA1 Channel2 half transfer flag. +* DMA1_IT_TE2: DMA1 Channel2 transfer error flag. +* DMA1_IT_GL3: DMA1 Channel3 global flag. +* DMA1_IT_TC3: DMA1 Channel3 transfer complete flag. +* DMA1_IT_HT3: DMA1 Channel3 half transfer flag. +* DMA1_IT_TE3: DMA1 Channel3 transfer error flag. +* DMA1_IT_GL4: DMA1 Channel4 global flag. +* DMA1_IT_TC4: DMA1 Channel4 transfer complete flag. +* DMA1_IT_HT4: DMA1 Channel4 half transfer flag. +* DMA1_IT_TE4: DMA1 Channel4 transfer error flag. +* DMA1_IT_GL5: DMA1 Channel5 global flag. +* DMA1_IT_TC5: DMA1 Channel5 transfer complete flag. +* DMA1_IT_HT5: DMA1 Channel5 half transfer flag. +* DMA1_IT_TE5: DMA1 Channel5 transfer error flag. +* DMA1_IT_GL6: DMA1 Channel6 global flag. +* DMA1_IT_TC6: DMA1 Channel6 transfer complete flag. +* DMA1_IT_HT6: DMA1 Channel6 half transfer flag. +* DMA1_IT_TE6: DMA1 Channel6 transfer error flag. +* DMA1_IT_GL7: DMA1 Channel7 global flag. +* DMA1_IT_TC7: DMA1 Channel7 transfer complete flag. +* DMA1_IT_HT7: DMA1 Channel7 half transfer flag. +* DMA1_IT_TE7: DMA1 Channel7 transfer error flag. +* DMA2_IT_GL1: DMA2 Channel1 global flag. +* DMA2_IT_TC1: DMA2 Channel1 transfer complete flag. +* DMA2_IT_HT1: DMA2 Channel1 half transfer flag. +* DMA2_IT_TE1: DMA2 Channel1 transfer error flag. +* DMA2_IT_GL2: DMA2 Channel2 global flag. +* DMA2_IT_TC2: DMA2 Channel2 transfer complete flag. +* DMA2_IT_HT2: DMA2 Channel2 half transfer flag. +* DMA2_IT_TE2: DMA2 Channel2 transfer error flag. +* DMA2_IT_GL3: DMA2 Channel3 global flag. +* DMA2_IT_TC3: DMA2 Channel3 transfer complete flag. +* DMA2_IT_HT3: DMA2 Channel3 half transfer flag. +* DMA2_IT_TE3: DMA2 Channel3 transfer error flag. +* DMA2_IT_GL4: DMA2 Channel4 global flag. +* DMA2_IT_TC4: DMA2 Channel4 transfer complete flag. +* DMA2_IT_HT4: DMA2 Channel4 half transfer flag. +* DMA2_IT_TE4: DMA2 Channel4 transfer error flag. +* DMA2_IT_GL5: DMA2 Channel5 global flag. +* DMA2_IT_TC5: DMA2 Channel5 transfer complete flag. +* DMA2_IT_HT5: DMA2 Channel5 half transfer flag. +* DMA2_IT_TE5: DMA2 Channel5 transfer error flag. +* Return : The new state of DMAy_IT (SET or RESET). +*********************************************************************************/ +ITStatus DMA_GetITStatus(uint32_t DMAy_IT) +{ + ITStatus bitstatus = RESET; + uint32_t tmpreg = 0; + + if ((DMAy_IT & FLAG_Mask) != (uint32_t)RESET) + { + tmpreg = DMA2->INTFR; + } + else + { + tmpreg = DMA1->INTFR; + } + + if ((tmpreg & DMAy_IT) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + + +/******************************************************************************** +* Function Name : DMA_ClearITPendingBit +* Description : Clears the DMAy Channelx's interrupt pending bits. +* Input : DMAy_IT: specifies the DMAy interrupt source to check. +* DMA1_IT_GL1: DMA1 Channel1 global flag. +* DMA1_IT_TC1: DMA1 Channel1 transfer complete flag. +* DMA1_IT_HT1: DMA1 Channel1 half transfer flag. +* DMA1_IT_TE1: DMA1 Channel1 transfer error flag. +* DMA1_IT_GL2: DMA1 Channel2 global flag. +* DMA1_IT_TC2: DMA1 Channel2 transfer complete flag. +* DMA1_IT_HT2: DMA1 Channel2 half transfer flag. +* DMA1_IT_TE2: DMA1 Channel2 transfer error flag. +* DMA1_IT_GL3: DMA1 Channel3 global flag. +* DMA1_IT_TC3: DMA1 Channel3 transfer complete flag. +* DMA1_IT_HT3: DMA1 Channel3 half transfer flag. +* DMA1_IT_TE3: DMA1 Channel3 transfer error flag. +* DMA1_IT_GL4: DMA1 Channel4 global flag. +* DMA1_IT_TC4: DMA1 Channel4 transfer complete flag. +* DMA1_IT_HT4: DMA1 Channel4 half transfer flag. +* DMA1_IT_TE4: DMA1 Channel4 transfer error flag. +* DMA1_IT_GL5: DMA1 Channel5 global flag. +* DMA1_IT_TC5: DMA1 Channel5 transfer complete flag. +* DMA1_IT_HT5: DMA1 Channel5 half transfer flag. +* DMA1_IT_TE5: DMA1 Channel5 transfer error flag. +* DMA1_IT_GL6: DMA1 Channel6 global flag. +* DMA1_IT_TC6: DMA1 Channel6 transfer complete flag. +* DMA1_IT_HT6: DMA1 Channel6 half transfer flag. +* DMA1_IT_TE6: DMA1 Channel6 transfer error flag. +* DMA1_IT_GL7: DMA1 Channel7 global flag. +* DMA1_IT_TC7: DMA1 Channel7 transfer complete flag. +* DMA1_IT_HT7: DMA1 Channel7 half transfer flag. +* DMA1_IT_TE7: DMA1 Channel7 transfer error flag. +* DMA2_IT_GL1: DMA2 Channel1 global flag. +* DMA2_IT_TC1: DMA2 Channel1 transfer complete flag. +* DMA2_IT_HT1: DMA2 Channel1 half transfer flag. +* DMA2_IT_TE1: DMA2 Channel1 transfer error flag. +* DMA2_IT_GL2: DMA2 Channel2 global flag. +* DMA2_IT_TC2: DMA2 Channel2 transfer complete flag. +* DMA2_IT_HT2: DMA2 Channel2 half transfer flag. +* DMA2_IT_TE2: DMA2 Channel2 transfer error flag. +* DMA2_IT_GL3: DMA2 Channel3 global flag. +* DMA2_IT_TC3: DMA2 Channel3 transfer complete flag. +* DMA2_IT_HT3: DMA2 Channel3 half transfer flag. +* DMA2_IT_TE3: DMA2 Channel3 transfer error flag. +* DMA2_IT_GL4: DMA2 Channel4 global flag. +* DMA2_IT_TC4: DMA2 Channel4 transfer complete flag. +* DMA2_IT_HT4: DMA2 Channel4 half transfer flag. +* DMA2_IT_TE4: DMA2 Channel4 transfer error flag. +* DMA2_IT_GL5: DMA2 Channel5 global flag. +* DMA2_IT_TC5: DMA2 Channel5 transfer complete flag. +* DMA2_IT_HT5: DMA2 Channel5 half transfer flag. +* DMA2_IT_TE5: DMA2 Channel5 transfer error flag. +* Return : None +*********************************************************************************/ +void DMA_ClearITPendingBit(uint32_t DMAy_IT) +{ + if ((DMAy_IT & FLAG_Mask) != (uint32_t)RESET) + { + DMA2->INTFCR = DMAy_IT; + } + else + { + DMA1->INTFCR = DMAy_IT; + } +} + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_exti.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_exti.c new file mode 100644 index 0000000000..7a0e0a0ad8 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_exti.c @@ -0,0 +1,157 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_exti.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the EXTI firmware functions. +***************************************************************************************/ +#include "ch32v10x_exti.h" + +/* No interrupt selected */ +#define EXTI_LINENONE ((uint32_t)0x00000) + +/******************************************************************************** +* Function Name : EXTI_DeInit +* Description : Deinitializes the EXTI peripheral registers to their default +* reset values. +* Input : None +* Return : None +*********************************************************************************/ +void EXTI_DeInit(void) +{ + EXTI->INTENR = 0x00000000; + EXTI->EVENR = 0x00000000; + EXTI->RTENR = 0x00000000; + EXTI->FTENR = 0x00000000; + EXTI->INTFR = 0x000FFFFF; +} + +/******************************************************************************** +* Function Name : EXTI_Init +* Description : Initializes the EXTI peripheral according to the specified +* parameters in the EXTI_InitStruct. +* Input : EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure +* Return : None +*********************************************************************************/ +void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct) +{ + uint32_t tmp = 0; + + tmp = (uint32_t)EXTI_BASE; + if (EXTI_InitStruct->EXTI_LineCmd != DISABLE) + { + EXTI->INTENR &= ~EXTI_InitStruct->EXTI_Line; + EXTI->EVENR &= ~EXTI_InitStruct->EXTI_Line; + tmp += EXTI_InitStruct->EXTI_Mode; + *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; + EXTI->RTENR &= ~EXTI_InitStruct->EXTI_Line; + EXTI->FTENR &= ~EXTI_InitStruct->EXTI_Line; + if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling) + { + EXTI->RTENR |= EXTI_InitStruct->EXTI_Line; + EXTI->FTENR |= EXTI_InitStruct->EXTI_Line; + } + else + { + tmp = (uint32_t)EXTI_BASE; + tmp += EXTI_InitStruct->EXTI_Trigger; + *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line; + } + } + else + { + tmp += EXTI_InitStruct->EXTI_Mode; + *(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line; + } +} + +/******************************************************************************** +* Function Name : EXTI_StructInit +* Description : Fills each EXTI_InitStruct member with its reset value. +* Input : EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure +* Return : None +*********************************************************************************/ +void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct) +{ + EXTI_InitStruct->EXTI_Line = EXTI_LINENONE; + EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling; + EXTI_InitStruct->EXTI_LineCmd = DISABLE; +} + +/******************************************************************************** +* Function Name : EXTI_GenerateSWInterrupt +* Description : Generates a Software interrupt. +* Input : EXTI_Line: specifies the EXTI lines to be enabled or disabled. +* Return : None +*********************************************************************************/ +void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line) +{ + EXTI->SWIEVR |= EXTI_Line; +} + +/******************************************************************************** +* Function Name : EXTI_GetFlagStatus +* Description : Checks whether the specified EXTI line flag is set or not. +* Input : EXTI_Line: specifies the EXTI lines to be enabled or disabled. +* Return : The new state of EXTI_Line (SET or RESET). +*********************************************************************************/ +FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line) +{ + FlagStatus bitstatus = RESET; + if ((EXTI->INTFR & EXTI_Line) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/******************************************************************************** +* Function Name : EXTI_ClearFlag +* Description : Clears the EXTI's line pending flags. +* Input : EXTI_Line: specifies the EXTI lines to be enabled or disabled. +* Return : None +*********************************************************************************/ +void EXTI_ClearFlag(uint32_t EXTI_Line) +{ + EXTI->INTFR = EXTI_Line; +} + +/******************************************************************************** +* Function Name : EXTI_GetITStatus +* Description : Checks whether the specified EXTI line is asserted or not. +* Input : EXTI_Line: specifies the EXTI lines to be enabled or disabled. +* Return : The new state of EXTI_Line (SET or RESET). +*********************************************************************************/ +ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + + enablestatus = EXTI->INTENR & EXTI_Line; + if (((EXTI->INTFR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/******************************************************************************** +* Function Name : EXTI_ClearITPendingBit +* Description : Clears the EXTI's line pending bits. +* Input : EXTI_Line: specifies the EXTI lines to be enabled or disabled. +* Return : None +*********************************************************************************/ +void EXTI_ClearITPendingBit(uint32_t EXTI_Line) +{ + EXTI->INTFR = EXTI_Line; +} + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_flash.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_flash.c new file mode 100644 index 0000000000..cb9a21f986 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_flash.c @@ -0,0 +1,900 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_flash.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the FLASH firmware functions. +***************************************************************************************/ +#include "ch32v10x_flash.h" + +/* Flash Access Control Register bits */ +#define ACR_LATENCY_Mask ((uint32_t)0x00000038) +#define ACR_HLFCYA_Mask ((uint32_t)0xFFFFFFF7) +#define ACR_PRFTBE_Mask ((uint32_t)0xFFFFFFEF) + +/* Flash Access Control Register bits */ +#define ACR_PRFTBS_Mask ((uint32_t)0x00000020) + +/* Flash Control Register bits */ +#define CR_PG_Set ((uint32_t)0x00000001) +#define CR_PG_Reset ((uint32_t)0x00001FFE) +#define CR_PER_Set ((uint32_t)0x00000002) +#define CR_PER_Reset ((uint32_t)0x00001FFD) +#define CR_MER_Set ((uint32_t)0x00000004) +#define CR_MER_Reset ((uint32_t)0x00001FFB) +#define CR_OPTPG_Set ((uint32_t)0x00000010) +#define CR_OPTPG_Reset ((uint32_t)0x00001FEF) +#define CR_OPTER_Set ((uint32_t)0x00000020) +#define CR_OPTER_Reset ((uint32_t)0x00001FDF) +#define CR_STRT_Set ((uint32_t)0x00000040) +#define CR_LOCK_Set ((uint32_t)0x00000080) +#define CR_PAGE_PG ((uint32_t)0x00010000) +#define CR_PAGE_ER ((uint32_t)0x00020000) +#define CR_BUF_LOAD ((uint32_t)0x00040000) +#define CR_BUF_RST ((uint32_t)0x00080000) + +/* FLASH Status Register bits */ +#define SR_BSY ((uint32_t)0x00000001) +#define SR_PGERR ((uint32_t)0x00000004) +#define SR_WRPRTERR ((uint32_t)0x00000010) +#define SR_EOP ((uint32_t)0x00000020) + +/* FLASH Mask */ +#define RDPRT_Mask ((uint32_t)0x00000002) +#define WRP0_Mask ((uint32_t)0x000000FF) +#define WRP1_Mask ((uint32_t)0x0000FF00) +#define WRP2_Mask ((uint32_t)0x00FF0000) +#define WRP3_Mask ((uint32_t)0xFF000000) +#define OB_USER_BFB2 ((uint16_t)0x0008) + +/* FLASH Keys */ +#define RDP_Key ((uint16_t)0x00A5) +#define FLASH_KEY1 ((uint32_t)0x45670123) +#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) + +/* FLASH BANK address */ +#define FLASH_BANK1_END_ADDRESS ((uint32_t)0x807FFFF) + +/* Delay definition */ +#define EraseTimeout ((uint32_t)0x000B0000) +#define ProgramTimeout ((uint32_t)0x00002000) + +/* Flash Program Vaild Address */ +#define ValidAddrStart (FLASH_BASE) +#define ValidAddrEnd (FLASH_BASE + 0x10000) + +/******************************************************************************** +* Function Name : FLASH_SetLatency +* Description : Sets the code latency value. +* Input : FLASH_Latency: specifies the FLASH Latency value. +* FLASH_Latency_0: FLASH Zero Latency cycle +* FLASH_Latency_1: FLASH One Latency cycle +* FLASH_Latency_2: FLASH Two Latency cycles +* Return : None +*********************************************************************************/ +void FLASH_SetLatency(uint32_t FLASH_Latency) +{ + uint32_t tmpreg = 0; + + tmpreg = FLASH->ACTLR; + tmpreg &= ACR_LATENCY_Mask; + tmpreg |= FLASH_Latency; + FLASH->ACTLR = tmpreg; +} + + +/******************************************************************************** +* Function Name : FLASH_HalfCycleAccessCmd +* Description : Enables or disables the Half cycle flash access. +* Input : FLASH_HalfCycleAccess: specifies the FLASH Half cycle Access mode. +* FLASH_HalfCycleAccess_Enable: FLASH Half Cycle Enable +* FLASH_HalfCycleAccess_Disable: FLASH Half Cycle Disable +* Return : None +*********************************************************************************/ +void FLASH_HalfCycleAccessCmd(uint32_t FLASH_HalfCycleAccess) +{ + FLASH->ACTLR &= ACR_HLFCYA_Mask; + FLASH->ACTLR |= FLASH_HalfCycleAccess; +} + +/******************************************************************************** +* Function Name : FLASH_PrefetchBufferCmd +* Description : Enables or disables the Prefetch Buffer. +* Input : FLASH_PrefetchBuffer: specifies the Prefetch buffer status. +* FLASH_PrefetchBuffer_Enable: FLASH Prefetch Buffer Enable +* FLASH_PrefetchBuffer_Disable: FLASH Prefetch Buffer Disable +* Return : None +*********************************************************************************/ +void FLASH_PrefetchBufferCmd(uint32_t FLASH_PrefetchBuffer) +{ + FLASH->ACTLR &= ACR_PRFTBE_Mask; + FLASH->ACTLR |= FLASH_PrefetchBuffer; +} + + +/******************************************************************************** +* Function Name : FLASH_Unlock +* Description : Unlocks the FLASH Program Erase Controller. +* Input : None +* Return : None +*********************************************************************************/ +void FLASH_Unlock(void) +{ + /* Authorize the FPEC of Bank1 Access */ + FLASH->KEYR = FLASH_KEY1; + FLASH->KEYR = FLASH_KEY2; +} + + +/******************************************************************************** +* Function Name : FLASH_UnlockBank1 +* Description : Unlocks the FLASH Bank1 Program Erase Controller. +* equivalent to FLASH_Unlock function. +* Input : None +* Return : None +*********************************************************************************/ +void FLASH_UnlockBank1(void) +{ + FLASH->KEYR = FLASH_KEY1; + FLASH->KEYR = FLASH_KEY2; +} + +/******************************************************************************** +* Function Name : FLASH_Lock +* Description : Locks the FLASH Program Erase Controller. +* Input : None +* Return : None +*********************************************************************************/ +void FLASH_Lock(void) +{ + FLASH->CTLR |= CR_LOCK_Set; +} + +/******************************************************************************** +* Function Name : FLASH_LockBank1 +* Description : Locks the FLASH Bank1 Program Erase Controller. +* Input : None +* Return : None +*********************************************************************************/ +void FLASH_LockBank1(void) +{ + FLASH->CTLR |= CR_LOCK_Set; +} + + +/******************************************************************************** +* Function Name : FLASH_ErasePage +* Description : Erases a specified FLASH page. +* Input : Page_Address: The page address to be erased. +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_ErasePage(uint32_t Page_Address) +{ + FLASH_Status status = FLASH_COMPLETE; + + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + FLASH->CTLR|= CR_PER_Set; + FLASH->ADDR = Page_Address; + FLASH->CTLR|= CR_STRT_Set; + + status = FLASH_WaitForLastOperation(EraseTimeout); + + FLASH->CTLR &= CR_PER_Reset; + } + + *(__IO uint32_t*)0x40022034 = *(__IO uint32_t*)((Page_Address & 0xFFFFFFFC) ^ 0x00001000); + + return status; +} + + +/******************************************************************************** +* Function Name : FLASH_EraseAllPages +* Description : Erases all FLASH pages. +* Input : None +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_EraseAllPages(void) +{ + FLASH_Status status = FLASH_COMPLETE; + + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + FLASH->CTLR |= CR_MER_Set; + FLASH->CTLR |= CR_STRT_Set; + + status = FLASH_WaitForLastOperation(EraseTimeout); + + FLASH->CTLR &= CR_MER_Reset; + } + + return status; +} + +/******************************************************************************** +* Function Name : FLASH_EraseAllBank1Pages +* Description : Erases all Bank1 FLASH pages. +* Input : None +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_EraseAllBank1Pages(void) +{ + FLASH_Status status = FLASH_COMPLETE; + status = FLASH_WaitForLastBank1Operation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + FLASH->CTLR |= CR_MER_Set; + FLASH->CTLR |= CR_STRT_Set; + + status = FLASH_WaitForLastBank1Operation(EraseTimeout); + + FLASH->CTLR &= CR_MER_Reset; + } + return status; +} + +/******************************************************************************** +* Function Name : FLASH_EraseOptionBytes +* Description : Erases the FLASH option bytes. +* Input : None +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_EraseOptionBytes(void) +{ + uint16_t rdptmp = RDP_Key; + + FLASH_Status status = FLASH_COMPLETE; + if(FLASH_GetReadOutProtectionStatus() != RESET) + { + rdptmp = 0x00; + } + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + FLASH->OBKEYR = FLASH_KEY1; + FLASH->OBKEYR = FLASH_KEY2; + + FLASH->CTLR |= CR_OPTER_Set; + FLASH->CTLR |= CR_STRT_Set; + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status == FLASH_COMPLETE) + { + FLASH->CTLR &= CR_OPTER_Reset; + FLASH->CTLR |= CR_OPTPG_Set; + OB->RDPR = (uint16_t)rdptmp; + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status != FLASH_TIMEOUT) + { + FLASH->CTLR &= CR_OPTPG_Reset; + } + } + else + { + if (status != FLASH_TIMEOUT) + { + FLASH->CTLR &= CR_OPTPG_Reset; + } + } + } + return status; +} + +/******************************************************************************** +* Function Name : FLASH_ProgramWord +* Description : Programs a word at a specified address. +* Input : Address: specifies the address to be programmed. +* Data: specifies the data to be programmed. +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + __IO uint32_t tmp = 0; + + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + FLASH->CTLR |= CR_PG_Set; + + *(__IO uint16_t*)Address = (uint16_t)Data; + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + tmp = Address + 2; + *(__IO uint16_t*) tmp = Data >> 16; + status = FLASH_WaitForLastOperation(ProgramTimeout); + FLASH->CTLR &= CR_PG_Reset; + } + else + { + FLASH->CTLR &= CR_PG_Reset; + } + } + + *(__IO uint32_t*)0x40022034 = *(__IO uint32_t*)((Address & 0xFFFFFFFC) ^ 0x00001000); + + return status; +} + +/******************************************************************************** +* Function Name : FLASH_ProgramHalfWord +* Description : Programs a half word at a specified address. +* Input : Address: specifies the address to be programmed. +* Data: specifies the data to be programmed. +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status == FLASH_COMPLETE) + { + FLASH->CTLR |= CR_PG_Set; + *(__IO uint16_t*)Address = Data; + status = FLASH_WaitForLastOperation(ProgramTimeout); + FLASH->CTLR &= CR_PG_Reset; + } + + *(__IO uint32_t*)0x40022034 = *(__IO uint32_t*)((Address & 0xFFFFFFFC) ^ 0x00001000); + + return status; +} + +/******************************************************************************** +* Function Name : FLASH_ProgramOptionByteData +* Description : Programs a half word at a specified Option Byte Data address. +* Input : Address: specifies the address to be programmed. +* Data: specifies the data to be programmed. +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data) +{ + FLASH_Status status = FLASH_COMPLETE; + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status == FLASH_COMPLETE) + { + FLASH->OBKEYR = FLASH_KEY1; + FLASH->OBKEYR = FLASH_KEY2; + FLASH->CTLR |= CR_OPTPG_Set; + *(__IO uint16_t*)Address = Data; + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status != FLASH_TIMEOUT) + { + FLASH->CTLR &= CR_OPTPG_Reset; + } + } + + *(__IO uint32_t*)0x40022034 = *(__IO uint32_t*)((Address & 0xFFFFFFFC) ^ 0x00001000); + + return status; +} + +/******************************************************************************** +* Function Name : FLASH_EnableWriteProtection +* Description : Write protects the desired pages +* Input : FLASH_Pages: specifies the address of the pages to be write protected. +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages) +{ + uint16_t WRP0_Data = 0xFFFF, WRP1_Data = 0xFFFF, WRP2_Data = 0xFFFF, WRP3_Data = 0xFFFF; + + FLASH_Status status = FLASH_COMPLETE; + + FLASH_Pages = (uint32_t)(~FLASH_Pages); + WRP0_Data = (uint16_t)(FLASH_Pages & WRP0_Mask); + WRP1_Data = (uint16_t)((FLASH_Pages & WRP1_Mask) >> 8); + WRP2_Data = (uint16_t)((FLASH_Pages & WRP2_Mask) >> 16); + WRP3_Data = (uint16_t)((FLASH_Pages & WRP3_Mask) >> 24); + + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + FLASH->OBKEYR = FLASH_KEY1; + FLASH->OBKEYR = FLASH_KEY2; + FLASH->CTLR |= CR_OPTPG_Set; + if(WRP0_Data != 0xFF) + { + OB->WRPR0 = WRP0_Data; + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + if((status == FLASH_COMPLETE) && (WRP1_Data != 0xFF)) + { + OB->WRPR1 = WRP1_Data; + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + if((status == FLASH_COMPLETE) && (WRP2_Data != 0xFF)) + { + OB->WRPR2 = WRP2_Data; + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + + if((status == FLASH_COMPLETE)&& (WRP3_Data != 0xFF)) + { + OB->WRPR3 = WRP3_Data; + status = FLASH_WaitForLastOperation(ProgramTimeout); + } + + if(status != FLASH_TIMEOUT) + { + FLASH->CTLR &= CR_OPTPG_Reset; + } + } + return status; +} + +/******************************************************************************** +* Function Name : FLASH_ReadOutProtection +* Description : Enables or disables the read out protection. +* Input : Newstate: new state of the ReadOut Protection(ENABLE or DISABLE). +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState) +{ + FLASH_Status status = FLASH_COMPLETE; + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + FLASH->OBKEYR = FLASH_KEY1; + FLASH->OBKEYR = FLASH_KEY2; + FLASH->CTLR |= CR_OPTER_Set; + FLASH->CTLR |= CR_STRT_Set; + status = FLASH_WaitForLastOperation(EraseTimeout); + if(status == FLASH_COMPLETE) + { + FLASH->CTLR &= CR_OPTER_Reset; + FLASH->CTLR |= CR_OPTPG_Set; + if(NewState != DISABLE) + { + OB->RDPR = 0x00; + } + else + { + OB->RDPR = RDP_Key; + } + status = FLASH_WaitForLastOperation(EraseTimeout); + + if(status != FLASH_TIMEOUT) + { + FLASH->CTLR &= CR_OPTPG_Reset; + } + } + else + { + if(status != FLASH_TIMEOUT) + { + FLASH->CTLR &= CR_OPTER_Reset; + } + } + } + return status; +} + +/******************************************************************************** +* Function Name : FLASH_UserOptionByteConfig +* Description : Programs the FLASH User Option Byte: IWDG_SW / RST_STOP / RST_STDBY. +* Input : OB_IWDG: Selects the IWDG mode +* OB_IWDG_SW: Software IWDG selected +* OB_IWDG_HW: Hardware IWDG selected +* OB_STOP: Reset event when entering STOP mode. +* OB_STOP_NoRST: No reset generated when entering in STOP +* OB_STOP_RST: Reset generated when entering in STOP +* OB_STDBY: Reset event when entering Standby mode. +* OB_STDBY_NoRST: No reset generated when entering in STANDBY +* OB_STDBY_RST: Reset generated when entering in STANDBY +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_UserOptionByteConfig(uint16_t OB_IWDG, uint16_t OB_STOP, uint16_t OB_STDBY) +{ + FLASH_Status status = FLASH_COMPLETE; + + FLASH->OBKEYR = FLASH_KEY1; + FLASH->OBKEYR = FLASH_KEY2; + status = FLASH_WaitForLastOperation(ProgramTimeout); + + if(status == FLASH_COMPLETE) + { + FLASH->CTLR |= CR_OPTPG_Set; + + OB->USER = OB_IWDG | (uint16_t)(OB_STOP | (uint16_t)(OB_STDBY | ((uint16_t)0xF8))); + + status = FLASH_WaitForLastOperation(ProgramTimeout); + if(status != FLASH_TIMEOUT) + { + FLASH->CTLR &= CR_OPTPG_Reset; + } + } + return status; +} + +/******************************************************************************** +* Function Name : FLASH_GetUserOptionByte +* Description : Returns the FLASH User Option Bytes values. +* Input : None +* Return : The FLASH User Option Bytes values:IWDG_SW(Bit0), RST_STOP(Bit1) +* and RST_STDBY(Bit2). +*********************************************************************************/ +uint32_t FLASH_GetUserOptionByte(void) +{ + return (uint32_t)(FLASH->OBR >> 2); +} + + +/******************************************************************************** +* Function Name : FLASH_GetWriteProtectionOptionByte +* Description : Returns the FLASH Write Protection Option Bytes Register value. +* Input : None +* Return : The FLASH Write Protection Option Bytes Register value +*********************************************************************************/ +uint32_t FLASH_GetWriteProtectionOptionByte(void) +{ + return (uint32_t)(FLASH->WPR); +} + + +/******************************************************************************** +* Function Name : FLASH_GetReadOutProtectionStatus +* Description : Checks whether the FLASH Read Out Protection Status is set or not. +* Input : None +* Return : FLASH ReadOut Protection Status(SET or RESET) +*********************************************************************************/ +FlagStatus FLASH_GetReadOutProtectionStatus(void) +{ + FlagStatus readoutstatus = RESET; + if ((FLASH->OBR & RDPRT_Mask) != (uint32_t)RESET) + { + readoutstatus = SET; + } + else + { + readoutstatus = RESET; + } + return readoutstatus; +} + +/******************************************************************************** +* Function Name : FLASH_GetPrefetchBufferStatus +* Description : Checks whether the FLASH Prefetch Buffer status is set or not. +* Input : None +* Return : FLASH Prefetch Buffer Status (SET or RESET). +*********************************************************************************/ +FlagStatus FLASH_GetPrefetchBufferStatus(void) +{ + FlagStatus bitstatus = RESET; + + if ((FLASH->ACTLR & ACR_PRFTBS_Mask) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/******************************************************************************** +* Function Name : FLASH_ITConfig +* Description : Enables or disables the specified FLASH interrupts. +* Input : FLASH_IT: specifies the FLASH interrupt sources to be enabled or disabled. +* FLASH_IT_ERROR: FLASH Error Interrupt +* FLASH_IT_EOP: FLASH end of operation Interrupt +* NewState: new state of the specified Flash interrupts(ENABLE or DISABLE). +* Return : FLASH Prefetch Buffer Status (SET or RESET). +*********************************************************************************/ +void FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState) +{ + if(NewState != DISABLE) + { + FLASH->CTLR |= FLASH_IT; + } + else + { + FLASH->CTLR &= ~(uint32_t)FLASH_IT; + } +} + + +/******************************************************************************** +* Function Name : FLASH_GetFlagStatus +* Description : Checks whether the specified FLASH flag is set or not. +* Input : FLASH_FLAG: specifies the FLASH flag to check. +* FLASH_FLAG_BSY: FLASH Busy flag +* FLASH_FLAG_PGERR: FLASH Program error flag +* FLASH_FLAG_WRPRTERR: FLASH Write protected error flag +* FLASH_FLAG_EOP: FLASH End of Operation flag +* FLASH_FLAG_OPTERR: FLASH Option Byte error flag +* Return : The new state of FLASH_FLAG (SET or RESET). +*********************************************************************************/ +FlagStatus FLASH_GetFlagStatus(uint32_t FLASH_FLAG) +{ + FlagStatus bitstatus = RESET; + + if(FLASH_FLAG == FLASH_FLAG_OPTERR) + { + if((FLASH->OBR & FLASH_FLAG_OPTERR) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((FLASH->STATR & FLASH_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + return bitstatus; +} + +/******************************************************************************** +* Function Name : FLASH_ClearFlag +* Description : Clears the FLASH's pending flags. +* Input : FLASH_FLAG: specifies the FLASH flags to clear. +* FLASH_FLAG_PGERR: FLASH Program error flag +* FLASH_FLAG_WRPRTERR: FLASH Write protected error flag +* FLASH_FLAG_EOP: FLASH End of Operation flag +* Return : None +*********************************************************************************/ +void FLASH_ClearFlag(uint32_t FLASH_FLAG) +{ + + FLASH->STATR = FLASH_FLAG; + +} + +/******************************************************************************** +* Function Name : FLASH_GetStatus +* Description : Returns the FLASH Status. +* Input : None +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP or FLASH_COMPLETE. +*********************************************************************************/ +FLASH_Status FLASH_GetStatus(void) +{ + FLASH_Status flashstatus = FLASH_COMPLETE; + + if((FLASH->STATR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY) + { + flashstatus = FLASH_BUSY; + } + else + { + if((FLASH->STATR & FLASH_FLAG_PGERR) != 0) + { + flashstatus = FLASH_ERROR_PG; + } + else + { + if((FLASH->STATR & FLASH_FLAG_WRPRTERR) != 0 ) + { + flashstatus = FLASH_ERROR_WRP; + } + else + { + flashstatus = FLASH_COMPLETE; + } + } + } + return flashstatus; +} + +/******************************************************************************** +* Function Name : FLASH_GetBank1Status +* Description : Returns the FLASH Bank1 Status. +* Input : None +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP or FLASH_COMPLETE. +*********************************************************************************/ +FLASH_Status FLASH_GetBank1Status(void) +{ + FLASH_Status flashstatus = FLASH_COMPLETE; + + if((FLASH->STATR & FLASH_FLAG_BANK1_BSY) == FLASH_FLAG_BSY) + { + flashstatus = FLASH_BUSY; + } + else + { + if((FLASH->STATR & FLASH_FLAG_BANK1_PGERR) != 0) + { + flashstatus = FLASH_ERROR_PG; + } + else + { + if((FLASH->STATR & FLASH_FLAG_BANK1_WRPRTERR) != 0 ) + { + flashstatus = FLASH_ERROR_WRP; + } + else + { + flashstatus = FLASH_COMPLETE; + } + } + } + return flashstatus; +} + + +/******************************************************************************** +* Function Name : FLASH_WaitForLastOperation +* Description : Waits for a Flash operation to complete or a TIMEOUT to occur. +* Input : Timeout: FLASH programming Timeout +* Return : FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG, +* FLASH_ERROR_WRP or FLASH_COMPLETE. +*********************************************************************************/ +FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout) +{ + FLASH_Status status = FLASH_COMPLETE; + + status = FLASH_GetBank1Status(); + while((status == FLASH_BUSY) && (Timeout != 0x00)) + { + status = FLASH_GetBank1Status(); + Timeout--; + } + if(Timeout == 0x00 ) + { + status = FLASH_TIMEOUT; + } + return status; +} + + +/******************************************************************************** +* Function Name : FLASH_WaitForLastBank1Operation +* Description : Waits for a Flash operation on Bank1 to complete or a TIMEOUT to occur. +* Input : Timeout: FLASH programming Timeout +* Return : FLASH Status: The returned value can be: FLASH_ERROR_PG, +* FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. +*********************************************************************************/ +FLASH_Status FLASH_WaitForLastBank1Operation(uint32_t Timeout) +{ + FLASH_Status status = FLASH_COMPLETE; + + status = FLASH_GetBank1Status(); + while((status == FLASH_FLAG_BANK1_BSY) && (Timeout != 0x00)) + { + status = FLASH_GetBank1Status(); + Timeout--; + } + if(Timeout == 0x00 ) + { + status = FLASH_TIMEOUT; + } + return status; +} + +/******************************************************************************** +* Function Name : FLASH_Unlock_Fast +* Description : Unlocks the Fast Program Erase Mode. +* Input : None +* Return : None +*********************************************************************************/ +void FLASH_Unlock_Fast(void) +{ + /* Authorize the FPEC of Bank1 Access */ + FLASH->KEYR = FLASH_KEY1; + FLASH->KEYR = FLASH_KEY2; + + /* Fast program mode unlock */ + FLASH->MODEKEYR = FLASH_KEY1; + FLASH->MODEKEYR = FLASH_KEY2; +} + +/******************************************************************************** +* Function Name : FLASH_Lock_Fast +* Description : Locks the Fast Program Erase Mode. +* Input : None +* Return : None +*********************************************************************************/ +void FLASH_Lock_Fast(void) +{ + FLASH->CTLR |= CR_LOCK_Set; +} + +/******************************************************************************** +* Function Name : FLASH_BufReset +* Description : Flash Buffer reset. +* Input : None +* Return : None +*********************************************************************************/ +void FLASH_BufReset(void) +{ + FLASH->CTLR |= CR_PAGE_PG; + FLASH->CTLR |= CR_BUF_RST; + while(FLASH->STATR & SR_BSY); + FLASH->CTLR &= ~CR_PAGE_PG; +} + +/******************************************************************************** +* Function Name : FLASH_BufLoad +* Description : Flash Buffer load(128 bit). +* Input : None +* Return : None +*********************************************************************************/ +void FLASH_BufLoad(uint32_t Address, uint32_t Data0, uint32_t Data1, uint32_t Data2, uint32_t Data3) +{ + if((Address>=ValidAddrStart) && (AddressCTLR |= CR_PAGE_PG; + *(__IO uint32_t*)(Address+0x00) = Data0; + *(__IO uint32_t*)(Address+0x04) = Data1; + *(__IO uint32_t*)(Address+0x08) = Data2; + *(__IO uint32_t*)(Address+0x0C) = Data3; + FLASH->CTLR |= CR_BUF_LOAD; + while(FLASH->STATR & SR_BSY); + FLASH->CTLR &= ~CR_PAGE_PG; + + *(__IO uint32_t*)0x40022034 = *(__IO uint32_t*)((Address & 0xFFFFFFFC) ^ 0x00001000); + } +} + +/******************************************************************************** +* Function Name : FLASH_ErasePage_Fast +* Description : Erases a specified FLASH page (1page = 128Byte). +* Input : Page_Address: The page address to be erased. +* Return : None +*********************************************************************************/ +void FLASH_ErasePage_Fast(uint32_t Page_Address) +{ + if((Page_Address>=ValidAddrStart) && (Page_AddressCTLR |= CR_PAGE_ER; + FLASH->ADDR = Page_Address; + FLASH->CTLR |= CR_STRT_Set; + while(FLASH->STATR & SR_BSY); + FLASH->CTLR &= ~CR_PAGE_ER; + + *(__IO uint32_t*)0x40022034 = *(__IO uint32_t*)((Page_Address & 0xFFFFFFFC) ^ 0x00001000); + } +} + +/******************************************************************************** +* Function Name : FLASH_ProgramPage_Fast +* Description : Program a specified FLASH page (1page = 128Byte). +* Input : Page_Address: The page address to be programed. +* Return : None +*********************************************************************************/ +void FLASH_ProgramPage_Fast(uint32_t Page_Address) +{ + if((Page_Address>=ValidAddrStart) && (Page_AddressCTLR |= CR_PAGE_PG; + FLASH->ADDR = Page_Address; + FLASH->CTLR |= CR_STRT_Set; + while(FLASH->STATR & SR_BSY); + FLASH->CTLR &= ~CR_PAGE_PG; + + *(__IO uint32_t*)0x40022034 = *(__IO uint32_t*)((Page_Address & 0xFFFFFFFC) ^ 0x00001000); + } +} diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_gpio.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_gpio.c new file mode 100644 index 0000000000..e6e688ebbb --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_gpio.c @@ -0,0 +1,472 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_gpio.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the GPIO firmware functions. +*******************************************************************************/ +#include "ch32v10x_gpio.h" +#include "ch32v10x_rcc.h" + +/* MASK */ +#define ECR_PORTPINCONFIG_MASK ((uint16_t)0xFF80) +#define LSB_MASK ((uint16_t)0xFFFF) +#define DBGAFR_POSITION_MASK ((uint32_t)0x000F0000) +#define DBGAFR_SWJCFG_MASK ((uint32_t)0xF0FFFFFF) +#define DBGAFR_LOCATION_MASK ((uint32_t)0x00200000) +#define DBGAFR_NUMBITS_MASK ((uint32_t)0x00100000) + +/******************************************************************************* +* Function Name : GPIO_DeInit +* Description : Deinitializes the GPIOx peripheral registers to their default reset values. +* Input : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* Return : None +*******************************************************************************/ +void GPIO_DeInit(GPIO_TypeDef* GPIOx) +{ + if (GPIOx == GPIOA) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE); + } + else if (GPIOx == GPIOB) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE); + } + else if (GPIOx == GPIOC) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE); + } + else if (GPIOx == GPIOD) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE); + } + else if (GPIOx == GPIOE) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE); + } + else if (GPIOx == GPIOF) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE); + } + else + { + if (GPIOx == GPIOG) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE); + } + } +} + +/******************************************************************************* +* Function Name : GPIO_AFIODeInit +* Description : Deinitializes the Alternate Functions (remap, event control +* and EXTI configuration) registers to their default reset values. +* Input : None +* Return : None +*******************************************************************************/ +void GPIO_AFIODeInit(void) +{ + RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE); +} + +/******************************************************************************* +* Function Name : GPIO_Init +* Description : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* Input : GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that +* contains the configuration information for the specified GPIO peripheral. +* Return : None +*******************************************************************************/ +void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) +{ + uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00; + uint32_t tmpreg = 0x00, pinmask = 0x00; + + currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F); + + if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00) + { + currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed; + } + + if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00) + { + tmpreg = GPIOx->CFGLR; + + for (pinpos = 0x00; pinpos < 0x08; pinpos++) + { + pos = ((uint32_t)0x01) << pinpos; + currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; + + if (currentpin == pos) + { + pos = pinpos << 2; + pinmask = ((uint32_t)0x0F) << pos; + tmpreg &= ~pinmask; + tmpreg |= (currentmode << pos); + + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD) + { + GPIOx->BCR = (((uint32_t)0x01) << pinpos); + } + else + { + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU) + { + GPIOx->BSHR = (((uint32_t)0x01) << pinpos); + } + } + } + } + GPIOx->CFGLR = tmpreg; + } + + if (GPIO_InitStruct->GPIO_Pin > 0x00FF) + { + tmpreg = GPIOx->CFGHR; + + for (pinpos = 0x00; pinpos < 0x08; pinpos++) + { + pos = (((uint32_t)0x01) << (pinpos + 0x08)); + currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos); + + if (currentpin == pos) + { + pos = pinpos << 2; + pinmask = ((uint32_t)0x0F) << pos; + tmpreg &= ~pinmask; + tmpreg |= (currentmode << pos); + + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD) + { + GPIOx->BCR = (((uint32_t)0x01) << (pinpos + 0x08)); + } + + if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU) + { + GPIOx->BSHR = (((uint32_t)0x01) << (pinpos + 0x08)); + } + } + } + GPIOx->CFGHR = tmpreg; + } +} + +/******************************************************************************* +* Function Name : GPIO_StructInit +* Description : Fills each GPIO_InitStruct member with its default +* Input : GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure +* which will be initialized. +* Return : None +*******************************************************************************/ +void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct) +{ + GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All; + GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING; +} + +/******************************************************************************* +* Function Name : GPIO_ReadInputDataBit +* Description : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* Input : GPIO_Pin: specifies the port bit to read. +* This parameter can be GPIO_Pin_x where x can be (0..15). +* Return : The input port pin value. +*******************************************************************************/ +uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint8_t bitstatus = 0x00; + + if ((GPIOx->INDR & GPIO_Pin) != (uint32_t)Bit_RESET) + { + bitstatus = (uint8_t)Bit_SET; + } + else + { + bitstatus = (uint8_t)Bit_RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : GPIO_ReadInputData +* Description : Reads the specified GPIO input data port. +* Input : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* Return : The output port pin value. +*******************************************************************************/ +uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx) +{ + return ((uint16_t)GPIOx->INDR); +} + +/******************************************************************************* +* Function Name : GPIO_ReadOutputDataBit +* Description : Reads the specified output data port bit. +* Input : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* GPIO_Pin: specifies the port bit to read. +* This parameter can be GPIO_Pin_x where x can be (0..15). +* Return : The output port pin value. +*******************************************************************************/ +uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint8_t bitstatus = 0x00; + + if ((GPIOx->OUTDR & GPIO_Pin) != (uint32_t)Bit_RESET) + { + bitstatus = (uint8_t)Bit_SET; + } + else + { + bitstatus = (uint8_t)Bit_RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : GPIO_ReadOutputData +* Description : Reads the specified GPIO output data port. +* Input : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* Return : GPIO output port pin value. +*******************************************************************************/ +uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) +{ + return ((uint16_t)GPIOx->OUTDR); +} + +/******************************************************************************* +* Function Name : GPIO_SetBits +* Description : Sets the selected data port bits. +* Input : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* GPIO_Pin: specifies the port bits to be written. +* This parameter can be any combination of GPIO_Pin_x where x can be (0..15). +* Return : None +*******************************************************************************/ +void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + GPIOx->BSHR = GPIO_Pin; +} + +/******************************************************************************* +* Function Name : GPIO_ResetBits +* Description : Clears the selected data port bits. +* Input : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* GPIO_Pin: specifies the port bits to be written. +* This parameter can be any combination of GPIO_Pin_x where x can be (0..15). +* Return : None +*******************************************************************************/ +void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + GPIOx->BCR = GPIO_Pin; +} + +/******************************************************************************* +* Function Name : GPIO_WriteBit +* Description : Sets or clears the selected data port bit. +* Input : GPIO_Pin: specifies the port bit to be written. +* This parameter can be one of GPIO_Pin_x where x can be (0..15). +* BitVal: specifies the value to be written to the selected bit. +* Bit_SetL: to clear the port pin. +* Bit_SetH: to set the port pin. +* Return : None +*******************************************************************************/ +void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal) +{ + if (BitVal != Bit_RESET) + { + GPIOx->BSHR = GPIO_Pin; + } + else + { + GPIOx->BCR = GPIO_Pin; + } +} + +/******************************************************************************* +* Function Name : GPIO_Write +* Description : Writes data to the specified GPIO data port. +* Input : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* PortVal: specifies the value to be written to the port output data register. +* Return : None +*******************************************************************************/ +void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal) +{ + GPIOx->OUTDR = PortVal; +} + +/******************************************************************************* +* Function Name : GPIO_PinLockConfig +* Description : Locks GPIO Pins configuration registers. +* Input : GPIOx: where x can be (A..G) to select the GPIO peripheral. +* GPIO_Pin: specifies the port bit to be written. +* This parameter can be any combination of GPIO_Pin_x where x can be (0..15). +* Return : None +*******************************************************************************/ +void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) +{ + uint32_t tmp = 0x00010000; + + tmp |= GPIO_Pin; + GPIOx->LCKR = tmp; + GPIOx->LCKR = GPIO_Pin; + GPIOx->LCKR = tmp; + tmp = GPIOx->LCKR; + tmp = GPIOx->LCKR; +} + +/******************************************************************************* +* Function Name : GPIO_EventOutputConfig +* Description : Selects the GPIO pin used as Event output. +* Input : GPIO_PortSource: selects the GPIO port to be used as source +* for Event output. +* This parameter can be GPIO_PortSourceGPIOx where x can be (A..E). +* GPIO_PinSource: specifies the pin for the Event output. +* This parameter can be GPIO_PinSourcex where x can be (0..15). +* Return : None +*******************************************************************************/ +void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) +{ + uint32_t tmpreg = 0x00; + + tmpreg = AFIO->ECR; + tmpreg &= ECR_PORTPINCONFIG_MASK; + tmpreg |= (uint32_t)GPIO_PortSource << 0x04; + tmpreg |= GPIO_PinSource; + AFIO->ECR = tmpreg; +} + +/******************************************************************************* +* Function Name : GPIO_EventOutputCmd +* Description : Enables or disables the Event Output. +* Input : NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void GPIO_EventOutputCmd(FunctionalState NewState) +{ + if(NewState) + { + AFIO->ECR |= (1<<7); + } + else + { + AFIO->ECR &= ~(1<<7); + } +} + +/******************************************************************************* +* Function Name : GPIO_PinRemapConfig +* Description : Changes the mapping of the specified pin. +* Input : GPIO_Remap: selects the pin to remap. +* GPIO_Remap_SPI1: SPI1 Alternate Function mapping +* GPIO_Remap_I2C1: I2C1 Alternate Function mapping +* GPIO_Remap_USART1: USART1 Alternate Function mapping +* GPIO_Remap_USART2: USART2 Alternate Function mapping +* GPIO_PartialRemap_USART3: USART3 Partial Alternate Function mapping +* GPIO_FullRemap_USART3: USART3 Full Alternate Function mapping +* GPIO_PartialRemap_TIM1: TIM1 Partial Alternate Function mapping +* GPIO_FullRemap_TIM1: TIM1 Full Alternate Function mapping +* GPIO_PartialRemap1_TIM2: TIM2 Partial1 Alternate Function mapping +* GPIO_PartialRemap2_TIM2: TIM2 Partial2 Alternate Function mapping +* GPIO_FullRemap_TIM2: TIM2 Full Alternate Function mapping +* GPIO_PartialRemap_TIM3: TIM3 Partial Alternate Function mapping +* GPIO_FullRemap_TIM3: TIM3 Full Alternate Function mapping +* GPIO_Remap_TIM4: TIM4 Alternate Function mapping +* GPIO_Remap1_CAN1: CAN1 Alternate Function mapping +* GPIO_Remap2_CAN1: CAN1 Alternate Function mapping +* GPIO_Remap_PD01: PD01 Alternate Function mapping +* GPIO_Remap_ADC1_ETRGINJ: ADC1 External Trigger Injected Conversion remapping +* GPIO_Remap_ADC1_ETRGREG: ADC1 External Trigger Regular Conversion remapping +* GPIO_Remap_SWJ_NoJTRST: Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST +* GPIO_Remap_SWJ_JTAGDisable: JTAG-DP Disabled and SW-DP Enabled +* GPIO_Remap_SWJ_Disable: Full SWJ Disabled (JTAG-DP + SW-DP) +* GPIO_Remap_TIM2ITR1_PTP_SOF: Ethernet PTP output or USB OTG SOF (Start of Frame) +* connected to TIM2 Internal Trigger 1 for calibration (only for Connectivity line devices).If the +* is enabled the TIM2 ITR1 is connected to Ethernet PTP output. When Reset TIM2 ITR1 is connected +* to USB OTG SOF output. +* GPIO_Remap_TIM1_DMA: TIM1 DMA requests mapping (only for Value line devices) +* GPIO_Remap_TIM67_DAC_DMA: TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices) +* GPIO_Remap_MISC: Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping, +* only for High density Value line devices) +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState) +{ + uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00; + + if((GPIO_Remap & 0x80000000) == 0x80000000) + { + tmpreg = AFIO->PCFR2; + } + else + { + tmpreg = AFIO->PCFR1; + } + + tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10; + tmp = GPIO_Remap & LSB_MASK; + + if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) + { + tmpreg &= DBGAFR_SWJCFG_MASK; + AFIO->PCFR1 &= DBGAFR_SWJCFG_MASK; + } + else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK) + { + tmp1 = ((uint32_t)0x03) << tmpmask; + tmpreg &= ~tmp1; + tmpreg |= ~DBGAFR_SWJCFG_MASK; + } + else + { + tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10)); + tmpreg |= ~DBGAFR_SWJCFG_MASK; + } + + if (NewState != DISABLE) + { + tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10)); + } + + if((GPIO_Remap & 0x80000000) == 0x80000000) + { + AFIO->PCFR2 = tmpreg; + } + else + { + AFIO->PCFR1 = tmpreg; + } +} + +/******************************************************************************* +* Function Name : GPIO_EXTILineConfig +* Description : Selects the GPIO pin used as EXTI Line. +* Input : GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines. +* This parameter can be GPIO_PortSourceGPIOx where x can be (A..G). +* GPIO_PinSource: specifies the EXTI line to be configured. +* This parameter can be GPIO_PinSourcex where x can be (0..15). +* Return : None +*******************************************************************************/ +void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource) +{ + uint32_t tmp = 0x00; + + tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)); + AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp; + AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03))); +} + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_i2c.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_i2c.c new file mode 100644 index 0000000000..f5e801faa9 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_i2c.c @@ -0,0 +1,883 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_i2c.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the I2C firmware functions. +*******************************************************************************/ +#include "ch32v10x_i2c.h" +#include "ch32v10x_rcc.h" + +/* I2C SPE mask */ +#define CTLR1_PE_Set ((uint16_t)0x0001) +#define CTLR1_PE_Reset ((uint16_t)0xFFFE) + +/* I2C START mask */ +#define CTLR1_START_Set ((uint16_t)0x0100) +#define CTLR1_START_Reset ((uint16_t)0xFEFF) + +/* I2C STOP mask */ +#define CTLR1_STOP_Set ((uint16_t)0x0200) +#define CTLR1_STOP_Reset ((uint16_t)0xFDFF) + +/* I2C ACK mask */ +#define CTLR1_ACK_Set ((uint16_t)0x0400) +#define CTLR1_ACK_Reset ((uint16_t)0xFBFF) + +/* I2C ENGC mask */ +#define CTLR1_ENGC_Set ((uint16_t)0x0040) +#define CTLR1_ENGC_Reset ((uint16_t)0xFFBF) + +/* I2C SWRST mask */ +#define CTLR1_SWRST_Set ((uint16_t)0x8000) +#define CTLR1_SWRST_Reset ((uint16_t)0x7FFF) + +/* I2C PEC mask */ +#define CTLR1_PEC_Set ((uint16_t)0x1000) +#define CTLR1_PEC_Reset ((uint16_t)0xEFFF) + +/* I2C ENPEC mask */ +#define CTLR1_ENPEC_Set ((uint16_t)0x0020) +#define CTLR1_ENPEC_Reset ((uint16_t)0xFFDF) + +/* I2C ENARP mask */ +#define CTLR1_ENARP_Set ((uint16_t)0x0010) +#define CTLR1_ENARP_Reset ((uint16_t)0xFFEF) + +/* I2C NOSTRETCH mask */ +#define CTLR1_NOSTRETCH_Set ((uint16_t)0x0080) +#define CTLR1_NOSTRETCH_Reset ((uint16_t)0xFF7F) + +/* I2C registers Masks */ +#define CTLR1_CLEAR_Mask ((uint16_t)0xFBF5) + +/* I2C DMAEN mask */ +#define CTLR2_DMAEN_Set ((uint16_t)0x0800) +#define CTLR2_DMAEN_Reset ((uint16_t)0xF7FF) + +/* I2C LAST mask */ +#define CTLR2_LAST_Set ((uint16_t)0x1000) +#define CTLR2_LAST_Reset ((uint16_t)0xEFFF) + +/* I2C FREQ mask */ +#define CTLR2_FREQ_Reset ((uint16_t)0xFFC0) + +/* I2C ADD0 mask */ +#define OADDR1_ADD0_Set ((uint16_t)0x0001) +#define OADDR1_ADD0_Reset ((uint16_t)0xFFFE) + +/* I2C ENDUAL mask */ +#define OADDR2_ENDUAL_Set ((uint16_t)0x0001) +#define OADDR2_ENDUAL_Reset ((uint16_t)0xFFFE) + +/* I2C ADD2 mask */ +#define OADDR2_ADD2_Reset ((uint16_t)0xFF01) + +/* I2C F/S mask */ +#define CKCFGR_FS_Set ((uint16_t)0x8000) + +/* I2C CCR mask */ +#define CKCFGR_CCR_Set ((uint16_t)0x0FFF) + +/* I2C FLAG mask */ +#define FLAG_Mask ((uint32_t)0x00FFFFFF) + +/* I2C Interrupt Enable mask */ +#define ITEN_Mask ((uint32_t)0x07000000) + +/******************************************************************************* +* Function Name : I2C_DeInit +* Description : Deinitializes the I2Cx peripheral registers to their default +* reset values. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* Return : None +*******************************************************************************/ +void I2C_DeInit(I2C_TypeDef* I2Cx) +{ + if (I2Cx == I2C1) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); + } + else + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C2, DISABLE); + } +} + +/******************************************************************************* +* Function Name : I2C_Init +* Description : Initializes the I2Cx peripheral according to the specified +* parameters in the I2C_InitStruct. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_InitStruct: pointer to a I2C_InitTypeDef structure that +* contains the configuration information for the specified I2C peripheral. +* Return : None +*******************************************************************************/ +void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct) +{ + uint16_t tmpreg = 0, freqrange = 0; + uint16_t result = 0x04; + uint32_t pclk1 = 8000000; + + RCC_ClocksTypeDef rcc_clocks; + + tmpreg = I2Cx->CTLR2; + tmpreg &= CTLR2_FREQ_Reset; + RCC_GetClocksFreq(&rcc_clocks); + pclk1 = rcc_clocks.PCLK1_Frequency; + freqrange = (uint16_t)(pclk1 / 1000000); + tmpreg |= freqrange; + I2Cx->CTLR2 = tmpreg; + + I2Cx->CTLR1 &= CTLR1_PE_Reset; + tmpreg = 0; + + if (I2C_InitStruct->I2C_ClockSpeed <= 100000) + { + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed << 1)); + + if (result < 0x04) + { + result = 0x04; + } + + tmpreg |= result; + I2Cx->RTR = freqrange + 1; + } + else + { + if (I2C_InitStruct->I2C_DutyCycle == I2C_DutyCycle_2) + { + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed * 3)); + } + else + { + result = (uint16_t)(pclk1 / (I2C_InitStruct->I2C_ClockSpeed * 25)); + result |= I2C_DutyCycle_16_9; + } + + if ((result & CKCFGR_CCR_Set) == 0) + { + result |= (uint16_t)0x0001; + } + + tmpreg |= (uint16_t)(result | CKCFGR_FS_Set); + I2Cx->RTR = (uint16_t)(((freqrange * (uint16_t)300) / (uint16_t)1000) + (uint16_t)1); + } + + I2Cx->CKCFGR = tmpreg; + I2Cx->CTLR1 |= CTLR1_PE_Set; + + + tmpreg = I2Cx->CTLR1; + tmpreg &= CTLR1_CLEAR_Mask; + tmpreg |= (uint16_t)((uint32_t)I2C_InitStruct->I2C_Mode | I2C_InitStruct->I2C_Ack); + I2Cx->CTLR1 = tmpreg; + + I2Cx->OADDR1 = (I2C_InitStruct->I2C_AcknowledgedAddress | I2C_InitStruct->I2C_OwnAddress1); +} + +/******************************************************************************* +* Function Name : I2C_StructInit +* Description : Fills each I2C_InitStruct member with its default value. +* Input : I2C_InitStruct: pointer to an I2C_InitTypeDef structure which +* will be initialized. +* Return : None +*******************************************************************************/ +void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct) +{ + I2C_InitStruct->I2C_ClockSpeed = 5000; + I2C_InitStruct->I2C_Mode = I2C_Mode_I2C; + I2C_InitStruct->I2C_DutyCycle = I2C_DutyCycle_2; + I2C_InitStruct->I2C_OwnAddress1 = 0; + I2C_InitStruct->I2C_Ack = I2C_Ack_Disable; + I2C_InitStruct->I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; +} + +/******************************************************************************* +* Function Name : I2C_Cmd +* Description : Enables or disables the specified I2C peripheral. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_PE_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_PE_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_DMACmd +* Description : Enables or disables the specified I2C DMA requests. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR2 |= CTLR2_DMAEN_Set; + } + else + { + I2Cx->CTLR2 &= CTLR2_DMAEN_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_DMALastTransferCmd +* Description : Specifies if the next DMA transfer will be the last one. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR2 |= CTLR2_LAST_Set; + } + else + { + I2Cx->CTLR2 &= CTLR2_LAST_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_GenerateSTART +* Description : Generates I2Cx communication START condition. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_START_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_START_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_GenerateSTOP +* Description : Generates I2Cx communication STOP condition. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_STOP_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_STOP_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_AcknowledgeConfig +* Description : Enables or disables the specified I2C acknowledge feature. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_ACK_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_ACK_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_OwnAddress2Config +* Description : Configures the specified I2C own address2. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* Address: specifies the 7bit I2C own address2. +* Return : None +*******************************************************************************/ +void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address) +{ + uint16_t tmpreg = 0; + + tmpreg = I2Cx->OADDR2; + tmpreg &= OADDR2_ADD2_Reset; + tmpreg |= (uint16_t)((uint16_t)Address & (uint16_t)0x00FE); + I2Cx->OADDR2 = tmpreg; +} + +/******************************************************************************* +* Function Name : I2C_DualAddressCmd +* Description : Enables or disables the specified I2C dual addressing mode. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->OADDR2 |= OADDR2_ENDUAL_Set; + } + else + { + I2Cx->OADDR2 &= OADDR2_ENDUAL_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_GeneralCallCmd +* Description : Enables or disables the specified I2C general call feature. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_ENGC_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_ENGC_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_ITConfig +* Description : Enables or disables the specified I2C interrupts. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_IT: specifies the I2C interrupts sources to be enabled or disabled. +* I2C_IT_BUF: Buffer interrupt mask. +* I2C_IT_EVT: Event interrupt mask. +* I2C_IT_ERR: Error interrupt mask. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR2 |= I2C_IT; + } + else + { + I2Cx->CTLR2 &= (uint16_t)~I2C_IT; + } +} + +/******************************************************************************* +* Function Name : I2C_SendData +* Description : Sends a data byte through the I2Cx peripheral. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* Data: Byte to be transmitted. +* Return : None +*******************************************************************************/ +void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data) +{ + I2Cx->DATAR = Data; +} + +/******************************************************************************* +* Function Name : I2C_ReceiveData +* Description : Returns the most recent received data by the I2Cx peripheral. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* Return : The value of the received data. +*******************************************************************************/ +uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx) +{ + return (uint8_t)I2Cx->DATAR; +} + +/******************************************************************************* +* Function Name : I2C_Send7bitAddress +* Description : Transmits the address byte to select the slave device. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* Address: specifies the slave address which will be transmitted. +* I2C_Direction: specifies whether the I2C device will be a +* Transmitter or a Receiver. +* I2C_Direction_Transmitter: Transmitter mode. +* I2C_Direction_Receiver: Receiver mode. +* Return : None +*******************************************************************************/ +void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction) +{ + if (I2C_Direction != I2C_Direction_Transmitter) + { + Address |= OADDR1_ADD0_Set; + } + else + { + Address &= OADDR1_ADD0_Reset; + } + + I2Cx->DATAR = Address; +} + +/******************************************************************************* +* Function Name : I2C_ReadRegister +* Description : Reads the specified I2C register and returns its value. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_Register: specifies the register to read. +* I2C_Register_CTLR1. +* I2C_Register_CTLR2. +* I2C_Register_OADDR1. +* I2C_Register_OADDR2. +* I2C_Register_DATAR. +* I2C_Register_STAR1. +* I2C_Register_STAR2. +* I2C_Register_CKCFGR. +* I2C_Register_RTR. +* Return : The value of the received data. +*******************************************************************************/ +uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register) +{ + __IO uint32_t tmp = 0; + + tmp = (uint32_t) I2Cx; + tmp += I2C_Register; + + return (*(__IO uint16_t *) tmp); +} + +/******************************************************************************* +* Function Name : I2C_SoftwareResetCmd +* Description : Enables or disables the specified I2C software reset. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_SWRST_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_SWRST_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_NACKPositionConfig +* Description : Selects the specified I2C NACK position in master receiver mode. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_NACKPosition: specifies the NACK position. +* I2C_NACKPosition_Next: indicates that the next byte will be +* the last received byte. +* I2C_NACKPosition_Current: indicates that current byte is the +* last received byte. +* Return : None +*******************************************************************************/ +void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition) +{ + if (I2C_NACKPosition == I2C_NACKPosition_Next) + { + I2Cx->CTLR1 |= I2C_NACKPosition_Next; + } + else + { + I2Cx->CTLR1 &= I2C_NACKPosition_Current; + } +} + +/******************************************************************************* +* Function Name : I2C_SMBusAlertConfig +* Description : Drives the SMBusAlert pin high or low for the specified I2C. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_SMBusAlert: specifies SMBAlert pin level. +* I2C_SMBusAlert_Low: SMBAlert pin driven low. +* I2C_SMBusAlert_High: SMBAlert pin driven high. +* Return : None +*******************************************************************************/ +void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert) +{ + if (I2C_SMBusAlert == I2C_SMBusAlert_Low) + { + I2Cx->CTLR1 |= I2C_SMBusAlert_Low; + } + else + { + I2Cx->CTLR1 &= I2C_SMBusAlert_High; + } +} + +/******************************************************************************* +* Function Name : I2C_TransmitPEC +* Description : Enables or disables the specified I2C PEC transfer. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_PEC_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_PEC_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_PECPositionConfig +* Description : Selects the specified I2C PEC position. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_PECPosition: specifies the PEC position. +* I2C_PECPosition_Next: indicates that the next byte is PEC. +* I2C_PECPosition_Current: indicates that current byte is PEC. +* Return : None +*******************************************************************************/ +void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition) +{ + if (I2C_PECPosition == I2C_PECPosition_Next) + { + I2Cx->CTLR1 |= I2C_PECPosition_Next; + } + else + { + I2Cx->CTLR1 &= I2C_PECPosition_Current; + } +} + +/******************************************************************************* +* Function Name : I2C_CalculatePEC +* Description : Enables or disables the PEC value calculation of the transferred bytes. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_ENPEC_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_ENPEC_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_GetPEC +* Description : Returns the PEC value for the specified I2C. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* Return : The PEC value. +*******************************************************************************/ +uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx) +{ + return ((I2Cx->STAR2) >> 8); +} + +/******************************************************************************* +* Function Name : I2C_ARPCmd +* Description : Enables or disables the specified I2C ARP. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : The PEC value. +*******************************************************************************/ +void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + I2Cx->CTLR1 |= CTLR1_ENARP_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_ENARP_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_StretchClockCmd +* Description : Enables or disables the specified I2C Clock stretching. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState) +{ + if (NewState == DISABLE) + { + I2Cx->CTLR1 |= CTLR1_NOSTRETCH_Set; + } + else + { + I2Cx->CTLR1 &= CTLR1_NOSTRETCH_Reset; + } +} + +/******************************************************************************* +* Function Name : I2C_FastModeDutyCycleConfig +* Description : Selects the specified I2C fast mode duty cycle. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_DutyCycle: specifies the fast mode duty cycle. +* I2C_DutyCycle_2: I2C fast mode Tlow/Thigh = 2. +* I2C_DutyCycle_16_9: I2C fast mode Tlow/Thigh = 16/9. +* Return : None +*******************************************************************************/ +void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle) +{ + if (I2C_DutyCycle != I2C_DutyCycle_16_9) + { + I2Cx->CKCFGR &= I2C_DutyCycle_2; + } + else + { + I2Cx->CKCFGR |= I2C_DutyCycle_16_9; + } +} + + +/******************************************************************************* +* Function Name : I2C_CheckEvent +* Description : Checks whether the last I2Cx Event is equal to the one passed +* as parameter. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_EVENT: specifies the event to be checked. +* I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED : EV1. +* I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED : EV1. +* I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED : EV1. +* I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED : EV1. +* I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED : EV1. +* I2C_EVENT_SLAVE_BYTE_RECEIVED : EV2. +* (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF) : EV2. +* (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL) : EV2. +* I2C_EVENT_SLAVE_BYTE_TRANSMITTED : EV3. +* (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF) : EV3. +* (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL) : EV3. +* I2C_EVENT_SLAVE_ACK_FAILURE : EV3_2. +* I2C_EVENT_SLAVE_STOP_DETECTED : EV4. +* I2C_EVENT_MASTER_MODE_SELECT : EV5. +* I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED : EV6. +* I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED : EV6. +* I2C_EVENT_MASTER_BYTE_RECEIVED : EV7. +* I2C_EVENT_MASTER_BYTE_TRANSMITTING : EV8. +* I2C_EVENT_MASTER_BYTE_TRANSMITTED : EV8_2. +* I2C_EVENT_MASTER_MODE_ADDRESS10 : EV9. +* Return : ErrorStatus: SUCCESS or ERROR. +*******************************************************************************/ +ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT) +{ + uint32_t lastevent = 0; + uint32_t flag1 = 0, flag2 = 0; + ErrorStatus status = ERROR; + + flag1 = I2Cx->STAR1; + flag2 = I2Cx->STAR2; + flag2 = flag2 << 16; + + lastevent = (flag1 | flag2) & FLAG_Mask; + + if ((lastevent & I2C_EVENT) == I2C_EVENT) + { + status = SUCCESS; + } + else + { + status = ERROR; + } + + return status; +} + + +/******************************************************************************* +* Function Name : I2C_GetLastEvent +* Description : Returns the last I2Cx Event. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* Return : The last event. +*******************************************************************************/ +uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx) +{ + uint32_t lastevent = 0; + uint32_t flag1 = 0, flag2 = 0; + + flag1 = I2Cx->STAR1; + flag2 = I2Cx->STAR2; + flag2 = flag2 << 16; + lastevent = (flag1 | flag2) & FLAG_Mask; + + return lastevent; +} + + +/******************************************************************************* +* Function Name : I2C_GetFlagStatus +* Description : Checks whether the last I2Cx Event is equal to the one passed +* as parameter. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_FLAG: specifies the flag to check. +* I2C_FLAG_DUALF: Dual flag (Slave mode). +* I2C_FLAG_SMBHOST: SMBus host header (Slave mode). +* I2C_FLAG_SMBDEFAULT: SMBus default header (Slave mode). +* I2C_FLAG_GENCALL: General call header flag (Slave mode). +* I2C_FLAG_TRA: Transmitter/Receiver flag. +* I2C_FLAG_BUSY: Bus busy flag. +* I2C_FLAG_MSL: Master/Slave flag. +* I2C_FLAG_SMBALERT: SMBus Alert flag. +* I2C_FLAG_TIMEOUT: Timeout or Tlow error flag. +* I2C_FLAG_PECERR: PEC error in reception flag. +* I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode). +* I2C_FLAG_AF: Acknowledge failure flag. +* I2C_FLAG_ARLO: Arbitration lost flag (Master mode). +* I2C_FLAG_BERR: Bus error flag. +* I2C_FLAG_TXE: Data register empty flag (Transmitter). +* I2C_FLAG_RXNE: Data register not empty (Receiver) flag. +* I2C_FLAG_STOPF: Stop detection flag (Slave mode). +* I2C_FLAG_ADD10: 10-bit header sent flag (Master mode). +* I2C_FLAG_BTF: Byte transfer finished flag. +* I2C_FLAG_ADDR: Address sent flag (Master mode) "ADSL" +* Address matched flag (Slave mode)"ENDA". +* I2C_FLAG_SB: Start bit flag (Master mode). +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) +{ + FlagStatus bitstatus = RESET; + __IO uint32_t i2creg = 0, i2cxbase = 0; + + i2cxbase = (uint32_t)I2Cx; + i2creg = I2C_FLAG >> 28; + I2C_FLAG &= FLAG_Mask; + + if(i2creg != 0) + { + i2cxbase += 0x14; + } + else + { + I2C_FLAG = (uint32_t)(I2C_FLAG >> 16); + i2cxbase += 0x18; + } + + if(((*(__IO uint32_t *)i2cxbase) & I2C_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : I2C_ClearFlag +* Description : Clears the I2Cx's pending flags. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_FLAG: specifies the flag to clear. +* I2C_FLAG_SMBALERT: SMBus Alert flag. +* I2C_FLAG_TIMEOUT: Timeout or Tlow error flag. +* I2C_FLAG_PECERR: PEC error in reception flag. +* I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode). +* I2C_FLAG_AF: Acknowledge failure flag. +* I2C_FLAG_ARLO: Arbitration lost flag (Master mode). +* I2C_FLAG_BERR: Bus error flag. +* Return : None +*******************************************************************************/ +void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG) +{ + uint32_t flagpos = 0; + + flagpos = I2C_FLAG & FLAG_Mask; + I2Cx->STAR1 = (uint16_t)~flagpos; +} + +/******************************************************************************* +* Function Name : I2C_GetITStatus +* Description : Checks whether the specified I2C interrupt has occurred or not. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* II2C_IT: specifies the interrupt source to check. +* I2C_IT_SMBALERT: SMBus Alert flag. +* I2C_IT_TIMEOUT: Timeout or Tlow error flag. +* I2C_IT_PECERR: PEC error in reception flag. +* I2C_IT_OVR: Overrun/Underrun flag (Slave mode). +* I2C_IT_AF: Acknowledge failure flag. +* I2C_IT_ARLO: Arbitration lost flag (Master mode). +* I2C_IT_BERR: Bus error flag. +* I2C_IT_TXE: Data register empty flag (Transmitter). +* I2C_IT_RXNE: Data register not empty (Receiver) flag. +* I2C_IT_STOPF: Stop detection flag (Slave mode). +* I2C_IT_ADD10: 10-bit header sent flag (Master mode). +* I2C_IT_BTF: Byte transfer finished flag. +* I2C_IT_ADDR: Address sent flag (Master mode) "ADSL" Address matched +* flag (Slave mode)"ENDAD". +* I2C_IT_SB: Start bit flag (Master mode). +* Return : None +*******************************************************************************/ +ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT) +{ + ITStatus bitstatus = RESET; + uint32_t enablestatus = 0; + + enablestatus = (uint32_t)(((I2C_IT & ITEN_Mask) >> 16) & (I2Cx->CTLR2)) ; + I2C_IT &= FLAG_Mask; + + if (((I2Cx->STAR1 & I2C_IT) != (uint32_t)RESET) && enablestatus) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : I2C_ClearITPendingBit +* Description : Clears the I2Cx interrupt pending bits. +* Input : I2Cx: where x can be 1 or 2 to select the I2C peripheral. +* I2C_IT: specifies the interrupt pending bit to clear. +* I2C_IT_SMBALERT: SMBus Alert interrupt. +* I2C_IT_TIMEOUT: Timeout or Tlow error interrupt. +* I2C_IT_PECERR: PEC error in reception interrupt. +* I2C_IT_OVR: Overrun/Underrun interrupt (Slave mode). +* I2C_IT_AF: Acknowledge failure interrupt. +* I2C_IT_ARLO: Arbitration lost interrupt (Master mode). +* I2C_IT_BERR: Bus error interrupt. +* Return : None +*******************************************************************************/ +void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT) +{ + uint32_t flagpos = 0; + + flagpos = I2C_IT & FLAG_Mask; + I2Cx->STAR1 = (uint16_t)~flagpos; +} + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_iwdg.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_iwdg.c new file mode 100644 index 0000000000..0408c7c518 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_iwdg.c @@ -0,0 +1,109 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_iwdg.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the IWDG firmware functions. +*******************************************************************************/ +#include "ch32v10x_iwdg.h" + +/* CTLR register bit mask */ +#define CTLR_KEY_Reload ((uint16_t)0xAAAA) +#define CTLR_KEY_Enable ((uint16_t)0xCCCC) + +/******************************************************************************* +* Function Name : IWDG_WriteAccessCmd +* Description : Enables or disables write access to IWDG_PSCR and IWDG_RLDR registers. +* Input : WDG_WriteAccess: new state of write access to IWDG_PSCR and +* IWDG_RLDR registers. +* IWDG_WriteAccess_Enable: Enable write access to IWDG_PSCR and +* IWDG_RLDR registers. +* IWDG_WriteAccess_Disable: Disable write access to IWDG_PSCR +* and IWDG_RLDR registers. +* Return : None +*******************************************************************************/ +void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess) +{ + IWDG->CTLR = IWDG_WriteAccess; +} + +/******************************************************************************* +* Function Name : IWDG_SetPrescaler +* Description : Sets IWDG Prescaler value. +* Input : IWDG_Prescaler: specifies the IWDG Prescaler value. +* IWDG_Prescaler_4: IWDG prescaler set to 4. +* IWDG_Prescaler_8: IWDG prescaler set to 8. +* IWDG_Prescaler_16: IWDG prescaler set to 16. +* IWDG_Prescaler_32: IWDG prescaler set to 32. +* IWDG_Prescaler_64: IWDG prescaler set to 64. +* IWDG_Prescaler_128: IWDG prescaler set to 128. +* IWDG_Prescaler_256: IWDG prescaler set to 256. +* Return : None +*******************************************************************************/ +void IWDG_SetPrescaler(uint8_t IWDG_Prescaler) +{ + IWDG->PSCR = IWDG_Prescaler; +} + +/******************************************************************************* +* Function Name : IWDG_SetReload +* Description : Sets IWDG Reload value. +* Input : Reload: specifies the IWDG Reload value. +* This parameter must be a number between 0 and 0x0FFF. +* Return : None +*******************************************************************************/ +void IWDG_SetReload(uint16_t Reload) +{ + IWDG->RLDR = Reload; +} + +/******************************************************************************* +* Function Name : IWDG_ReloadCounter +* Description : Reloads IWDG counter with value defined in the reload register. +* Input : None +* Return : None +*******************************************************************************/ +void IWDG_ReloadCounter(void) +{ + IWDG->CTLR = CTLR_KEY_Reload; +} + +/******************************************************************************* +* Function Name : IWDG_Enable +* Description : Enables IWDG (write access to IWDG_PSCR and IWDG_RLDR registers disabled). +* Input : None +* Return : None +*******************************************************************************/ +void IWDG_Enable(void) +{ + IWDG->CTLR = CTLR_KEY_Enable; +} + +/******************************************************************************* +* Function Name : IWDG_GetFlagStatus +* Description : Checks whether the specified IWDG flag is set or not. +* Input : IWDG_FLAG: specifies the flag to check. +* IWDG_FLAG_PVU: Prescaler Value Update on going. +* IWDG_FLAG_RVU: Reload Value Update on going. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG) +{ + FlagStatus bitstatus = RESET; + + if ((IWDG->STATR & IWDG_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_misc.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_misc.c new file mode 100644 index 0000000000..96baf5ed95 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_misc.c @@ -0,0 +1,102 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_misc.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the miscellaneous firmware functions . +*********************************************************************************/ +#include "ch32v10x_misc.h" + +__IO uint32_t NVIC_Priority_Group = 0; + +/****************************************************************************************** +* Function Name : NVIC_PriorityGroupConfig +* Description : Configures the priority grouping: pre-emption priority and subpriority. +* Input : NVIC_PriorityGroup: specifies the priority grouping bits length. +* NVIC_PriorityGroup_0: 0 bits for pre-emption priority +* 4 bits for subpriority +* NVIC_PriorityGroup_1: 1 bits for pre-emption priority +* 3 bits for subpriority +* NVIC_PriorityGroup_2: 2 bits for pre-emption priority +* 2 bits for subpriority +* NVIC_PriorityGroup_3: 3 bits for pre-emption priority +* 1 bits for subpriority +* NVIC_PriorityGroup_4: 4 bits for pre-emption priority +* 0 bits for subpriority +* Return : None +*******************************************************************************************/ +void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) +{ + NVIC_Priority_Group = NVIC_PriorityGroup; +} + +/****************************************************************************************** +* Function Name : NVIC_Init +* Description : Initializes the NVIC peripheral according to the specified parameters in +* the NVIC_InitStruct. +* Input : NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains the +* configuration information for the specified NVIC peripheral. +* Return : None +*******************************************************************************************/ +void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) +{ + uint8_t tmppre = 0; + + if(NVIC_Priority_Group == NVIC_PriorityGroup_0) + { + NVIC_SetPriority( NVIC_InitStruct->NVIC_IRQChannel, NVIC_InitStruct->NVIC_IRQChannelSubPriority<<4); + } + else if(NVIC_Priority_Group == NVIC_PriorityGroup_1) + { + if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority == 1) + { + NVIC_SetPriority( NVIC_InitStruct->NVIC_IRQChannel, (1<<7)|(NVIC_InitStruct->NVIC_IRQChannelSubPriority<<4)); + } + else + { + NVIC_SetPriority( NVIC_InitStruct->NVIC_IRQChannel, (0<<7)|(NVIC_InitStruct->NVIC_IRQChannelSubPriority<<4)); + } + } + else if(NVIC_Priority_Group == NVIC_PriorityGroup_2) + { + if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 1) + { + tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (4*NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority); + NVIC_SetPriority( NVIC_InitStruct->NVIC_IRQChannel, (0<<7)|(tmppre<<4)); + } + else + { + tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (4*(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority-2)); + NVIC_SetPriority( NVIC_InitStruct->NVIC_IRQChannel, (1<<7)|(tmppre<<4)); + } + } + else if(NVIC_Priority_Group == NVIC_PriorityGroup_3) + { + if(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority <= 3) + { + tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (2*NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority); + NVIC_SetPriority( NVIC_InitStruct->NVIC_IRQChannel, (0<<7)|(tmppre<<4)); + } + else + { + tmppre = NVIC_InitStruct->NVIC_IRQChannelSubPriority + (2*(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority-4)); + NVIC_SetPriority( NVIC_InitStruct->NVIC_IRQChannel, (1<<7)|(tmppre<<4)); + } + } + else if(NVIC_Priority_Group == NVIC_PriorityGroup_4) + { + NVIC_SetPriority( NVIC_InitStruct->NVIC_IRQChannel, NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority<<4); + } + + if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE) + { + NVIC_EnableIRQ(NVIC_InitStruct->NVIC_IRQChannel); + } + else + { + NVIC_DisableIRQ(NVIC_InitStruct->NVIC_IRQChannel); + } +} + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_pwr.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_pwr.c new file mode 100644 index 0000000000..ebdd8cf97e --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_pwr.c @@ -0,0 +1,196 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_pwr.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the PWR firmware functions. +********************************************************************************/ +#include "ch32v10x_pwr.h" +#include "ch32v10x_rcc.h" + +/* PWR registers bit mask */ +/* CTLR register bit mask */ +#define CTLR_DS_MASK ((uint32_t)0xFFFFFFFC) +#define CTLR_PLS_MASK ((uint32_t)0xFFFFFF1F) + +/******************************************************************************** +* Function Name : PWR_DeInit +* Description : Deinitializes the PWR peripheral registers to their default +* reset values. +* Input : None +* Return : None +*********************************************************************************/ +void PWR_DeInit(void) +{ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, DISABLE); +} + + +/******************************************************************************** +* Function Name : PWR_BackupAccessCmd +* Description : Enables or disables access to the RTC and backup registers. +* Input : NewState: new state of the access to the RTC and backup registers, +* This parameter can be: ENABLE or DISABLE. +* Return : None +*********************************************************************************/ +void PWR_BackupAccessCmd(FunctionalState NewState) +{ + if(NewState) + { + PWR->CTLR |= (1<<8); + } + else{ + PWR->CTLR &= ~(1<<8); + } +} + + +/******************************************************************************** +* Function Name : PWR_PVDCmd +* Description : Enables or disables the Power Voltage Detector(PVD). +* Input : NewState: new state of the PVD(ENABLE or DISABLE). +* Return : None +*********************************************************************************/ +void PWR_PVDCmd(FunctionalState NewState) +{ + if(NewState) + { + PWR->CTLR |= (1<<4); + } + else{ + PWR->CTLR &= ~(1<<4); + } +} + + +/******************************************************************************** +* Function Name : PWR_PVDLevelConfig +* Description : Configures the voltage threshold detected by the Power Voltage +* Detector(PVD). +* Input : PWR_PVDLevel: specifies the PVD detection level +* PWR_PVDLevel_2V2: PVD detection level set to 2.2V +* PWR_PVDLevel_2V3: PVD detection level set to 2.3V +* PWR_PVDLevel_2V4: PVD detection level set to 2.4V +* PWR_PVDLevel_2V5: PVD detection level set to 2.5V +* PWR_PVDLevel_2V6: PVD detection level set to 2.6V +* PWR_PVDLevel_2V7: PVD detection level set to 2.7V +* PWR_PVDLevel_2V8: PVD detection level set to 2.8V +* PWR_PVDLevel_2V9: PVD detection level set to 2.9V +* Return : None +*********************************************************************************/ +void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel) +{ + uint32_t tmpreg = 0; + tmpreg = PWR->CTLR; + tmpreg &= CTLR_PLS_MASK; + tmpreg |= PWR_PVDLevel; + PWR->CTLR = tmpreg; +} + + +/******************************************************************************** +* Function Name : PWR_WakeUpPinCmd +* Description : Enables or disables the WakeUp Pin functionality. +* Input : NewState: new state of the WakeUp Pin functionality(ENABLE or DISABLE). +* Return : None +*********************************************************************************/ +void PWR_WakeUpPinCmd(FunctionalState NewState) +{ + if(NewState) + { + PWR->CSR |= (1<<8); + } + else{ + PWR->CSR &= ~(1<<8); + } +} + + +/******************************************************************************** +* Function Name : PWR_EnterSTOPMode +* Description : Enters STOP mode. +* Input : PWR_Regulator: specifies the regulator state in STOP mode. +* PWR_Regulator_ON: STOP mode with regulator ON +* PWR_Regulator_LowPower: STOP mode with regulator in low power mode +* PWR_STOPEntry: specifies if STOP mode in entered with WFI or WFE instruction. +* PWR_STOPEntry_WFI: enter STOP mode with WFI instruction +* PWR_STOPEntry_WFE: enter STOP mode with WFE instruction +* Return : None +*********************************************************************************/ +void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry) +{ + uint32_t tmpreg = 0; + tmpreg = PWR->CTLR; + tmpreg &= CTLR_DS_MASK; + tmpreg |= PWR_Regulator; + PWR->CTLR = tmpreg; + + NVIC->SCTLR |= (1<<2); + + if(PWR_STOPEntry == PWR_STOPEntry_WFI) + { + __WFI(); + } + else + { + __WFE(); + } + + NVIC->SCTLR &=~ (1<<2); +} + +/******************************************************************************** +* Function Name : PWR_EnterSTANDBYMode +* Description : Enters STANDBY mode. +* Input : None +* Return : None +*********************************************************************************/ +void PWR_EnterSTANDBYMode(void) +{ + PWR->CTLR |= PWR_CTLR_CWUF; + PWR->CTLR |= PWR_CTLR_PDDS; + NVIC->SCTLR |= (1<<2); + + __WFI(); +} + + +/******************************************************************************** +* Function Name : PWR_GetFlagStatus +* Description : Checks whether the specified PWR flag is set or not. +* Input : PWR_FLAG: specifies the flag to check. +* PWR_FLAG_WU: Wake Up flag +* PWR_FLAG_SB: StandBy flag +* PWR_FLAG_PVDO: PVD Output +* Return : The new state of PWR_FLAG (SET or RESET). +*********************************************************************************/ +FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG) +{ + FlagStatus bitstatus = RESET; + + if ((PWR->CSR & PWR_FLAG) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + + +/******************************************************************************** +* Function Name : PWR_ClearFlag +* Description : Clears the PWR's pending flags. +* Input : PWR_FLAG: specifies the flag to clear. +* PWR_FLAG_WU: Wake Up flag +* PWR_FLAG_SB: StandBy flag +* Return : None +*********************************************************************************/ +void PWR_ClearFlag(uint32_t PWR_FLAG) +{ + PWR->CTLR |= PWR_FLAG << 2; +} + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_rcc.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_rcc.c new file mode 100644 index 0000000000..1a468df030 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_rcc.c @@ -0,0 +1,837 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_rcc.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the RCC firmware functions. +*******************************************************************************/ +#include "ch32v10x_rcc.h" + +/* RCC registers bit address in the alias region */ +#define RCC_OFFSET (RCC_BASE - PERIPH_BASE) + +/* BDCTLR Register */ +#define BDCTLR_OFFSET (RCC_OFFSET + 0x20) + +/* RCC registers bit mask */ + +/* CTLR register bit mask */ +#define CTLR_HSEBYP_Reset ((uint32_t)0xFFFBFFFF) +#define CTLR_HSEBYP_Set ((uint32_t)0x00040000) +#define CTLR_HSEON_Reset ((uint32_t)0xFFFEFFFF) +#define CTLR_HSEON_Set ((uint32_t)0x00010000) +#define CTLR_HSITRIM_Mask ((uint32_t)0xFFFFFF07) + +#define CFGR0_PLL_Mask ((uint32_t)0xFFC0FFFF) +#define CFGR0_PLLMull_Mask ((uint32_t)0x003C0000) +#define CFGR0_PLLSRC_Mask ((uint32_t)0x00010000) +#define CFGR0_PLLXTPRE_Mask ((uint32_t)0x00020000) +#define CFGR0_SWS_Mask ((uint32_t)0x0000000C) +#define CFGR0_SW_Mask ((uint32_t)0xFFFFFFFC) +#define CFGR0_HPRE_Reset_Mask ((uint32_t)0xFFFFFF0F) +#define CFGR0_HPRE_Set_Mask ((uint32_t)0x000000F0) +#define CFGR0_PPRE1_Reset_Mask ((uint32_t)0xFFFFF8FF) +#define CFGR0_PPRE1_Set_Mask ((uint32_t)0x00000700) +#define CFGR0_PPRE2_Reset_Mask ((uint32_t)0xFFFFC7FF) +#define CFGR0_PPRE2_Set_Mask ((uint32_t)0x00003800) +#define CFGR0_ADCPRE_Reset_Mask ((uint32_t)0xFFFF3FFF) +#define CFGR0_ADCPRE_Set_Mask ((uint32_t)0x0000C000) + +/* RSTSCKR register bit mask */ +#define RSTSCKR_RMVF_Set ((uint32_t)0x01000000) + +/* RCC Flag Mask */ +#define FLAG_Mask ((uint8_t)0x1F) + +/* INTR register byte 2 (Bits[15:8]) base address */ +#define INTR_BYTE2_ADDRESS ((uint32_t)0x40021009) + +/* INTR register byte 3 (Bits[23:16]) base address */ +#define INTR_BYTE3_ADDRESS ((uint32_t)0x4002100A) + +/* CFGR0 register byte 4 (Bits[31:24]) base address */ +#define CFGR0_BYTE4_ADDRESS ((uint32_t)0x40021007) + +/* BDCTLR register base address */ +#define BDCTLR_ADDRESS (PERIPH_BASE + BDCTLR_OFFSET) + + +static __I uint8_t APBAHBPrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9}; +static __I uint8_t ADCPrescTable[4] = {2, 4, 6, 8}; + +/******************************************************************************* +* Function Name : RCC_DeInit +* Description : Resets the RCC clock configuration to the default reset state. +* Input : None +* Return : None +*******************************************************************************/ +void RCC_DeInit(void) +{ + RCC->CTLR |= (uint32_t)0x00000001; + RCC->CFGR0 &= (uint32_t)0xF8FF0000; + RCC->CTLR &= (uint32_t)0xFEF6FFFF; + RCC->CTLR &= (uint32_t)0xFFFBFFFF; + RCC->CFGR0 &= (uint32_t)0xFF80FFFF; + RCC->INTR = 0x009F0000; +} + +/******************************************************************************* +* Function Name : RCC_HSEConfig +* Description : Configures the External High Speed oscillator (HSE). +* Input : RCC_HSE: +* RCC_HSE_OFF: HSE oscillator OFF. +* RCC_HSE_ON: HSE oscillator ON. +* RCC_HSE_Bypass: HSE oscillator bypassed with external clock. +* Return : None +*******************************************************************************/ +void RCC_HSEConfig(uint32_t RCC_HSE) +{ + RCC->CTLR &= CTLR_HSEON_Reset; + RCC->CTLR &= CTLR_HSEBYP_Reset; + + switch(RCC_HSE) + { + case RCC_HSE_ON: + RCC->CTLR |= CTLR_HSEON_Set; + break; + + case RCC_HSE_Bypass: + RCC->CTLR |= CTLR_HSEBYP_Set | CTLR_HSEON_Set; + break; + + default: + break; + } +} + +/******************************************************************************* +* Function Name : RCC_WaitForHSEStartUp +* Description : Configures the External High Speed oscillator (HSE). +* Input : None +* Return : SUCCESS: HSE oscillator is stable and ready to use. +* ERROR: HSE oscillator not yet ready. +*******************************************************************************/ +ErrorStatus RCC_WaitForHSEStartUp(void) +{ + __IO uint32_t StartUpCounter = 0; + + ErrorStatus status = ERROR; + FlagStatus HSEStatus = RESET; + + do + { + HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY); + StartUpCounter++; + } while((StartUpCounter != HSE_STARTUP_TIMEOUT) && (HSEStatus == RESET)); + + if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET) + { + status = SUCCESS; + } + else + { + status = ERROR; + } + + return (status); +} + +/******************************************************************************* +* Function Name : RCC_AdjustHSICalibrationValue +* Description : Adjusts the Internal High Speed oscillator (HSI) calibration value. +* Input : HSICalibrationValue: specifies the calibration trimming value. +* This parameter must be a number between 0 and 0x1F. +* Return : None +*******************************************************************************/ +void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue) +{ + uint32_t tmpreg = 0; + + tmpreg = RCC->CTLR; + tmpreg &= CTLR_HSITRIM_Mask; + tmpreg |= (uint32_t)HSICalibrationValue << 3; + RCC->CTLR = tmpreg; +} + +/******************************************************************************* +* Function Name : RCC_HSICmd +* Description : Enables or disables the Internal High Speed oscillator (HSI). +* Input : NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_HSICmd(FunctionalState NewState) +{ + if(NewState) + { + RCC->CTLR |= (1<<0); + } + else{ + RCC->CTLR &= ~(1<<0); + } +} + +/******************************************************************************* +* Function Name : RCC_PLLConfig +* Description : Configures the PLL clock source and multiplication factor. +* Input : RCC_PLLSource: specifies the PLL entry clock source. +* RCC_PLLSource_HSI_Div2: HSI oscillator clock divided by 2 +* selected as PLL clock entry. +* RCC_PLLSource_HSE_Div1: HSE oscillator clock selected as PLL +* clock entry. +* RCC_PLLSource_HSE_Div2: HSE oscillator clock divided by 2 +* selected as PLL clock entry. +* RCC_PLLMul: specifies the PLL multiplication factor. +* This parameter can be RCC_PLLMul_x where x:[2,16]. +* Return : None +*******************************************************************************/ +void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul) +{ + uint32_t tmpreg = 0; + + tmpreg = RCC->CFGR0; + tmpreg &= CFGR0_PLL_Mask; + tmpreg |= RCC_PLLSource | RCC_PLLMul; + RCC->CFGR0 = tmpreg; +} + +/******************************************************************************* +* Function Name : RCC_PLLCmd +* Description : Enables or disables the PLL. +* Input : NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_PLLCmd(FunctionalState NewState) +{ + if(NewState) + { + RCC->CTLR |= (1<<24); + } + else{ + RCC->CTLR &= ~(1<<24); + } +} + +/******************************************************************************* +* Function Name : RCC_SYSCLKConfig +* Description : Configures the system clock (SYSCLK). +* Input : RCC_SYSCLKSource: specifies the clock source used as system clock. +* RCC_SYSCLKSource_HSI: HSI selected as system clock. +* RCC_SYSCLKSource_HSE: HSE selected as system clock. +* RCC_SYSCLKSource_PLLCLK: PLL selected as system clock. +* Return : None +*******************************************************************************/ +void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource) +{ + uint32_t tmpreg = 0; + + tmpreg = RCC->CFGR0; + tmpreg &= CFGR0_SW_Mask; + tmpreg |= RCC_SYSCLKSource; + RCC->CFGR0 = tmpreg; +} + +/******************************************************************************* +* Function Name : RCC_GetSYSCLKSource +* Description : Configures the system clock (SYSCLK). +* Input : None +* Return : 0x00: HSI used as system clock. +* 0x04: HSE used as system clock. +* 0x08: PLL used as system clock. +*******************************************************************************/ +uint8_t RCC_GetSYSCLKSource(void) +{ + return ((uint8_t)(RCC->CFGR0 & CFGR0_SWS_Mask)); +} + +/******************************************************************************* +* Function Name : RCC_HCLKConfig +* Description : Configures the AHB clock (HCLK). +* Input : RCC_SYSCLK: defines the AHB clock divider. This clock is derived from +* the system clock (SYSCLK). +* RCC_SYSCLK_Div1: AHB clock = SYSCLK. +* RCC_SYSCLK_Div2: AHB clock = SYSCLK/2. +* RCC_SYSCLK_Div4: AHB clock = SYSCLK/4. +* RCC_SYSCLK_Div8: AHB clock = SYSCLK/8. +* RCC_SYSCLK_Div16: AHB clock = SYSCLK/16. +* RCC_SYSCLK_Div64: AHB clock = SYSCLK/64. +* RCC_SYSCLK_Div128: AHB clock = SYSCLK/128. +* RCC_SYSCLK_Div256: AHB clock = SYSCLK/256. +* RCC_SYSCLK_Div512: AHB clock = SYSCLK/512. +* Return : None +*******************************************************************************/ +void RCC_HCLKConfig(uint32_t RCC_SYSCLK) +{ + uint32_t tmpreg = 0; + + tmpreg = RCC->CFGR0; + tmpreg &= CFGR0_HPRE_Reset_Mask; + tmpreg |= RCC_SYSCLK; + RCC->CFGR0 = tmpreg; +} + +/******************************************************************************* +* Function Name : RCC_PCLK1Config +* Description : Configures the Low Speed APB clock (PCLK1). +* Input : RCC_HCLK: defines the APB1 clock divider. This clock is derived from +* the AHB clock (HCLK). +* RCC_HCLK_Div1: APB1 clock = HCLK. +* RCC_HCLK_Div2: APB1 clock = HCLK/2. +* RCC_HCLK_Div4: APB1 clock = HCLK/4. +* RCC_HCLK_Div8: APB1 clock = HCLK/8. +* RCC_HCLK_Div16: APB1 clock = HCLK/16. +* Return : None +*******************************************************************************/ +void RCC_PCLK1Config(uint32_t RCC_HCLK) +{ + uint32_t tmpreg = 0; + + tmpreg = RCC->CFGR0; + tmpreg &= CFGR0_PPRE1_Reset_Mask; + tmpreg |= RCC_HCLK; + RCC->CFGR0 = tmpreg; +} + +/******************************************************************************* +* Function Name : RCC_PCLK2Config +* Description : Configures the High Speed APB clock (PCLK2). +* Input : RCC_HCLK: defines the APB2 clock divider. This clock is derived from +* the AHB clock (HCLK). +* RCC_HCLK_Div1: APB2 clock = HCLK. +* RCC_HCLK_Div2: APB2 clock = HCLK/2. +* RCC_HCLK_Div4: APB2 clock = HCLK/4. +* RCC_HCLK_Div8: APB2 clock = HCLK/8. +* RCC_HCLK_Div16: APB2 clock = HCLK/16. +* Return : None +*******************************************************************************/ +void RCC_PCLK2Config(uint32_t RCC_HCLK) +{ + uint32_t tmpreg = 0; + + tmpreg = RCC->CFGR0; + tmpreg &= CFGR0_PPRE2_Reset_Mask; + tmpreg |= RCC_HCLK << 3; + RCC->CFGR0 = tmpreg; +} + +/******************************************************************************* +* Function Name : RCC_ITConfig +* Description : Enables or disables the specified RCC interrupts. +* Input : RCC_IT: specifies the RCC interrupt sources to be enabled or disabled. +* RCC_IT_LSIRDY: LSI ready interrupt. +* RCC_IT_LSERDY: LSE ready interrupt. +* RCC_IT_HSIRDY: HSI ready interrupt. +* RCC_IT_HSERDY: HSE ready interrupt. +* RCC_IT_PLLRDY: PLL ready interrupt. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + *(__IO uint8_t *) INTR_BYTE2_ADDRESS |= RCC_IT; + } + else + { + *(__IO uint8_t *) INTR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT; + } +} + +/******************************************************************************* +* Function Name : RCC_USBCLKConfig +* Description : Configures the USB clock (USBCLK). +* Input : RCC_USBCLKSource: specifies the USB clock source. This clock is +* derived from the PLL output. +* RCC_USBCLKSource_PLLCLK_1Div5: PLL clock divided by 1,5 selected as USB +* clock source. +* RCC_USBCLKSource_PLLCLK_Div1: PLL clock selected as USB clock source. +* Return : None +*******************************************************************************/ +void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource) +{ + if(RCC_USBCLKSource) + { + RCC->CFGR0 |= (1<<22); + } + else{ + RCC->CFGR0 &= ~(1<<22); + } +} + +/******************************************************************************* +* Function Name : RCC_ADCCLKConfig +* Description : Configures the ADC clock (ADCCLK). +* Input : RCC_PCLK2: defines the ADC clock divider. This clock is derived from +* the APB2 clock (PCLK2). +* RCC_PCLK2_Div2: ADC clock = PCLK2/2. +* RCC_PCLK2_Div4: ADC clock = PCLK2/4. +* RCC_PCLK2_Div6: ADC clock = PCLK2/6. +* RCC_PCLK2_Div8: ADC clock = PCLK2/8. +* Return : None +********************************************************************************/ +void RCC_ADCCLKConfig(uint32_t RCC_PCLK2) +{ + uint32_t tmpreg = 0; + + tmpreg = RCC->CFGR0; + tmpreg &= CFGR0_ADCPRE_Reset_Mask; + tmpreg |= RCC_PCLK2; + RCC->CFGR0 = tmpreg; +} + +/******************************************************************************* +* Function Name : RCC_LSEConfig +* Description : Configures the External Low Speed oscillator (LSE). +* Input : RCC_LSE: specifies the new state of the LSE. +* RCC_LSE_OFF: LSE oscillator OFF. +* RCC_LSE_ON: LSE oscillator ON. +* RCC_LSE_Bypass: LSE oscillator bypassed with external clock. +* Return : None +********************************************************************************/ +void RCC_LSEConfig(uint8_t RCC_LSE) +{ + *(__IO uint8_t *) BDCTLR_ADDRESS = RCC_LSE_OFF; + *(__IO uint8_t *) BDCTLR_ADDRESS = RCC_LSE_OFF; + + switch(RCC_LSE) + { + case RCC_LSE_ON: + *(__IO uint8_t *) BDCTLR_ADDRESS = RCC_LSE_ON; + break; + + case RCC_LSE_Bypass: + *(__IO uint8_t *) BDCTLR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON; + break; + + default: + break; + } +} + +/******************************************************************************* +* Function Name : RCC_LSICmd +* Description : Enables or disables the Internal Low Speed oscillator (LSI). +* Input : NewState: ENABLE or DISABLE. +* Return : None +********************************************************************************/ +void RCC_LSICmd(FunctionalState NewState) +{ + if(NewState) + { + RCC->RSTSCKR |= (1<<0); + } + else{ + RCC->RSTSCKR &= ~(1<<0); + } +} + +/******************************************************************************* +* Function Name : RCC_RTCCLKConfig +* Description : Once the RTC clock is selected it can't be changed unless the Backup domain is reset. +* Input : RCC_RTCCLKSource: specifies the RTC clock source. +* RCC_RTCCLKSource_LSE: LSE selected as RTC clock. +* RCC_RTCCLKSource_LSI: LSI selected as RTC clock. +* RCC_RTCCLKSource_HSE_Div128: HSE clock divided by 128 selected as RTC clock. +* Return : None +********************************************************************************/ +void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource) +{ + RCC->BDCTLR |= RCC_RTCCLKSource; +} + +/******************************************************************************* +* Function Name : RCC_RTCCLKCmd +* Description : This function must be used only after the RTC clock was selected +* using the RCC_RTCCLKConfig function. +* Input : NewState: ENABLE or DISABLE. +* Return : None +********************************************************************************/ +void RCC_RTCCLKCmd(FunctionalState NewState) +{ + if(NewState) + { + RCC->BDCTLR |= (1<<15); + } + else{ + RCC->BDCTLR &= ~(1<<15); + } +} + +/******************************************************************************* +* Function Name : RCC_GetClocksFreq +* Description : RCC_Clocks: pointer to a RCC_ClocksTypeDef structure which will hold +* the clocks frequencies. +* Input : The result of this function could be not correct when using +* fractional value for HSE crystal. +* Return : None +********************************************************************************/ +void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 0, presc = 0; + + tmp = RCC->CFGR0 & CFGR0_SWS_Mask; + + switch (tmp) + { + case 0x00: + RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; + break; + + case 0x04: + RCC_Clocks->SYSCLK_Frequency = HSE_VALUE; + break; + + case 0x08: + pllmull = RCC->CFGR0 & CFGR0_PLLMull_Mask; + pllsource = RCC->CFGR0 & CFGR0_PLLSRC_Mask; + pllmull = ( pllmull >> 18) + 2; + + if (pllsource == 0x00) + { + RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull; + } + else + { + if ((RCC->CFGR0 & CFGR0_PLLXTPRE_Mask) != (uint32_t)RESET) + { + RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE >> 1) * pllmull; + } + else + { + RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull; + } + } + break; + + default: + RCC_Clocks->SYSCLK_Frequency = HSI_VALUE; + break; + } + + tmp = RCC->CFGR0 & CFGR0_HPRE_Set_Mask; + tmp = tmp >> 4; + presc = APBAHBPrescTable[tmp]; + RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc; + tmp = RCC->CFGR0 & CFGR0_PPRE1_Set_Mask; + tmp = tmp >> 8; + presc = APBAHBPrescTable[tmp]; + RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc; + tmp = RCC->CFGR0 & CFGR0_PPRE2_Set_Mask; + tmp = tmp >> 11; + presc = APBAHBPrescTable[tmp]; + RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc; + tmp = RCC->CFGR0 & CFGR0_ADCPRE_Set_Mask; + tmp = tmp >> 14; + presc = ADCPrescTable[tmp]; + RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc; +} + +/******************************************************************************* +* Function Name : RCC_AHBPeriphClockCmd +* Description : Enables or disables the AHB peripheral clock. +* Input : RCC_AHBPeriph: specifies the AHB peripheral to gates its clock. +* RCC_AHBPeriph_DMA1. +* RCC_AHBPeriph_DMA2. +* RCC_AHBPeriph_SRAM. +* RCC_AHBPeriph_FLITF. +* RCC_AHBPeriph_CRC. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + RCC->AHBPCENR |= RCC_AHBPeriph; + } + else + { + RCC->AHBPCENR &= ~RCC_AHBPeriph; + } +} + +/******************************************************************************* +* Function Name : RCC_APB2PeriphClockCmd +* Description : Enables or disables the High Speed APB (APB2) peripheral clock. +* Input : RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. +* RCC_APB2Periph_AFIO. +* RCC_APB2Periph_GPIOA. +* RCC_APB2Periph_GPIOB. +* RCC_APB2Periph_GPIOC. +* RCC_APB2Periph_GPIOD. +* RCC_APB2Periph_ADC1. +* RCC_APB2Periph_TIM1. +* RCC_APB2Periph_SPI1. +* RCC_APB2Periph_USART1. +* NewState: ENABLE or DISABLE +* Return : None +*******************************************************************************/ +void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + RCC->APB2PCENR |= RCC_APB2Periph; + } + else + { + RCC->APB2PCENR &= ~RCC_APB2Periph; + } +} + +/******************************************************************************* +* Function Name : RCC_APB1PeriphClockCmd +* Description : Enables or disables the Low Speed APB (APB1) peripheral clock. +* Input : RCC_APB1Periph: specifies the APB1 peripheral to gates its clock. +* RCC_APB1Periph_TIM2. +* RCC_APB1Periph_TIM3. +* RCC_APB1Periph_TIM4. +* RCC_APB1Periph_WWDG. +* RCC_APB1Periph_SPI2. +* RCC_APB1Periph_USART2. +* RCC_APB1Periph_USART3. +* RCC_APB1Periph_I2C1. +* RCC_APB1Periph_I2C2. +* RCC_APB1Periph_USB. +* RCC_APB1Periph_CAN1. +* RCC_APB1Periph_BKP. +* RCC_APB1Periph_PWR. +* RCC_APB1Periph_DAC. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + RCC->APB1PCENR |= RCC_APB1Periph; + } + else + { + RCC->APB1PCENR &= ~RCC_APB1Periph; + } +} + +/******************************************************************************* +* Function Name : RCC_APB2PeriphResetCmd +* Description : Forces or releases High Speed APB (APB2) peripheral reset. +* Input : RCC_APB2Periph: specifies the APB2 peripheral to reset. +* RCC_APB2Periph_AFIO. +* RCC_APB2Periph_GPIOA. +* RCC_APB2Periph_GPIOB. +* RCC_APB2Periph_GPIOC. +* RCC_APB2Periph_GPIOD. +* RCC_APB2Periph_ADC1. +* RCC_APB2Periph_TIM1. +* RCC_APB2Periph_SPI1. +* RCC_APB2Periph_USART1. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + RCC->APB2PRSTR |= RCC_APB2Periph; + } + else + { + RCC->APB2PRSTR &= ~RCC_APB2Periph; + } +} + +/******************************************************************************* +* Function Name : RCC_APB1PeriphResetCmd +* Description : Forces or releases Low Speed APB (APB1) peripheral reset. +* Input : RCC_APB1Periph: specifies the APB1 peripheral to reset. +* RCC_APB1Periph_TIM2. +* RCC_APB1Periph_TIM3. +* RCC_APB1Periph_TIM4. +* RCC_APB1Periph_WWDG. +* RCC_APB1Periph_SPI2. +* RCC_APB1Periph_USART2. +* RCC_APB1Periph_USART3. +* RCC_APB1Periph_I2C1. +* RCC_APB1Periph_I2C2. +* RCC_APB1Periph_USB. +* RCC_APB1Periph_CAN1. +* RCC_APB1Periph_BKP. +* RCC_APB1Periph_PWR. +* RCC_APB1Periph_DAC. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + RCC->APB1PRSTR |= RCC_APB1Periph; + } + else + { + RCC->APB1PRSTR &= ~RCC_APB1Periph; + } +} + +/******************************************************************************* +* Function Name : RCC_BackupResetCmd +* Description : Forces or releases the Backup domain reset. +* Input : NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_BackupResetCmd(FunctionalState NewState) +{ + if(NewState) + { + RCC->BDCTLR |= (1<<16); + } + else{ + RCC->BDCTLR &= ~(1<<16); + } +} + +/******************************************************************************* +* Function Name : RCC_ClockSecuritySystemCmd +* Description : Enables or disables the Clock Security System. +* Input : NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void RCC_ClockSecuritySystemCmd(FunctionalState NewState) +{ + if(NewState) + { + RCC->CTLR |= (1<<19); + } + else{ + RCC->CTLR &= ~(1<<19); + } +} + +/******************************************************************************* +* Function Name : RCC_MCOConfig +* Description : Selects the clock source to output on MCO pin. +* Input : RCC_MCO: specifies the clock source to output. +* RCC_MCO_NoClock: No clock selected. +* RCC_MCO_SYSCLK: System clock selected. +* RCC_MCO_HSI: HSI oscillator clock selected. +* RCC_MCO_HSE: HSE oscillator clock selected. +* RCC_MCO_PLLCLK_Div2: PLL clock divided by 2 selected. +* Return : None +*******************************************************************************/ +void RCC_MCOConfig(uint8_t RCC_MCO) +{ + *(__IO uint8_t *) CFGR0_BYTE4_ADDRESS = RCC_MCO; +} + +/******************************************************************************* +* Function Name : RCC_GetFlagStatus +* Description : Checks whether the specified RCC flag is set or not. +* Input : RCC_FLAG: specifies the flag to check. +* RCC_FLAG_HSIRDY: HSI oscillator clock ready. +* RCC_FLAG_HSERDY: HSE oscillator clock ready. +* RCC_FLAG_PLLRDY: PLL clock ready. +* RCC_FLAG_LSERDY: LSE oscillator clock ready. +* RCC_FLAG_LSIRDY: LSI oscillator clock ready. +* RCC_FLAG_PINRST: Pin reset. +* RCC_FLAG_PORRST: POR/PDR reset. +* RCC_FLAG_SFTRST: Software reset. +* RCC_FLAG_IWDGRST: Independent Watchdog reset. +* RCC_FLAG_WWDGRST: Window Watchdog reset. +* RCC_FLAG_LPWRRST: Low Power reset. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG) +{ + uint32_t tmp = 0; + uint32_t statusreg = 0; + + FlagStatus bitstatus = RESET; + tmp = RCC_FLAG >> 5; + + if (tmp == 1) + { + statusreg = RCC->CTLR; + } + else if (tmp == 2) + { + statusreg = RCC->BDCTLR; + } + else + { + statusreg = RCC->RSTSCKR; + } + + tmp = RCC_FLAG & FLAG_Mask; + + if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : RCC_ClearFlag +* Description : Clears the RCC reset flags. +* Input : None +* Return : None +*******************************************************************************/ +void RCC_ClearFlag(void) +{ + RCC->RSTSCKR |= RSTSCKR_RMVF_Set; +} + +/******************************************************************************* +* Function Name : RCC_GetITStatus +* Description : Checks whether the specified RCC interrupt has occurred or not. +* Input : RCC_IT: specifies the RCC interrupt source to check. +* RCC_IT_LSIRDY: LSI ready interrupt. +* RCC_IT_LSERDY: LSE ready interrupt. +* RCC_IT_HSIRDY: HSI ready interrupt. +* RCC_IT_HSERDY: HSE ready interrupt. +* RCC_IT_PLLRDY: PLL ready interrupt. +* RCC_IT_CSS: Clock Security System interruptt. +* Return : ITStatus: SET or RESET. +*******************************************************************************/ +ITStatus RCC_GetITStatus(uint8_t RCC_IT) +{ + ITStatus bitstatus = RESET; + + if ((RCC->INTR & RCC_IT) != (uint32_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : RCC_ClearITPendingBit +* Description : Clears the RCC's interrupt pending bits. +* Input : RCC_IT: specifies the interrupt pending bit to clear. +* RCC_IT_LSIRDY: LSI ready interrupt. +* RCC_IT_LSERDY: LSE ready interrupt. +* RCC_IT_HSIRDY: HSI ready interrupt. +* RCC_IT_HSERDY: HSE ready interrupt. +* RCC_IT_PLLRDY: PLL ready interrupt. +* RCC_IT_CSS: Clock Security System interruptt. +* Return : None +*******************************************************************************/ +void RCC_ClearITPendingBit(uint8_t RCC_IT) +{ + *(__IO uint8_t *) INTR_BYTE3_ADDRESS = RCC_IT; +} + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_rtc.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_rtc.c new file mode 100644 index 0000000000..78ca436ebb --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_rtc.c @@ -0,0 +1,244 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_rtc.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the RTC firmware functions. +********************************************************************************/ +#include "ch32v10x_rtc.h" + +/* RTC_Private_Defines */ +#define RTC_LSB_MASK ((uint32_t)0x0000FFFF) /* RTC LSB Mask */ +#define PRLH_MSB_MASK ((uint32_t)0x000F0000) /* RTC Prescaler MSB Mask */ + +/******************************************************************************** +* Function Name : RTC_ITConfig +* Description : Enables or disables the specified RTC interrupts. +* Input : RTC_IT: specifies the RTC interrupts sources to be enabled or disabled. +* RTC_IT_OW: Overflow interrupt +* RTC_IT_ALR: Alarm interrupt +* RTC_IT_SEC: Second interrupt +* Return : NewState: new state of the specified RTC interrupts(ENABLE or DISABLE). +*********************************************************************************/ +void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + RTC->CTLRH |= RTC_IT; + } + else + { + RTC->CTLRH &= (uint16_t)~RTC_IT; + } +} + +/******************************************************************************** +* Function Name : RTC_EnterConfigMode +* Description : Enters the RTC configuration mode. +* Input : None +* Return : None +*********************************************************************************/ +void RTC_EnterConfigMode(void) +{ + RTC->CTLRL |= RTC_CTLRL_CNF; +} + +/******************************************************************************** +* Function Name : RTC_ExitConfigMode +* Description : Exits from the RTC configuration mode. +* Input : None +* Return : None +*********************************************************************************/ +void RTC_ExitConfigMode(void) +{ + RTC->CTLRL &= (uint16_t)~((uint16_t)RTC_CTLRL_CNF); +} + +/******************************************************************************** +* Function Name : RTC_GetCounter +* Description : Gets the RTC counter value +* Input : None +* Return : RTC counter value +*********************************************************************************/ +uint32_t RTC_GetCounter(void) +{ + uint16_t high1 = 0, high2 = 0, low = 0; + + high1 = RTC->CNTH; + low = RTC->CNTL; + high2 = RTC->CNTH; + + if (high1 != high2) + { + return (((uint32_t) high2 << 16 ) | RTC->CNTL); + } + else + { + return (((uint32_t) high1 << 16 ) | low); + } +} + +/******************************************************************************** +* Function Name : RTC_SetCounter +* Description : Sets the RTC counter value. +* Input : CounterValue: RTC counter new value. +* Return : None +*********************************************************************************/ +void RTC_SetCounter(uint32_t CounterValue) +{ + RTC_EnterConfigMode(); + RTC->CNTH = CounterValue >> 16; + RTC->CNTL = (CounterValue & RTC_LSB_MASK); + RTC_ExitConfigMode(); +} + +/******************************************************************************** +* Function Name : RTC_SetPrescaler +* Description : Sets the RTC prescaler value +* Input : PrescalerValue: RTC prescaler new value +* Return : None +*********************************************************************************/ +void RTC_SetPrescaler(uint32_t PrescalerValue) +{ + RTC_EnterConfigMode(); + RTC->PSCRH = (PrescalerValue & PRLH_MSB_MASK) >> 16; + RTC->PSCRL = (PrescalerValue & RTC_LSB_MASK); + RTC_ExitConfigMode(); +} + +/******************************************************************************** +* Function Name : RTC_SetAlarm +* Description : Sets the RTC alarm value +* Input : AlarmValue: RTC alarm new value +* Return : None +*********************************************************************************/ +void RTC_SetAlarm(uint32_t AlarmValue) +{ + RTC_EnterConfigMode(); + RTC->ALRMH = AlarmValue >> 16; + RTC->ALRML = (AlarmValue & RTC_LSB_MASK); + RTC_ExitConfigMode(); +} + +/******************************************************************************** +* Function Name : RTC_GetDivider +* Description : Gets the RTC divider value +* Input : None +* Return : RTC Divider value +*********************************************************************************/ +uint32_t RTC_GetDivider(void) +{ + uint32_t tmp = 0x00; + tmp = ((uint32_t)RTC->DIVH & (uint32_t)0x000F) << 16; + tmp |= RTC->DIVL; + return tmp; +} + +/******************************************************************************** +* Function Name : RTC_WaitForLastTask +* Description : Waits until last write operation on RTC registers has finished +* Input : None +* Return : None +*********************************************************************************/ +void RTC_WaitForLastTask(void) +{ + while ((RTC->CTLRL & RTC_FLAG_RTOFF) == (uint16_t)RESET) + { + } +} + +/******************************************************************************** +* Function Name : RTC_WaitForSynchro +* Description : Waits until the RTC registers +* are synchronized with RTC APB clock +* Input : None +* Return : None +*********************************************************************************/ +void RTC_WaitForSynchro(void) +{ + RTC->CTLRL &= (uint16_t)~RTC_FLAG_RSF; + while ((RTC->CTLRL & RTC_FLAG_RSF) == (uint16_t)RESET) + { + } +} + +/******************************************************************************** +* Function Name : RTC_GetFlagStatus +* Description : Checks whether the specified RTC flag is set or not +* Input : RTC_FLAG: specifies the flag to check +* RTC_FLAG_RTOFF: RTC Operation OFF flag +* RTC_FLAG_RSF: Registers Synchronized flag +* RTC_FLAG_OW: Overflow flag +* RTC_FLAG_ALR: Alarm flag +* RTC_FLAG_SEC: Second flag +* Return : The new state of RTC_FLAG (SET or RESET) +*********************************************************************************/ +FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG) +{ + FlagStatus bitstatus = RESET; + if ((RTC->CTLRL & RTC_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/******************************************************************************** +* Function Name : RTC_ClearFlag +* Description : Clears the RTC's pending flags +* Input : RTC_FLAG: specifies the flag to clear +* RTC_FLAG_RSF: Registers Synchronized flag +* RTC_FLAG_OW: Overflow flag +* RTC_FLAG_ALR: Alarm flag +* RTC_FLAG_SEC: Second flag +* Return : None +*********************************************************************************/ +void RTC_ClearFlag(uint16_t RTC_FLAG) +{ + RTC->CTLRL &= (uint16_t)~RTC_FLAG; +} + + +/******************************************************************************** +* Function Name : RTC_GetITStatus +* Description : Checks whether the specified RTC interrupt has occurred or not +* Input : RTC_IT: specifies the RTC interrupts sources to check +* RTC_FLAG_OW: Overflow interrupt +* RTC_FLAG_ALR: Alarm interrupt +* RTC_FLAG_SEC: Second interrupt +* Return : The new state of the RTC_IT (SET or RESET) +*********************************************************************************/ +ITStatus RTC_GetITStatus(uint16_t RTC_IT) +{ + ITStatus bitstatus = RESET; + + bitstatus = (ITStatus)(RTC->CTLRL & RTC_IT); + if (((RTC->CTLRH & RTC_IT) != (uint16_t)RESET) && (bitstatus != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/******************************************************************************** +* Function Name : RTC_ClearITPendingBit +* Description : Clears the RTC's interrupt pending bits +* Input : RTC_IT: specifies the interrupt pending bit to clear +* RTC_FLAG_OW: Overflow interrupt +* RTC_FLAG_ALR: Alarm interrupt +* RTC_FLAG_SEC: Second interrupt +* Return : None +*********************************************************************************/ +void RTC_ClearITPendingBit(uint16_t RTC_IT) +{ + RTC->CTLRL &= (uint16_t)~RTC_IT; +} + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_spi.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_spi.c new file mode 100644 index 0000000000..81d9252ef1 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_spi.c @@ -0,0 +1,587 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_spi.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the SPI firmware functions. +*********************************************************************************/ +#include "ch32v10x_spi.h" +#include "ch32v10x_rcc.h" + +/* SPI SPE mask */ +#define CTLR1_SPE_Set ((uint16_t)0x0040) +#define CTLR1_SPE_Reset ((uint16_t)0xFFBF) + +/* I2S I2SE mask */ +#define I2SCFGR_I2SE_Set ((uint16_t)0x0400) +#define I2SCFGR_I2SE_Reset ((uint16_t)0xFBFF) + +/* SPI CRCNext mask */ +#define CTLR1_CRCNext_Set ((uint16_t)0x1000) + +/* SPI CRCEN mask */ +#define CTLR1_CRCEN_Set ((uint16_t)0x2000) +#define CTLR1_CRCEN_Reset ((uint16_t)0xDFFF) + +/* SPI SSOE mask */ +#define CTLR2_SSOE_Set ((uint16_t)0x0004) +#define CTLR2_SSOE_Reset ((uint16_t)0xFFFB) + +/* SPI registers Masks */ +#define CTLR1_CLEAR_Mask ((uint16_t)0x3040) +#define I2SCFGR_CLEAR_Mask ((uint16_t)0xF040) + +/* SPI or I2S mode selection masks */ +#define SPI_Mode_Select ((uint16_t)0xF7FF) +#define I2S_Mode_Select ((uint16_t)0x0800) + +/* I2S clock source selection masks */ +#define I2S2_CLOCK_SRC ((uint32_t)(0x00020000)) +#define I2S3_CLOCK_SRC ((uint32_t)(0x00040000)) +#define I2S_MUL_MASK ((uint32_t)(0x0000F000)) +#define I2S_DIV_MASK ((uint32_t)(0x000000F0)) + +/******************************************************************************* +* Function Name : SPI_I2S_DeInit +* Description : Deinitializes the SPIx peripheral registers to their default +* reset values (Affects also the I2Ss). +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* Return : None +*******************************************************************************/ +void SPI_I2S_DeInit(SPI_TypeDef* SPIx) +{ + if (SPIx == SPI1) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE); + } + else if (SPIx == SPI2) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI2, DISABLE); + } + else + { + if (SPIx == SPI3) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, DISABLE); + } + } +} + +/******************************************************************************* +* Function Name : SPI_Init +* Description : Initializes the SPIx peripheral according to the specified +* parameters in the SPI_InitStruct. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* SPI_InitStruct: pointer to a SPI_InitTypeDef structure that +* contains the configuration information for the specified SPI peripheral. +* Return : None +*******************************************************************************/ +void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct) +{ + uint16_t tmpreg = 0; + + tmpreg = SPIx->CTLR1; + tmpreg &= CTLR1_CLEAR_Mask; + tmpreg |= (uint16_t)((uint32_t)SPI_InitStruct->SPI_Direction | SPI_InitStruct->SPI_Mode | + SPI_InitStruct->SPI_DataSize | SPI_InitStruct->SPI_CPOL | + SPI_InitStruct->SPI_CPHA | SPI_InitStruct->SPI_NSS | + SPI_InitStruct->SPI_BaudRatePrescaler | SPI_InitStruct->SPI_FirstBit); + + SPIx->CTLR1 = tmpreg; + SPIx->I2SCFGR &= SPI_Mode_Select; + SPIx->CRCR = SPI_InitStruct->SPI_CRCPolynomial; +} + +/******************************************************************************* +* Function Name : I2S_Init +* Description : Initializes the SPIx peripheral according to the specified +* parameters in the I2S_InitStruct. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* (configured in I2S mode). +* I2S_InitStruct: pointer to an I2S_InitTypeDef structure that +* contains the configuration information for the specified SPI peripheral +* configured in I2S mode. +* Return : None +*******************************************************************************/ +void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct) +{ + uint16_t tmpreg = 0, i2sdiv = 2, i2sodd = 0, packetlength = 1; + uint32_t tmp = 0; + RCC_ClocksTypeDef RCC_Clocks; + uint32_t sourceclock = 0; + + SPIx->I2SCFGR &= I2SCFGR_CLEAR_Mask; + SPIx->I2SPR = 0x0002; + tmpreg = SPIx->I2SCFGR; + + if(I2S_InitStruct->I2S_AudioFreq == I2S_AudioFreq_Default) + { + i2sodd = (uint16_t)0; + i2sdiv = (uint16_t)2; + } + else + { + if(I2S_InitStruct->I2S_DataFormat == I2S_DataFormat_16b) + { + packetlength = 1; + } + else + { + packetlength = 2; + } + + if(((uint32_t)SPIx) == SPI2_BASE) + { + tmp = I2S2_CLOCK_SRC; + } + else + { + tmp = I2S3_CLOCK_SRC; + } + + RCC_GetClocksFreq(&RCC_Clocks); + + sourceclock = RCC_Clocks.SYSCLK_Frequency; + + if(I2S_InitStruct->I2S_MCLKOutput == I2S_MCLKOutput_Enable) + { + tmp = (uint16_t)(((((sourceclock / 256) * 10) / I2S_InitStruct->I2S_AudioFreq)) + 5); + } + else + { + tmp = (uint16_t)(((((sourceclock / (32 * packetlength)) *10 ) / I2S_InitStruct->I2S_AudioFreq)) + 5); + } + + tmp = tmp / 10; + i2sodd = (uint16_t)(tmp & (uint16_t)0x0001); + i2sdiv = (uint16_t)((tmp - i2sodd) / 2); + i2sodd = (uint16_t) (i2sodd << 8); + } + + if ((i2sdiv < 2) || (i2sdiv > 0xFF)) + { + i2sdiv = 2; + i2sodd = 0; + } + + SPIx->I2SPR = (uint16_t)(i2sdiv | (uint16_t)(i2sodd | (uint16_t)I2S_InitStruct->I2S_MCLKOutput)); + tmpreg |= (uint16_t)(I2S_Mode_Select | (uint16_t)(I2S_InitStruct->I2S_Mode | \ + (uint16_t)(I2S_InitStruct->I2S_Standard | (uint16_t)(I2S_InitStruct->I2S_DataFormat | \ + (uint16_t)I2S_InitStruct->I2S_CPOL)))); + SPIx->I2SCFGR = tmpreg; +} + +/******************************************************************************* +* Function Name : SPI_StructInit +* Description : Fills each SPI_InitStruct member with its default value. +* Input : SPI_InitStruct : pointer to a SPI_InitTypeDef structure which +* will be initialized. +* Return : None +*******************************************************************************/ +void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct) +{ + SPI_InitStruct->SPI_Direction = SPI_Direction_2Lines_FullDuplex; + SPI_InitStruct->SPI_Mode = SPI_Mode_Slave; + SPI_InitStruct->SPI_DataSize = SPI_DataSize_8b; + SPI_InitStruct->SPI_CPOL = SPI_CPOL_Low; + SPI_InitStruct->SPI_CPHA = SPI_CPHA_1Edge; + SPI_InitStruct->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; + SPI_InitStruct->SPI_FirstBit = SPI_FirstBit_MSB; + SPI_InitStruct->SPI_CRCPolynomial = 7; +} + +/******************************************************************************* +* Function Name : I2S_StructInit +* Description : Fills each I2S_InitStruct member with its default value. +* Input : I2S_InitStruct : pointer to a I2S_InitTypeDef structure which +* will be initialized. +* Return : None +*******************************************************************************/ +void I2S_StructInit(I2S_InitTypeDef* I2S_InitStruct) +{ + I2S_InitStruct->I2S_Mode = I2S_Mode_SlaveTx; + I2S_InitStruct->I2S_Standard = I2S_Standard_Phillips; + I2S_InitStruct->I2S_DataFormat = I2S_DataFormat_16b; + I2S_InitStruct->I2S_MCLKOutput = I2S_MCLKOutput_Disable; + I2S_InitStruct->I2S_AudioFreq = I2S_AudioFreq_Default; + I2S_InitStruct->I2S_CPOL = I2S_CPOL_Low; +} + +/******************************************************************************* +* Function Name : SPI_Cmd +* Description : Enables or disables the specified SPI peripheral. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + SPIx->CTLR1 |= CTLR1_SPE_Set; + } + else + { + SPIx->CTLR1 &= CTLR1_SPE_Reset; + } +} + +/******************************************************************************* +* Function Name : I2S_Cmd +* Description : Enables or disables the specified SPI peripheral (in I2S mode). +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void I2S_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + SPIx->I2SCFGR |= I2SCFGR_I2SE_Set; + } + else + { + SPIx->I2SCFGR &= I2SCFGR_I2SE_Reset; + } +} + +/******************************************************************************* +* Function Name : SPI_I2S_ITConfig +* Description : Enables or disables the specified SPI/I2S interrupts. +* Input : SPIx: where x can be +* - 1, 2 or 3 in SPI mode. +* - 2 or 3 in I2S mode. +* SPI_I2S_IT: specifies the SPI/I2S interrupt source to be +* enabled or disabled. +* SPI_I2S_IT_TXE: Tx buffer empty interrupt mask. +* SPI_I2S_IT_RXNE: Rx buffer not empty interrupt mask. +* SPI_I2S_IT_ERR: Error interrupt mask. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void SPI_I2S_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT, FunctionalState NewState) +{ + uint16_t itpos = 0, itmask = 0 ; + + itpos = SPI_I2S_IT >> 4; + itmask = (uint16_t)1 << (uint16_t)itpos; + + if (NewState != DISABLE) + { + SPIx->CTLR2 |= itmask; + } + else + { + SPIx->CTLR2 &= (uint16_t)~itmask; + } +} + +/******************************************************************************* +* Function Name : SPI_I2S_DMACmd +* Description : Enables or disables the SPIx/I2Sx DMA interface. +* Input : SPIx: where x can be +* - 1, 2 or 3 in SPI mode. +* - 2 or 3 in I2S mode. +* SPI_I2S_DMAReq: specifies the SPI/I2S DMA transfer request to +* be enabled or disabled. +* SPI_I2S_DMAReq_Tx: Tx buffer DMA transfer request. +* SPI_I2S_DMAReq_Rx: Rx buffer DMA transfer request. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void SPI_I2S_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_I2S_DMAReq, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + SPIx->CTLR2 |= SPI_I2S_DMAReq; + } + else + { + SPIx->CTLR2 &= (uint16_t)~SPI_I2S_DMAReq; + } +} + +/******************************************************************************* +* Function Name : SPI_I2S_SendData +* Description : Transmits a Data through the SPIx/I2Sx peripheral. +* Input : SPIx: where x can be +* - 1, 2 or 3 in SPI mode. +* - 2 or 3 in I2S mode. +* Data : Data to be transmitted. +* Return : None +*******************************************************************************/ +void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data) +{ + SPIx->DATAR = Data; +} + +/******************************************************************************* +* Function Name : SPI_I2S_ReceiveData +* Description : Returns the most recent received data by the SPIx/I2Sx peripheral. +* Input : SPIx: where x can be +* - 1, 2 or 3 in SPI mode. +* - 2 or 3 in I2S mode. +* Data : Data to be transmitted. +* Return : SPIx->DATAR: The value of the received data. +*******************************************************************************/ +uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx) +{ + return SPIx->DATAR; +} + +/******************************************************************************* +* Function Name : SPI_NSSInternalSoftwareConfig +* Description : Configures internally by software the NSS pin for the selected SPI. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* SPI_NSSInternalSoft: +* SPI_NSSInternalSoft_Set: Set NSS pin internally. +* SPI_NSSInternalSoft_Reset: Reset NSS pin internally. +* Return : None +*******************************************************************************/ +void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft) +{ + if (SPI_NSSInternalSoft != SPI_NSSInternalSoft_Reset) + { + SPIx->CTLR1 |= SPI_NSSInternalSoft_Set; + } + else + { + SPIx->CTLR1 &= SPI_NSSInternalSoft_Reset; + } +} + +/******************************************************************************* +* Function Name : SPI_SSOutputCmd +* Description : Enables or disables the SS output for the selected SPI. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* NewState: new state of the SPIx SS output. +* Return : None +*******************************************************************************/ +void SPI_SSOutputCmd(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + SPIx->CTLR2 |= CTLR2_SSOE_Set; + } + else + { + SPIx->CTLR2 &= CTLR2_SSOE_Reset; + } +} + +/******************************************************************************* +* Function Name : SPI_DataSizeConfig +* Description : Configures the data size for the selected SPI. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* SPI_DataSize: specifies the SPI data size. +* SPI_DataSize_16b: Set data frame format to 16bit. +* SPI_DataSize_8b: Set data frame format to 8bit. +* Return : None +*******************************************************************************/ +void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize) +{ + SPIx->CTLR1 &= (uint16_t)~SPI_DataSize_16b; + SPIx->CTLR1 |= SPI_DataSize; +} + +/******************************************************************************* +* Function Name : SPI_TransmitCRC +* Description : Transmit the SPIx CRC value. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* Return : None +*******************************************************************************/ +void SPI_TransmitCRC(SPI_TypeDef* SPIx) +{ + SPIx->CTLR1 |= CTLR1_CRCNext_Set; +} + +/******************************************************************************* +* Function Name : SPI_CalculateCRC +* Description : Enables or disables the CRC value calculation of the transferred bytes. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* NewState: new state of the SPIx CRC value calculation. +* Return : None +*******************************************************************************/ +void SPI_CalculateCRC(SPI_TypeDef* SPIx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + SPIx->CTLR1 |= CTLR1_CRCEN_Set; + } + else + { + SPIx->CTLR1 &= CTLR1_CRCEN_Reset; + } +} + +/******************************************************************************* +* Function Name : SPI_GetCRC +* Description : Returns the transmit or the receive CRC register value for the specified SPI. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* SPI_CRC: specifies the CRC register to be read. +* SPI_CRC_Tx: Selects Tx CRC register. +* SPI_CRC_Rx: Selects Rx CRC register. +* Return : crcreg: The selected CRC register value. +*******************************************************************************/ +uint16_t SPI_GetCRC(SPI_TypeDef* SPIx, uint8_t SPI_CRC) +{ + uint16_t crcreg = 0; + + if (SPI_CRC != SPI_CRC_Rx) + { + crcreg = SPIx->TCRCR; + } + else + { + crcreg = SPIx->RCRCR; + } + + return crcreg; +} + +/******************************************************************************* +* Function Name : SPI_GetCRCPolynomial +* Description : Returns the CRC Polynomial register value for the specified SPI. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* Return : SPIx->CRCR: The CRC Polynomial register value. +*******************************************************************************/ +uint16_t SPI_GetCRCPolynomial(SPI_TypeDef* SPIx) +{ + return SPIx->CRCR; +} + +/******************************************************************************* +* Function Name : SPI_BiDirectionalLineConfig +* Description : Selects the data transfer direction in bi-directional mode +* for the specified SPI. +* Input : SPIx: where x can be 1, 2 or 3 to select the SPI peripheral. +* SPI_Direction: specifies the data transfer direction in +* bi-directional mode. +* SPI_Direction_Tx: Selects Tx transmission direction. +* SPI_Direction_Rx: Selects Rx receive direction. +* Return : None +*******************************************************************************/ +void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction) +{ + if (SPI_Direction == SPI_Direction_Tx) + { + SPIx->CTLR1 |= SPI_Direction_Tx; + } + else + { + SPIx->CTLR1 &= SPI_Direction_Rx; + } +} + +/******************************************************************************* +* Function Name : SPI_I2S_GetFlagStatus +* Description : Checks whether the specified SPI/I2S flag is set or not. +* Input : SPIx: where x can be +* - 1, 2 or 3 in SPI mode. +* - 2 or 3 in I2S mode. +* SPI_I2S_FLAG: specifies the SPI/I2S flag to check. +* SPI_I2S_FLAG_TXE: Transmit buffer empty flag. +* SPI_I2S_FLAG_RXNE: Receive buffer not empty flag. +* SPI_I2S_FLAG_BSY: Busy flag. +* SPI_I2S_FLAG_OVR: Overrun flag. +* SPI_FLAG_MODF: Mode Fault flag. +* SPI_FLAG_CRCERR: CRC Error flag. +* I2S_FLAG_UDR: Underrun Error flag. +* I2S_FLAG_CHSIDE: Channel Side flag. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +FlagStatus SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG) +{ + FlagStatus bitstatus = RESET; + + if ((SPIx->STATR & SPI_I2S_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : SPI_I2S_ClearFlag +* Description : Clears the SPIx CRC Error (CRCERR) flag. +* Input : SPIx: where x can be +* - 1, 2 or 3 in SPI mode. +* - 2 or 3 in I2S mode. +* SPI_I2S_FLAG: specifies the SPI flag to clear. +* SPI_FLAG_CRCERR: CRC Error flag. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +void SPI_I2S_ClearFlag(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG) +{ + SPIx->STATR = (uint16_t)~SPI_I2S_FLAG; +} + +/******************************************************************************* +* Function Name : SPI_I2S_GetITStatus +* Description : Clears the SPIx CRC Error (CRCERR) flag. +* Input : SPIx: where x can be +* - 1, 2 or 3 in SPI mode. +* - 2 or 3 in I2S mode. +* SPI_I2S_IT: specifies the SPI/I2S interrupt source to check.. +* SPI_I2S_IT_TXE: Transmit buffer empty interrupt. +* SPI_I2S_IT_RXNE: Receive buffer not empty interrupt. +* SPI_I2S_IT_OVR: Overrun interrupt. +* SPI_IT_MODF: Mode Fault interrupt. +* SPI_IT_CRCERR: CRC Error interrupt. +* I2S_IT_UDR: Underrun Error interrupt. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +ITStatus SPI_I2S_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT) +{ + ITStatus bitstatus = RESET; + uint16_t itpos = 0, itmask = 0, enablestatus = 0; + + itpos = 0x01 << (SPI_I2S_IT & 0x0F); + itmask = SPI_I2S_IT >> 4; + itmask = 0x01 << itmask; + enablestatus = (SPIx->CTLR2 & itmask) ; + + if (((SPIx->STATR & itpos) != (uint16_t)RESET) && enablestatus) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : SPI_I2S_ClearITPendingBit +* Description : Clears the SPIx CRC Error (CRCERR) interrupt pending bit. +* Input : SPIx: where x can be +* - 1, 2 or 3 in SPI mode. +* SPI_I2S_IT: specifies the SPI interrupt pending bit to clear. +* SPI_IT_CRCERR: CRC Error interrupt. +* Return : FlagStatus: SET or RESET. +*******************************************************************************/ +void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT) +{ + uint16_t itpos = 0; + + itpos = 0x01 << (SPI_I2S_IT & 0x0F); + SPIx->STATR = (uint16_t)~itpos; +} + + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_tim.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_tim.c new file mode 100644 index 0000000000..80c4a50a09 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_tim.c @@ -0,0 +1,2079 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_tim.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the TIM firmware functions. +*******************************************************************************/ +#include "ch32v10x_tim.h" +#include "ch32v10x_rcc.h" + +/* TIM registers bit mask */ +#define SMCFGR_ETR_Mask ((uint16_t)0x00FF) +#define CHCTLR_Offset ((uint16_t)0x0018) +#define CCER_CCE_Set ((uint16_t)0x0001) +#define CCER_CCNE_Set ((uint16_t)0x0004) + +static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); +static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter); + +/******************************************************************************* +* Function Name : TIM_DeInit +* Description : Deinitializes the TIMx peripheral registers to their default +* reset values. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* Return : None +*******************************************************************************/ +void TIM_DeInit(TIM_TypeDef* TIMx) +{ + if (TIMx == TIM1) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE); + } + else if (TIMx == TIM2) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE); + } + else if (TIMx == TIM3) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE); + } + else if (TIMx == TIM4) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE); + } +} + +/******************************************************************************* +* Function Name : TIM_TimeBaseInit +* Description : Initializes the TIMx Time Base Unit peripheral according to +* the specified parameters in the TIM_TimeBaseInitStruct. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef +* structure. +* Return : None +*******************************************************************************/ +void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) +{ + uint16_t tmpcr1 = 0; + + tmpcr1 = TIMx->CTLR1; + + if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3)|| (TIMx == TIM4)) + { + tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_DIR | TIM_CMS))); + tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_CounterMode; + } + + tmpcr1 &= (uint16_t)(~((uint16_t)TIM_CTLR1_CKD)); + tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_ClockDivision; + + TIMx->CTLR1 = tmpcr1; + TIMx->ATRLR = TIM_TimeBaseInitStruct->TIM_Period ; + TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler; + + if (TIMx == TIM1) + { + TIMx->RPTCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter; + } + + TIMx->SWEVGR = TIM_PSCReloadMode_Immediate; +} + +/******************************************************************************* +* Function Name : TIM_OC1Init +* Description : Initializes the TIMx Channel1 according to the specified +* parameters in the TIM_OCInitStruct. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + TIMx->CCER &= (uint16_t)(~(uint16_t)TIM_CC1E); + tmpccer = TIMx->CCER; + tmpcr2 = TIMx->CTLR2; + tmpccmrx = TIMx->CHCTLR1; + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_OC1M)); + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CC1S)); + tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC1P)); + tmpccer |= TIM_OCInitStruct->TIM_OCPolarity; + tmpccer |= TIM_OCInitStruct->TIM_OutputState; + + if(TIMx == TIM1) + { + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC1NP)); + tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity; + + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC1NE)); + tmpccer |= TIM_OCInitStruct->TIM_OutputNState; + + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS1)); + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS1N)); + + tmpcr2 |= TIM_OCInitStruct->TIM_OCIdleState; + tmpcr2 |= TIM_OCInitStruct->TIM_OCNIdleState; + } + + TIMx->CTLR2 = tmpcr2; + TIMx->CHCTLR1 = tmpccmrx; + TIMx->CH1CVR = TIM_OCInitStruct->TIM_Pulse; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC2Init +* Description : Initializes the TIMx Channel2 according to the specified +* parameters in the TIM_OCInitStruct. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CC2E)); + tmpccer = TIMx->CCER; + tmpcr2 = TIMx->CTLR2; + tmpccmrx = TIMx->CHCTLR1; + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_OC2M)); + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CC2S)); + tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8); + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC2P)); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 4); + + if(TIMx == TIM1) + { + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC2NP)); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4); + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC2NE)); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4); + + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS2)); + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS2N)); + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 2); + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2); + } + + TIMx->CTLR2 = tmpcr2; + TIMx->CHCTLR1 = tmpccmrx; + TIMx->CH2CVR = TIM_OCInitStruct->TIM_Pulse; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC3Init +* Description : Initializes the TIMx Channel3 according to the specified +* parameters in the TIM_OCInitStruct. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CC3E)); + tmpccer = TIMx->CCER; + tmpcr2 = TIMx->CTLR2; + tmpccmrx = TIMx->CHCTLR2; + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_OC3M)); + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CC3S)); + tmpccmrx |= TIM_OCInitStruct->TIM_OCMode; + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC3P)); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8); + + if(TIMx == TIM1) + { + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC3NP)); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8); + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC3NE)); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8); + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS3)); + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS3N)); + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4); + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4); + } + + TIMx->CTLR2 = tmpcr2; + TIMx->CHCTLR2 = tmpccmrx; + TIMx->CH3CVR = TIM_OCInitStruct->TIM_Pulse; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC4Init +* Description : Initializes the TIMx Channel4 according to the specified +* parameters in the TIM_OCInitStruct. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0; + + TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CC4E)); + tmpccer = TIMx->CCER; + tmpcr2 = TIMx->CTLR2; + tmpccmrx = TIMx->CHCTLR2; + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_OC4M)); + tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CC4S)); + tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8); + tmpccer &= (uint16_t)(~((uint16_t)TIM_CC4P)); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 12); + tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 12); + + if(TIMx == TIM1) + { + tmpcr2 &= (uint16_t)(~((uint16_t)TIM_OIS4)); + tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6); + } + + TIMx->CTLR2 = tmpcr2; + TIMx->CHCTLR2 = tmpccmrx; + TIMx->CH4CVR = TIM_OCInitStruct->TIM_Pulse; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_ICInit +* Description : IInitializes the TIM peripheral according to the specified +* parameters in the TIM_ICInitStruct. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) + { + TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2) + { + TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3) + { + TI3_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else + { + TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, + TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } +} + +/******************************************************************************* +* Function Name : TIM_PWMIConfig +* Description : Configures the TIM peripheral according to the specified +* parameters in the TIM_ICInitStruct to measure an external PWM signal. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + uint16_t icoppositepolarity = TIM_ICPolarity_Rising; + uint16_t icoppositeselection = TIM_ICSelection_DirectTI; + + if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising) + { + icoppositepolarity = TIM_ICPolarity_Falling; + } + else + { + icoppositepolarity = TIM_ICPolarity_Rising; + } + + if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI) + { + icoppositeselection = TIM_ICSelection_IndirectTI; + } + else + { + icoppositeselection = TIM_ICSelection_DirectTI; + } + + if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1) + { + TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } + else + { + TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection, + TIM_ICInitStruct->TIM_ICFilter); + TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter); + TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler); + } +} + +/******************************************************************************* +* Function Name : TIM_BDTRConfig +* Description : Configures the: Break feature, dead time, Lock level, the OSSI, +* the OSSR State and the AOE(automatic output enable). +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct) +{ + TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState | + TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime | + TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity | + TIM_BDTRInitStruct->TIM_AutomaticOutput; +} + +/******************************************************************************* +* Function Name : TIM_TimeBaseStructInit +* Description : Fills each TIM_TimeBaseInitStruct member with its default value. +* Input : TIM_TimeBaseInitStruct : pointer to a TIM_TimeBaseInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct) +{ + TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF; + TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000; + TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1; + TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000; +} + +/******************************************************************************* +* Function Name : TIM_OCStructInit +* Description : Fills each TIM_OCInitStruct member with its default value. +* Input : TIM_OCInitStruct : pointer to a TIM_OCInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct) +{ + TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing; + TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable; + TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable; + TIM_OCInitStruct->TIM_Pulse = 0x0000; + TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High; + TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High; + TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset; + TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset; +} + +/******************************************************************************* +* Function Name : TIM_ICStructInit +* Description : Fills each TIM_ICInitStruct member with its default value. +* Input : TIM_ICInitStruct : pointer to a TIM_ICInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct) +{ + TIM_ICInitStruct->TIM_Channel = TIM_Channel_1; + TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising; + TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI; + TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1; + TIM_ICInitStruct->TIM_ICFilter = 0x00; +} + +/******************************************************************************* +* Function Name : TIM_BDTRStructInit +* Description : Fills each TIM_BDTRInitStruct member with its default value. +* Input : TIM_BDTRInitStruct : pointer to a TIM_BDTRInitTypeDef structure. +* Return : None +*******************************************************************************/ +void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct) +{ + TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable; + TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable; + TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF; + TIM_BDTRInitStruct->TIM_DeadTime = 0x00; + TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable; + TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low; + TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; +} + +/******************************************************************************* +* Function Name : TIM_Cmd +* Description : Fills each TIM_BDTRInitStruct member with its default value. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->CTLR1 |= TIM_CEN; + } + else + { + TIMx->CTLR1 &= (uint16_t)(~((uint16_t)TIM_CEN)); + } +} + +/******************************************************************************* +* Function Name : TIM_CtrlPWMOutputs +* Description : Enables or disables the TIM peripheral Main Outputs. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->BDTR |= TIM_MOE; + } + else + { + TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_MOE)); + } +} + +/******************************************************************************* +* Function Name : TIM_ITConfig +* Description : Enables or disables the specified TIM interrupts. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_IT: specifies the TIM interrupts sources to be enabled or disabled. +* TIM_IT_Update: TIM update Interrupt source. +* TIM_IT_CC1: TIM Capture Compare 1 Interrupt source. +* TIM_IT_CC2: TIM Capture Compare 2 Interrupt source +* TIM_IT_CC3: TIM Capture Compare 3 Interrupt source. +* TIM_IT_CC4: TIM Capture Compare 4 Interrupt source. +* TIM_IT_COM: TIM Commutation Interrupt source. +* TIM_IT_Trigger: TIM Trigger Interrupt source. +* TIM_IT_Break: TIM Break Interrupt source. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->DMAINTENR |= TIM_IT; + } + else + { + TIMx->DMAINTENR &= (uint16_t)~TIM_IT; + } +} + +/******************************************************************************* +* Function Name : TIM_GenerateEvent +* Description : Configures the TIMx event to be generate by software. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_EventSource: specifies the event source. +* TIM_EventSource_Update: Timer update Event source. +* TIM_EventSource_CC1: Timer Capture Compare 1 Event source. +* TIM_EventSource_CC2: Timer Capture Compare 2 Event source. +* TIM_EventSource_CC3: Timer Capture Compare 3 Event source. +* TIM_EventSource_CC4: Timer Capture Compare 4 Event source. +* TIM_EventSource_COM: Timer COM event source. +* TIM_EventSource_Trigger: Timer Trigger Event source. +* TIM_EventSource_Break: Timer Break event source. +* Return : None +*******************************************************************************/ +void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource) +{ + TIMx->SWEVGR = TIM_EventSource; +} + +/******************************************************************************* +* Function Name : TIM_DMAConfig +* Description : Configures the TIMx's DMA interface. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_DMABase: DMA Base address. +* TIM_DMABase_CR. +* TIM_DMABase_CR2. +* TIM_DMABase_SMCR. +* TIM_DMABase_DIER. +* TIM1_DMABase_SR. +* TIM_DMABase_EGR. +* TIM_DMABase_CCMR1. +* TIM_DMABase_CCMR2. +* TIM_DMABase_CCER. +* TIM_DMABase_CNT. +* TIM_DMABase_PSC. +* TIM_DMABase_CCR1. +* TIM_DMABase_CCR2. +* TIM_DMABase_CCR3. +* TIM_DMABase_CCR4. +* TIM_DMABase_BDTR. +* TIM_DMABase_DCR. +* TIM_DMABurstLength: DMA Burst length. +* TIM_DMABurstLength_1Transfer. +* TIM_DMABurstLength_18Transfers. +* Return : None +*******************************************************************************/ +void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength) +{ + TIMx->DMACFGR = TIM_DMABase | TIM_DMABurstLength; +} + +/******************************************************************************* +* Function Name : TIM_DMACmd +* Description : Enables or disables the TIMx's DMA Requests. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_DMASource: specifies the DMA Request sources. +* TIM_DMA_Update: TIM update Interrupt source. +* TIM_DMA_CC1: TIM Capture Compare 1 DMA source. +* TIM_DMA_CC2: TIM Capture Compare 2 DMA source. +* TIM_DMA_CC3: TIM Capture Compare 3 DMA source. +* TIM_DMA_CC4: TIM Capture Compare 4 DMA source. +* TIM_DMA_COM: TIM Commutation DMA source. +* TIM_DMA_Trigger: TIM Trigger DMA source. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->DMAINTENR |= TIM_DMASource; + } + else + { + TIMx->DMAINTENR &= (uint16_t)~TIM_DMASource; + } +} + +/******************************************************************************* +* Function Name : TIM_InternalClockConfig +* Description : Configures the TIMx internal Clock. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* Return : None +*******************************************************************************/ +void TIM_InternalClockConfig(TIM_TypeDef* TIMx) +{ + TIMx->SMCFGR &= (uint16_t)(~((uint16_t)TIM_SMS)); +} + +/******************************************************************************* +* Function Name : TIM_ITRxExternalClockConfig +* Description : Configures the TIMx Internal Trigger as External Clock. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_InputTriggerSource: Trigger source. +* TIM_TS_ITR0: Internal Trigger 0. +* TIM_TS_ITR1: Internal Trigger 1. +* TIM_TS_ITR2: Internal Trigger 2. +* TIM_TS_ITR3: Internal Trigger 3. +* Return : None +*******************************************************************************/ +void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource) +{ + TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource); + TIMx->SMCFGR |= TIM_SlaveMode_External1; +} + +/******************************************************************************* +* Function Name : TIM_TIxExternalClockConfig +* Description : Configures the TIMx Trigger as External Clock. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_TIxExternalCLKSource: Trigger source. +* TIM_TIxExternalCLK1Source_TI1ED: TI1 Edge Detector. +* TIM_TIxExternalCLK1Source_TI1: Filtered Timer Input 1. +* TIM_TIxExternalCLK1Source_TI2: Filtered Timer Input 2. +* TIM_ICPolarity: specifies the TIx Polarity. +* TIM_ICPolarity_Rising. +* TIM_ICPolarity_Falling. +* TIM_DMA_COM: TIM Commutation DMA source. +* TIM_DMA_Trigger: TIM Trigger DMA source. +* ICFilter : specifies the filter value. +* This parameter must be a value between 0x0 and 0xF. +* Return : None +*******************************************************************************/ +void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, + uint16_t TIM_ICPolarity, uint16_t ICFilter) +{ + if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2) + { + TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); + } + else + { + TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter); + } + + TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource); + TIMx->SMCFGR |= TIM_SlaveMode_External1; +} + +/******************************************************************************* +* Function Name : TIM_ETRClockMode1Config +* Description : Configures the External clock Mode1. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ExtTRGPrescaler: The external Trigger Prescaler. +* TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. +* TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. +* TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. +* TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. +* TIM_ExtTRGPolarity: The external Trigger Polarity. +* TIM_ExtTRGPolarity_Inverted: active low or falling edge active. +* TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. +* ExtTRGFilter: External Trigger Filter. +* This parameter must be a value between 0x0 and 0xF. +* Return : None +*******************************************************************************/ +void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter) +{ + uint16_t tmpsmcr = 0; + + TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); + tmpsmcr = TIMx->SMCFGR; + tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMS)); + tmpsmcr |= TIM_SlaveMode_External1; + tmpsmcr &= (uint16_t)(~((uint16_t)TIM_TS)); + tmpsmcr |= TIM_TS_ETRF; + TIMx->SMCFGR = tmpsmcr; +} + +/******************************************************************************* +* Function Name : TIM_ETRClockMode2Config +* Description : Configures the External clock Mode2. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ExtTRGPrescaler: The external Trigger Prescaler. +* TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. +* TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. +* TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. +* TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. +* TIM_ExtTRGPolarity: The external Trigger Polarity. +* TIM_ExtTRGPolarity_Inverted: active low or falling edge active. +* TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. +* ExtTRGFilter: External Trigger Filter. +* This parameter must be a value between 0x0 and 0xF. +* Return : None +*******************************************************************************/ +void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, + uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter) +{ + TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter); + TIMx->SMCFGR |= TIM_ECE; +} + +/******************************************************************************* +* Function Name : TIM_ETRConfig +* Description : Configures the TIMx External Trigger (ETR). +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ExtTRGPrescaler: The external Trigger Prescaler. +* TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF. +* TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2. +* TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4. +* TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8. +* TIM_ExtTRGPolarity: The external Trigger Polarity. +* TIM_ExtTRGPolarity_Inverted: active low or falling edge active. +* TIM_ExtTRGPolarity_NonInverted: active high or rising edge active. +* ExtTRGFilter: External Trigger Filter. +* This parameter must be a value between 0x0 and 0xF. +* Return : None +*******************************************************************************/ +void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, + uint16_t ExtTRGFilter) +{ + uint16_t tmpsmcr = 0; + + tmpsmcr = TIMx->SMCFGR; + tmpsmcr &= SMCFGR_ETR_Mask; + tmpsmcr |= (uint16_t)(TIM_ExtTRGPrescaler | (uint16_t)(TIM_ExtTRGPolarity | (uint16_t)(ExtTRGFilter << (uint16_t)8))); + TIMx->SMCFGR = tmpsmcr; +} + +/******************************************************************************* +* Function Name : TIM_PrescalerConfig +* Description : Configures the TIMx Prescaler. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* Prescaler: specifies the Prescaler Register value. +* TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode. +* TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode. +* TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event. +* TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediately. +* Return : None +*******************************************************************************/ +void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode) +{ + TIMx->PSC = Prescaler; + TIMx->SWEVGR = TIM_PSCReloadMode; +} + +/******************************************************************************* +* Function Name : TIM_CounterModeConfig +* Description : Specifies the TIMx Counter Mode to be used. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_CounterMode: specifies the Counter Mode to be used. +* TIM_CounterMode_Up: TIM Up Counting Mode. +* TIM_CounterMode_Down: TIM Down Counting Mode. +* TIM_CounterMode_CenterAligned1: TIM Center Aligned Mode1. +* TIM_CounterMode_CenterAligned2: TIM Center Aligned Mode2. +* TIM_CounterMode_CenterAligned3: TIM Center Aligned Mode3. +* Return : None +*******************************************************************************/ +void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode) +{ + uint16_t tmpcr1 = 0; + + tmpcr1 = TIMx->CTLR1; + tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_DIR | TIM_CMS))); + tmpcr1 |= TIM_CounterMode; + TIMx->CTLR1 = tmpcr1; +} + +/******************************************************************************* +* Function Name : TIM_SelectInputTrigger +* Description : Selects the Input Trigger source. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_InputTriggerSource: The Input Trigger source. +* TIM_TS_ITR0: Internal Trigger 0. +* TIM_TS_ITR1: Internal Trigger 1. +* TIM_TS_ITR2: Internal Trigger 2. +* TIM_TS_ITR3: Internal Trigger 3. +* TIM_TS_TI1F_ED: TI1 Edge Detector. +* TIM_TS_TI1FP1: Filtered Timer Input 1. +* TIM_TS_TI2FP2: Filtered Timer Input 2. +* TIM_TS_ETRF: External Trigger input. +* Return : None +*******************************************************************************/ +void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource) +{ + uint16_t tmpsmcr = 0; + + tmpsmcr = TIMx->SMCFGR; + tmpsmcr &= (uint16_t)(~((uint16_t)TIM_TS)); + tmpsmcr |= TIM_InputTriggerSource; + TIMx->SMCFGR = tmpsmcr; +} + +/******************************************************************************* +* Function Name : TIM_EncoderInterfaceConfig +* Description : Configures the TIMx Encoder Interface. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_EncoderMode: specifies the TIMx Encoder Mode. +* TIM_EncoderMode_TI1: Counter counts on TI1FP1 edge depending +* on TI2FP2 level. +* TIM_EncoderMode_TI2: Counter counts on TI2FP2 edge depending +* on TI1FP1 level. +* TIM_EncoderMode_TI12: Counter counts on both TI1FP1 and +* TI2FP2 edges depending. +* TIM_IC1Polarity: specifies the IC1 Polarity. +* TIM_ICPolarity_Falling: IC Falling edge. +* TTIM_ICPolarity_Rising: IC Rising edge. +* TIM_IC2Polarity: specifies the IC2 Polarity. +* TIM_ICPolarity_Falling: IC Falling edge. +* TIM_ICPolarity_Rising: IC Rising edge. +* Return : None +*******************************************************************************/ +void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, + uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity) +{ + uint16_t tmpsmcr = 0; + uint16_t tmpccmr1 = 0; + uint16_t tmpccer = 0; + + tmpsmcr = TIMx->SMCFGR; + tmpccmr1 = TIMx->CHCTLR1; + tmpccer = TIMx->CCER; + tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMS)); + tmpsmcr |= TIM_EncoderMode; + tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CC1S)) & (uint16_t)(~((uint16_t)TIM_CC2S))); + tmpccmr1 |= TIM_CC1S_0 | TIM_CC2S_0; + tmpccer &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CC1P)) & ((uint16_t)~((uint16_t)TIM_CC2P))); + tmpccer |= (uint16_t)(TIM_IC1Polarity | (uint16_t)(TIM_IC2Polarity << (uint16_t)4)); + TIMx->SMCFGR = tmpsmcr; + TIMx->CHCTLR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_ForcedOC1Config +* Description : Forces the TIMx output 1 waveform to active or inactive level. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ForcedAction: specifies the forced Action to be set to the +* output waveform. +* TIM_ForcedAction_Active: Force active level on OC1REF. +* TIM_ForcedAction_InActive: Force inactive level on OC1REF. +* Return : None +*******************************************************************************/ +void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr1 = 0; + + tmpccmr1 = TIMx->CHCTLR1; + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_OC1M); + tmpccmr1 |= TIM_ForcedAction; + TIMx->CHCTLR1 = tmpccmr1; +} + +/******************************************************************************* +* Function Name : TIM_ForcedOC2Config +* Description : Forces the TIMx output 2 waveform to active or inactive level. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ForcedAction: specifies the forced Action to be set to the +* output waveform. +* TIM_ForcedAction_Active: Force active level on OC2REF. +* TIM_ForcedAction_InActive: Force inactive level on OC2REF. +* Return : None +*******************************************************************************/ +void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr1 = 0; + + tmpccmr1 = TIMx->CHCTLR1; + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_OC2M); + tmpccmr1 |= (uint16_t)(TIM_ForcedAction << 8); + TIMx->CHCTLR1 = tmpccmr1; +} + +/******************************************************************************* +* Function Name : TIM_ForcedOC3Config +* Description : Forces the TIMx output 3 waveform to active or inactive level. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ForcedAction: specifies the forced Action to be set to the +* output waveform. +* TIM_ForcedAction_Active: Force active level on OC3REF. +* TIM_ForcedAction_InActive: Force inactive level on OC3REF. +* Return : None +*******************************************************************************/ +void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr2 = 0; + + tmpccmr2 = TIMx->CHCTLR2; + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_OC3M); + tmpccmr2 |= TIM_ForcedAction; + TIMx->CHCTLR2 = tmpccmr2; +} + +/******************************************************************************* +* Function Name : TIM_ForcedOC4Config +* Description : Forces the TIMx output 4 waveform to active or inactive level. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_ForcedAction: specifies the forced Action to be set to the +* output waveform. +* TIM_ForcedAction_Active: Force active level on OC4REF. +* TIM_ForcedAction_InActive: Force inactive level on OC4REF. +* Return : None +*******************************************************************************/ +void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction) +{ + uint16_t tmpccmr2 = 0; + + tmpccmr2 = TIMx->CHCTLR2; + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_OC4M); + tmpccmr2 |= (uint16_t)(TIM_ForcedAction << 8); + TIMx->CHCTLR2 = tmpccmr2; +} + +/******************************************************************************* +* Function Name : TIM_ARRPreloadConfig +* Description : Enables or disables TIMx peripheral Preload register on ARR. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->CTLR1 |= TIM_ARPE; + } + else + { + TIMx->CTLR1 &= (uint16_t)~((uint16_t)TIM_ARPE); + } +} + +/******************************************************************************* +* Function Name : TIM_SelectCOM +* Description : Selects the TIM peripheral Commutation event. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->CTLR2 |= TIM_CCUS; + } + else + { + TIMx->CTLR2 &= (uint16_t)~((uint16_t)TIM_CCUS); + } +} + +/******************************************************************************* +* Function Name : TIM_SelectCCDMA +* Description : Selects the TIMx peripheral Capture Compare DMA source. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->CTLR2 |= TIM_CCDS; + } + else + { + TIMx->CTLR2 &= (uint16_t)~((uint16_t)TIM_CCDS); + } +} + +/******************************************************************************* +* Function Name : TIM_CCPreloadControl +* Description : Sets or Resets the TIM peripheral Capture Compare Preload Control bit. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->CTLR2 |= TIM_CCPC; + } + else + { + TIMx->CTLR2 &= (uint16_t)~((uint16_t)TIM_CCPC); + } +} + +/******************************************************************************* +* Function Name : TIM_OC1PreloadConfig +* Description : Enables or disables the TIMx peripheral Preload register on CCR1. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCPreload: new state of the TIMx peripheral Preload register. +* TIM_OCPreload_Enable. +* TIM_OCPreload_Disable. +* Return : None +*******************************************************************************/ +void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr1 = 0; + + tmpccmr1 = TIMx->CHCTLR1; + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_OC1PE); + tmpccmr1 |= TIM_OCPreload; + TIMx->CHCTLR1 = tmpccmr1; +} + +/******************************************************************************* +* Function Name : TIM_OC2PreloadConfig +* Description : Enables or disables the TIMx peripheral Preload register on CCR1. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCPreload: new state of the TIMx peripheral Preload register. +* TIM_OCPreload_Enable. +* TIM_OCPreload_Disable. +* Return : None +*******************************************************************************/ +void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr1 = 0; + + tmpccmr1 = TIMx->CHCTLR1; + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_OC2PE); + tmpccmr1 |= (uint16_t)(TIM_OCPreload << 8); + TIMx->CHCTLR1 = tmpccmr1; +} + +/******************************************************************************* +* Function Name : TIM_OC3PreloadConfig +* Description : Enables or disables the TIMx peripheral Preload register on CCR3. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCPreload: new state of the TIMx peripheral Preload register. +* TIM_OCPreload_Enable. +* TIM_OCPreload_Disable. +* Return : None +*******************************************************************************/ +void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr2 = 0; + + tmpccmr2 = TIMx->CHCTLR2; + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_OC3PE); + tmpccmr2 |= TIM_OCPreload; + TIMx->CHCTLR2 = tmpccmr2; +} + +/******************************************************************************* +* Function Name : TIM_OC4PreloadConfig +* Description : Enables or disables the TIMx peripheral Preload register on CCR4. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCPreload: new state of the TIMx peripheral Preload register. +* TIM_OCPreload_Enable. +* TIM_OCPreload_Disable. +* Return : None +*******************************************************************************/ +void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload) +{ + uint16_t tmpccmr2 = 0; + + tmpccmr2 = TIMx->CHCTLR2; + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_OC4PE); + tmpccmr2 |= (uint16_t)(TIM_OCPreload << 8); + TIMx->CHCTLR2 = tmpccmr2; +} + +/******************************************************************************* +* Function Name : TIM_OC1FastConfig +* Description : Configures the TIMx Output Compare 1 Fast feature. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCFast: new state of the Output Compare Fast Enable Bit. +* TIM_OCFast_Enable: TIM output compare fast enable. +* TIM_OCFast_Disable: TIM output compare fast disable. +* Return : None +*******************************************************************************/ +void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr1 = 0; + + tmpccmr1 = TIMx->CHCTLR1; + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_OC1FE); + tmpccmr1 |= TIM_OCFast; + TIMx->CHCTLR1 = tmpccmr1; +} + +/******************************************************************************* +* Function Name : TIM_OC2FastConfig +* Description : Configures the TIMx Output Compare 2 Fast feature. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCFast: new state of the Output Compare Fast Enable Bit. +* TIM_OCFast_Enable: TIM output compare fast enable. +* TIM_OCFast_Disable: TIM output compare fast disable. +* Return : None +*******************************************************************************/ +void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr1 = 0; + + tmpccmr1 = TIMx->CHCTLR1; + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_OC2FE); + tmpccmr1 |= (uint16_t)(TIM_OCFast << 8); + TIMx->CHCTLR1 = tmpccmr1; +} + +/******************************************************************************* +* Function Name : TIM_OC3FastConfig +* Description : Configures the TIMx Output Compare 3 Fast feature. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCFast: new state of the Output Compare Fast Enable Bit. +* TIM_OCFast_Enable: TIM output compare fast enable. +* TIM_OCFast_Disable: TIM output compare fast disable. +* Return : None +*******************************************************************************/ +void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr2 = 0; + + tmpccmr2 = TIMx->CHCTLR2; + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_OC3FE); + tmpccmr2 |= TIM_OCFast; + TIMx->CHCTLR2 = tmpccmr2; +} + +/******************************************************************************* +* Function Name : TIM_OC4FastConfig +* Description : Configures the TIMx Output Compare 4 Fast feature. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCFast: new state of the Output Compare Fast Enable Bit. +* TIM_OCFast_Enable: TIM output compare fast enable. +* TIM_OCFast_Disable: TIM output compare fast disable. +* Return : None +*******************************************************************************/ +void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast) +{ + uint16_t tmpccmr2 = 0; + + tmpccmr2 = TIMx->CHCTLR2; + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_OC4FE); + tmpccmr2 |= (uint16_t)(TIM_OCFast << 8); + TIMx->CHCTLR2 = tmpccmr2; +} + +/******************************************************************************* +* Function Name : TIM_ClearOC1Ref +* Description : Clears or safeguards the OCREF1 signal on an external event. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCClear: new state of the Output Compare Clear Enable Bit. +* TIM_OCClear_Enable: TIM Output clear enable. +* TIM_OCClear_Disable: TIM Output clear disable. +* Return : None +*******************************************************************************/ +void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr1 = 0; + + tmpccmr1 = TIMx->CHCTLR1; + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_OC1CE); + tmpccmr1 |= TIM_OCClear; + TIMx->CHCTLR1 = tmpccmr1; +} + +/******************************************************************************* +* Function Name : TIM_ClearOC2Ref +* Description : Clears or safeguards the OCREF2 signal on an external event. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCClear: new state of the Output Compare Clear Enable Bit. +* TIM_OCClear_Enable: TIM Output clear enable. +* TIM_OCClear_Disable: TIM Output clear disable. +* Return : None +*******************************************************************************/ +void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr1 = 0; + + tmpccmr1 = TIMx->CHCTLR1; + tmpccmr1 &= (uint16_t)~((uint16_t)TIM_OC2CE); + tmpccmr1 |= (uint16_t)(TIM_OCClear << 8); + TIMx->CHCTLR1 = tmpccmr1; +} + +/******************************************************************************* +* Function Name : TIM_ClearOC3Ref +* Description : Clears or safeguards the OCREF3 signal on an external event. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCClear: new state of the Output Compare Clear Enable Bit. +* TIM_OCClear_Enable: TIM Output clear enable. +* TIM_OCClear_Disable: TIM Output clear disable. +* Return : None +*******************************************************************************/ +void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr2 = 0; + + tmpccmr2 = TIMx->CHCTLR2; + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_OC3CE); + tmpccmr2 |= TIM_OCClear; + TIMx->CHCTLR2 = tmpccmr2; +} + +/******************************************************************************* +* Function Name : TIM_ClearOC4Ref +* Description : Clears or safeguards the OCREF4 signal on an external event. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCClear: new state of the Output Compare Clear Enable Bit. +* TIM_OCClear_Enable: TIM Output clear enable. +* TIM_OCClear_Disable: TIM Output clear disable. +* Return : None +*******************************************************************************/ +void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear) +{ + uint16_t tmpccmr2 = 0; + + tmpccmr2 = TIMx->CHCTLR2; + tmpccmr2 &= (uint16_t)~((uint16_t)TIM_OC4CE); + tmpccmr2 |= (uint16_t)(TIM_OCClear << 8); + TIMx->CHCTLR2 = tmpccmr2; +} + +/******************************************************************************* +* Function Name : TIM_OC1PolarityConfig +* Description : Configures the TIMx channel 1 polarity. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCPolarity: specifies the OC1 Polarity. +* TIM_OCPolarity_High: Output Compare active high. +* TIM_OCPolarity_Low: Output Compare active low. +* Return : None +*******************************************************************************/ +void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + tmpccer = TIMx->CCER; + tmpccer &= (uint16_t)~((uint16_t)TIM_CC1P); + tmpccer |= TIM_OCPolarity; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC1NPolarityConfig +* Description : Configures the TIMx channel 1 polarity. +* Input : TIMx: where x can be 1 to select the TIM peripheral. +* TIM_OCNPolarity: specifies the OC1N Polarity. +* TIM_OCNPolarity_High: Output Compare active high. +* TIM_OCNPolarity_Low: Output Compare active low. +* Return : None +*******************************************************************************/ +void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + + tmpccer = TIMx->CCER; + tmpccer &= (uint16_t)~((uint16_t)TIM_CC1NP); + tmpccer |= TIM_OCNPolarity; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC2PolarityConfig +* Description : Configures the TIMx channel 2 polarity. +* Input : TIMx: where x can be 1 to 4 to select the TIM peripheral. +* TIM_OCPolarity: specifies the OC2 Polarity. +* TIM_OCPolarity_High: Output Compare active high. +* TIM_OCPolarity_Low: Output Compare active low. +* Return : None +*******************************************************************************/ +void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + tmpccer = TIMx->CCER; + tmpccer &= (uint16_t)~((uint16_t)TIM_CC2P); + tmpccer |= (uint16_t)(TIM_OCPolarity << 4); + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC2NPolarityConfig +* Description : Configures the TIMx Channel 2N polarity. +* Input : TIMx: where x can be 1 to select the TIM peripheral. +* TIM_OCNPolarity: specifies the OC2N Polarity. +* TIM_OCNPolarity_High: Output Compare active high. +* TIM_OCNPolarity_Low: Output Compare active low. +* Return : None +*******************************************************************************/ +void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + + tmpccer = TIMx->CCER; + tmpccer &= (uint16_t)~((uint16_t)TIM_CC2NP); + tmpccer |= (uint16_t)(TIM_OCNPolarity << 4); + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC3PolarityConfig +* Description : Configures the TIMx Channel 3 polarity. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_OCPolarity: specifies the OC3 Polarity. +* TIM_OCPolarity_High: Output Compare active high. +* TIM_OCPolarity_Low: Output Compare active low. +* Return : None +*******************************************************************************/ +void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + tmpccer = TIMx->CCER; + tmpccer &= (uint16_t)~((uint16_t)TIM_CC3P); + tmpccer |= (uint16_t)(TIM_OCPolarity << 8); + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC3NPolarityConfig +* Description : Configures the TIMx Channel 3N polarity. +* Input : TIMx: where x can be 1 to select the TIM peripheral. +* TIM_OCNPolarity: specifies the OC2N Polarity. +* TIM_OCNPolarity_High: Output Compare active high. +* TIM_OCNPolarity_Low: Output Compare active low. +* Return : None +*******************************************************************************/ +void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity) +{ + uint16_t tmpccer = 0; + + tmpccer = TIMx->CCER; + tmpccer &= (uint16_t)~((uint16_t)TIM_CC3NP); + tmpccer |= (uint16_t)(TIM_OCNPolarity << 8); + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_OC4PolarityConfig +* Description : Configures the TIMx channel 4 polarity. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_OCPolarity: specifies the OC4 Polarity. +* TIM_OCPolarity_High: Output Compare active high. +* TIM_OCPolarity_Low: Output Compare active low. +* Return : None +*******************************************************************************/ +void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity) +{ + uint16_t tmpccer = 0; + + tmpccer = TIMx->CCER; + tmpccer &= (uint16_t)~((uint16_t)TIM_CC4P); + tmpccer |= (uint16_t)(TIM_OCPolarity << 12); + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TIM_CCxCmd +* Description : Enables or disables the TIM Capture Compare Channel x. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_Channel: specifies the TIM Channel. +* TIM_Channel_1: TIM Channel 1. +* TIM_Channel_2: TIM Channel 2. +* TIM_Channel_3: TIM Channel 3. +* TIM_Channel_4: TIM Channel 4. +* TIM_CCx: specifies the TIM Channel CCxE bit new state. +* TIM_CCx_Enable. +* TIM_CCx_Disable. +* Return : None +*******************************************************************************/ +void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx) +{ + uint16_t tmp = 0; + + tmp = CCER_CCE_Set << TIM_Channel; + TIMx->CCER &= (uint16_t)~ tmp; + TIMx->CCER |= (uint16_t)(TIM_CCx << TIM_Channel); +} + +/******************************************************************************* +* Function Name : TIM_CCxNCmd +* Description : Enables or disables the TIM Capture Compare Channel xN. +* Input : TIMx: where x can be 1 select the TIM peripheral. +* TIM_Channel: specifies the TIM Channel. +* TIM_Channel_1: TIM Channel 1. +* TIM_Channel_2: TIM Channel 2. +* TIM_Channel_3: TIM Channel 3. +* TIM_CCxN: specifies the TIM Channel CCxNE bit new state. +* TIM_CCxN_Enable. +* TIM_CCxN_Disable. +* Return : None +*******************************************************************************/ +void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN) +{ + uint16_t tmp = 0; + + tmp = CCER_CCNE_Set << TIM_Channel; + TIMx->CCER &= (uint16_t) ~tmp; + TIMx->CCER |= (uint16_t)(TIM_CCxN << TIM_Channel); +} + +/******************************************************************************* +* Function Name : TIM_SelectOCxM +* Description : Selects the TIM Output Compare Mode. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_Channel: specifies the TIM Channel. +* TIM_Channel_1: TIM Channel 1. +* TIM_Channel_2: TIM Channel 2. +* TIM_Channel_3: TIM Channel 3. +* TIM_Channel_4: TIM Channel 4. +* TIM_OCMode: specifies the TIM Output Compare Mode. +* TIM_OCMode_Timing. +* TIM_OCMode_Active. +* TIM_OCMode_Toggle. +* TIM_OCMode_PWM1. +* TIM_OCMode_PWM2. +* TIM_ForcedAction_Active. +* TIM_ForcedAction_InActive. +* Return : None +*******************************************************************************/ +void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode) +{ + uint32_t tmp = 0; + uint16_t tmp1 = 0; + + tmp = (uint32_t) TIMx; + tmp += CHCTLR_Offset; + tmp1 = CCER_CCE_Set << (uint16_t)TIM_Channel; + TIMx->CCER &= (uint16_t) ~tmp1; + + if((TIM_Channel == TIM_Channel_1) ||(TIM_Channel == TIM_Channel_3)) + { + tmp += (TIM_Channel>>1); + *(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_OC1M); + *(__IO uint32_t *) tmp |= TIM_OCMode; + } + else + { + tmp += (uint16_t)(TIM_Channel - (uint16_t)4)>> (uint16_t)1; + *(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_OC2M); + *(__IO uint32_t *) tmp |= (uint16_t)(TIM_OCMode << 8); + } +} + +/******************************************************************************* +* Function Name : TIM_UpdateDisableConfig +* Description : Enables or Disables the TIMx Update event. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->CTLR1 |= TIM_UDIS; + } + else + { + TIMx->CTLR1 &= (uint16_t)~((uint16_t)TIM_UDIS); + } +} + +/******************************************************************************* +* Function Name : TIM_UpdateRequestConfig +* Description : Configures the TIMx Update Request Interrupt source. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_UpdateSource: specifies the Update source. +* TIM_UpdateSource_Regular. +* TIM_UpdateSource_Global. +* Return : None +*******************************************************************************/ +void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource) +{ + if (TIM_UpdateSource != TIM_UpdateSource_Global) + { + TIMx->CTLR1 |= TIM_URS; + } + else + { + TIMx->CTLR1 &= (uint16_t)~((uint16_t)TIM_URS); + } +} + +/******************************************************************************* +* Function Name : TIM_SelectHallSensor +* Description : Enables or disables the TIMx's Hall sensor interface. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + TIMx->CTLR2 |= TIM_TI1S; + } + else + { + TIMx->CTLR2 &= (uint16_t)~((uint16_t)TIM_TI1S); + } +} + +/******************************************************************************* +* Function Name : TIM_SelectOnePulseMode +* Description : Selects the TIMx's One Pulse Mode. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_OPMode: specifies the OPM Mode to be used. +* TIM_OPMode_Single. +* TIM_OPMode_Repetitive. +* Return : None +*******************************************************************************/ +void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode) +{ + TIMx->CTLR1 &= (uint16_t)~((uint16_t)TIM_OPM); + TIMx->CTLR1 |= TIM_OPMode; +} + +/******************************************************************************* +* Function Name : TIM_SelectOutputTrigger +* Description : Selects the TIMx Trigger Output Mode. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_TRGOSource: specifies the Trigger Output source. +* TIM_TRGOSource_Reset: The UG bit in the TIM_EGR register is +* used as the trigger output (TRGO). +* TIM_TRGOSource_Enable: The Counter Enable CEN is used as the +* trigger output (TRGO). +* TIM_TRGOSource_Update: The update event is selected as the +* trigger output (TRGO). +* TIM_TRGOSource_OC1: The trigger output sends a positive pulse +* when the CC1IF flag is to be set, as soon as a capture or compare match occurs (TRGO). +* TIM_TRGOSource_OC1Ref: OC1REF signal is used as the trigger output (TRGO). +* TIM_TRGOSource_OC2Ref: OC2REF signal is used as the trigger output (TRGO). +* TIM_TRGOSource_OC3Ref: OC3REF signal is used as the trigger output (TRGO). +* TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output (TRGO). +* Return : None +*******************************************************************************/ +void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource) +{ + TIMx->CTLR2 &= (uint16_t)~((uint16_t)TIM_MMS); + TIMx->CTLR2 |= TIM_TRGOSource; +} + +/******************************************************************************* +* Function Name : TIM_SelectSlaveMode +* Description : Selects the TIMx Slave Mode. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_SlaveMode: specifies the Timer Slave Mode. +* TIM_SlaveMode_Reset: Rising edge of the selected trigger +* signal (TRGI) re-initializes. +* TIM_SlaveMode_Gated: The counter clock is enabled when the +* trigger signal (TRGI) is high. +* TIM_SlaveMode_Trigger: The counter starts at a rising edge +* of the trigger TRGI. +* TIM_SlaveMode_External1: Rising edges of the selected trigger +* (TRGI) clock the counter. +* Return : None +*******************************************************************************/ +void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode) +{ + TIMx->SMCFGR &= (uint16_t)~((uint16_t)TIM_SMS); + TIMx->SMCFGR |= TIM_SlaveMode; +} + +/******************************************************************************* +* Function Name : TIM_SelectMasterSlaveMode +* Description : Sets or Resets the TIMx Master/Slave Mode. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_MasterSlaveMode: specifies the Timer Master Slave Mode. +* TIM_MasterSlaveMode_Enable: synchronization between the current +* timer and its slaves (through TRGO). +* TIM_MasterSlaveMode_Disable: No action. +* Return : None +*******************************************************************************/ +void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode) +{ + TIMx->SMCFGR &= (uint16_t)~((uint16_t)TIM_MSM); + TIMx->SMCFGR |= TIM_MasterSlaveMode; +} + +/******************************************************************************* +* Function Name : TIM_SetCounter +* Description : Sets the TIMx Counter Register value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Counter: specifies the Counter register new value. +* Return : None +*******************************************************************************/ +void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter) +{ + TIMx->CNT = Counter; +} + +/******************************************************************************* +* Function Name : TIM_SetAutoreload +* Description : Sets the TIMx Autoreload Register value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Autoreload: specifies the Autoreload register new value. +* Return : None +*******************************************************************************/ +void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload) +{ + TIMx->ATRLR = Autoreload; +} + +/******************************************************************************* +* Function Name : TIM_SetCompare1 +* Description : Sets the TIMx Capture Compare1 Register value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Compare1: specifies the Capture Compare1 register new value. +* Return : None +*******************************************************************************/ +void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1) +{ + TIMx->CH1CVR = Compare1; +} + +/******************************************************************************* +* Function Name : TIM_SetCompare2 +* Description : Sets the TIMx Capture Compare2 Register value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Compare2: specifies the Capture Compare2 register new value. +* Return : None +*******************************************************************************/ +void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2) +{ + TIMx->CH2CVR = Compare2; +} + +/******************************************************************************* +* Function Name : TIM_SetCompare3 +* Description : Sets the TIMx Capture Compare3 Register value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Compare3: specifies the Capture Compare3 register new value. +* Return : None +*******************************************************************************/ +void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3) +{ + TIMx->CH3CVR = Compare3; +} + +/******************************************************************************* +* Function Name : TIM_SetCompare4 +* Description : Sets the TIMx Capture Compare4 Register value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Compare4: specifies the Capture Compare4 register new value. +* Return : None +*******************************************************************************/ +void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4) +{ + TIMx->CH4CVR = Compare4; +} + +/******************************************************************************* +* Function Name : TIM_SetIC1Prescaler +* Description : Sets the TIMx Input Capture 1 prescaler. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_ICPSC: specifies the Input Capture1 prescaler new value. +* TIM_ICPSC_DIV1: no prescaler. +* TIM_ICPSC_DIV2: capture is done once every 2 events. +* TIM_ICPSC_DIV4: capture is done once every 4 events. +* TIM_ICPSC_DIV8: capture is done once every 8 events. +* Return : None +*******************************************************************************/ +void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + TIMx->CHCTLR1 &= (uint16_t)~((uint16_t)TIM_IC1PSC); + TIMx->CHCTLR1 |= TIM_ICPSC; +} + +/******************************************************************************* +* Function Name : TIM_SetIC2Prescaler +* Description : Sets the TIMx Input Capture 2 prescaler. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_ICPSC: specifies the Input Capture1 prescaler new value. +* TIM_ICPSC_DIV1: no prescaler. +* TIM_ICPSC_DIV2: capture is done once every 2 events. +* TIM_ICPSC_DIV4: capture is done once every 4 events. +* TIM_ICPSC_DIV8: capture is done once every 8 events. +* Return : None +*******************************************************************************/ +void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + TIMx->CHCTLR1 &= (uint16_t)~((uint16_t)TIM_IC2PSC); + TIMx->CHCTLR1 |= (uint16_t)(TIM_ICPSC << 8); +} + +/******************************************************************************* +* Function Name : TIM_SetIC3Prescaler +* Description : Sets the TIMx Input Capture 3 prescaler. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_ICPSC: specifies the Input Capture1 prescaler new value. +* TIM_ICPSC_DIV1: no prescaler. +* TIM_ICPSC_DIV2: capture is done once every 2 events. +* TIM_ICPSC_DIV4: capture is done once every 4 events. +* TIM_ICPSC_DIV8: capture is done once every 8 events. +* Return : None +*******************************************************************************/ +void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + TIMx->CHCTLR2 &= (uint16_t)~((uint16_t)TIM_IC3PSC); + TIMx->CHCTLR2 |= TIM_ICPSC; +} + +/******************************************************************************* +* Function Name : TIM_SetIC4Prescaler +* Description : Sets the TIMx Input Capture 4 prescaler. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_ICPSC: specifies the Input Capture1 prescaler new value. +* TIM_ICPSC_DIV1: no prescaler. +* TIM_ICPSC_DIV2: capture is done once every 2 events. +* TIM_ICPSC_DIV4: capture is done once every 4 events. +* TIM_ICPSC_DIV8: capture is done once every 8 events. +* Return : None +*******************************************************************************/ +void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC) +{ + TIMx->CHCTLR2 &= (uint16_t)~((uint16_t)TIM_IC4PSC); + TIMx->CHCTLR2 |= (uint16_t)(TIM_ICPSC << 8); +} + +/******************************************************************************* +* Function Name : TIM_SetClockDivision +* Description : Sets the TIMx Clock Division value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_CKD: specifies the clock division value. +* TIM_CKD_DIV1: TDTS = Tck_tim. +* TIM_CKD_DIV2: TDTS = 2*Tck_tim. +* TIM_CKD_DIV4: TDTS = 4*Tck_tim. +* Return : None +*******************************************************************************/ +void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD) +{ + TIMx->CTLR1 &= (uint16_t)~((uint16_t)TIM_CTLR1_CKD); + TIMx->CTLR1 |= TIM_CKD; +} + +/******************************************************************************* +* Function Name : TIM_GetCapture1 +* Description : Gets the TIMx Input Capture 1 value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Return : TIMx->CH1CVR: Capture Compare 1 Register value. +*******************************************************************************/ +uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx) +{ + return TIMx->CH1CVR; +} + +/******************************************************************************* +* Function Name : TIM_GetCapture2 +* Description : Gets the TIMx Input Capture 1 value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Return : TIMx->CH2CVR: Capture Compare 2 Register value. +*******************************************************************************/ +uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx) +{ + return TIMx->CH2CVR; +} + +/******************************************************************************* +* Function Name : TIM_GetCapture3 +* Description : Gets the TIMx Input Capture 1 value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Return : TIMx->CH3CVR: Capture Compare 3 Register value. +*******************************************************************************/ +uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx) +{ + return TIMx->CH3CVR; +} + +/******************************************************************************* +* Function Name : TIM_GetCapture4 +* Description : Gets the TIMx Input Capture 1 value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Return : TIMx->CH4CVR: Capture Compare 4 Register value. +*******************************************************************************/ +uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx) +{ + return TIMx->CH4CVR; +} + +/******************************************************************************* +* Function Name : TIM_GetCounter +* Description : Gets the TIMx Counter value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Return : TIMx->CNT: Counter Register value. +*******************************************************************************/ +uint16_t TIM_GetCounter(TIM_TypeDef* TIMx) +{ + return TIMx->CNT; +} + +/******************************************************************************* +* Function Name : TIM_GetPrescaler +* Description : Gets the TIMx Prescaler value. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* Return : TIMx->PSC: Prescaler Register value. +*******************************************************************************/ +uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx) +{ + return TIMx->PSC; +} + +/******************************************************************************* +* Function Name : TIM_GetFlagStatus +* Description : Checks whether the specified TIM flag is set or not. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_FLAG: specifies the flag to check. +* TIM_FLAG_Update: TIM update Flag. +* TIM_FLAG_CC1: TIM Capture Compare 1 Flag. +* TIM_FLAG_CC2: TIM Capture Compare 2 Flag. +* TIM_FLAG_CC3: TIM Capture Compare 3 Flag. +* TIM_FLAG_CC4: TIM Capture Compare 4 Flag. +* TIM_FLAG_COM: TIM Commutation Flag. +* TIM_FLAG_Trigger: TIM Trigger Flag. +* TIM_FLAG_Break: TIM Break Flag. +* TIM_FLAG_CC1OF: TIM Capture Compare 1 overcapture Flag. +* TIM_FLAG_CC2OF: TIM Capture Compare 2 overcapture Flag. +* TIM_FLAG_CC3OF: TIM Capture Compare 3 overcapture Flag. +* TIM_FLAG_CC4OF: TIM Capture Compare 4 overcapture Flag. +* Return : bitstatus: SET or RESET. +*******************************************************************************/ +FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) +{ + ITStatus bitstatus = RESET; + + if ((TIMx->INTFR & TIM_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : TIM_ClearFlag +* Description : Clears the TIMx's pending flags. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_FLAG: specifies the flag bit to clear. +* TIM_FLAG_Update: TIM update Flag. +* TIM_FLAG_CC1: TIM Capture Compare 1 Flag. +* TIM_FLAG_CC2: TIM Capture Compare 2 Flag. +* TIM_FLAG_CC3: TIM Capture Compare 3 Flag. +* TIM_FLAG_CC4: TIM Capture Compare 4 Flag. +* TIM_FLAG_COM: TIM Commutation Flag. +* TIM_FLAG_Trigger: TIM Trigger Flag. +* TIM_FLAG_Break: TIM Break Flag. +* TIM_FLAG_CC1OF: TIM Capture Compare 1 overcapture Flag. +* TIM_FLAG_CC2OF: TIM Capture Compare 2 overcapture Flag. +* TIM_FLAG_CC3OF: TIM Capture Compare 3 overcapture Flag. +* TIM_FLAG_CC4OF: TIM Capture Compare 4 overcapture Flag. +* Return : None +*******************************************************************************/ +void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) +{ + TIMx->INTFR = (uint16_t)~TIM_FLAG; +} + +/******************************************************************************* +* Function Name : TIM_GetITStatus +* Description : Checks whether the TIM interrupt has occurred or not. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_IT: specifies the TIM interrupt source to check. +* TIM_IT_Update: TIM update Interrupt source. +* TIM_IT_CC1: TIM Capture Compare 1 Interrupt source. +* TIM_IT_CC2: TIM Capture Compare 2 Interrupt source. +* TIM_IT_CC3: TIM Capture Compare 3 Interrupt source. +* TIM_IT_CC4: TIM Capture Compare 4 Interrupt source. +* TIM_IT_COM: TIM Commutation Interrupt source. +* TIM_IT_Trigger: TIM Trigger Interrupt source. +* TIM_IT_Break: TIM Break Interrupt source. +* Return : bitstatus: SET or RESET. +*******************************************************************************/ +ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT) +{ + ITStatus bitstatus = RESET; + uint16_t itstatus = 0x0, itenable = 0x0; + + itstatus = TIMx->INTFR & TIM_IT; + + itenable = TIMx->DMAINTENR & TIM_IT; + if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : TIM_ClearITPendingBit +* Description : Clears the TIMx's interrupt pending bits. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* TIM_IT: specifies the pending bit to clear. +* TIM_IT_Update: TIM update Interrupt source. +* TIM_IT_CC1: TIM Capture Compare 1 Interrupt source. +* TIM_IT_CC2: TIM Capture Compare 2 Interrupt source. +* TIM_IT_CC3: TIM Capture Compare 3 Interrupt source. +* TIM_IT_CC4: TIM Capture Compare 4 Interrupt source. +* TIM_IT_COM: TIM Commutation Interrupt source. +* TIM_IT_Trigger: TIM Trigger Interrupt source. +* TIM_IT_Break: TIM Break Interrupt source. +* Return : None +*******************************************************************************/ +void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT) +{ + TIMx->INTFR = (uint16_t)~TIM_IT; +} + +/******************************************************************************* +* Function Name : TI1_Config +* Description : Configure the TI1 as Input. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* IM_ICPolarity : The Input Polarity. +* TIM_ICPolarity_Rising. +* TIM_ICPolarity_Falling. +* TIM_ICSelection: specifies the input to be used. +* TIM_ICSelection_DirectTI: TIM Input 1 is selected to be +* connected to IC1. +* TIM_ICSelection_IndirectTI: TIM Input 1 is selected to be +* connected to IC2. +* TIM_ICSelection_TRC: TIM Input 1 is selected to be connected +* to TRC. +* TIM_ICFilter: Specifies the Input Capture Filter. +* This parameter must be a value between 0x00 and 0x0F. +* Return : None +*******************************************************************************/ +static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr1 = 0, tmpccer = 0; + + TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CC1E); + tmpccmr1 = TIMx->CHCTLR1; + tmpccer = TIMx->CCER; + tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CC1S)) & ((uint16_t)~((uint16_t)TIM_IC1F))); + tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); + + if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4) ) + { + tmpccer &= (uint16_t)~((uint16_t)(TIM_CC1P)); + tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC1E); + } + else + { + tmpccer &= (uint16_t)~((uint16_t)(TIM_CC1P | TIM_CC1NP)); + tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC1E); + } + + TIMx->CHCTLR1 = tmpccmr1; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TI2_Config +* Description : Configure the TI2 as Input. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* IM_ICPolarity : The Input Polarity. +* TIM_ICPolarity_Rising. +* TIM_ICPolarity_Falling. +* TIM_ICSelection: specifies the input to be used. +* TIM_ICSelection_DirectTI: TIM Input 2 is selected to be +* connected to IC2. +* TIM_ICSelection_IndirectTI: TIM Input 2 is selected to be +* connected to IC1. +* TIM_ICSelection_TRC: TIM Input 2 is selected to be connected +* to TRC. +* TIM_ICFilter: Specifies the Input Capture Filter. +* This parameter must be a value between 0x00 and 0x0F. +* Return : None +*******************************************************************************/ +static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0; + + TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CC2E); + tmpccmr1 = TIMx->CHCTLR1; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 4); + tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CC2S)) & ((uint16_t)~((uint16_t)TIM_IC2F))); + tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12); + tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8); + + if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4)) + { + tmpccer &= (uint16_t)~((uint16_t)(TIM_CC2P)); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CC2E); + } + else + { + tmpccer &= (uint16_t)~((uint16_t)(TIM_CC2P | TIM_CC2NP)); + tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC2E); + } + + TIMx->CHCTLR1 = tmpccmr1 ; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TI3_Config +* Description : Configure the TI3 as Input. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* IM_ICPolarity : The Input Polarity. +* TIM_ICPolarity_Rising. +* TIM_ICPolarity_Falling. +* TIM_ICSelection: specifies the input to be used. +* TIM_ICSelection_DirectTI: TIM Input 3 is selected to be +* connected to IC3. +* TIM_ICSelection_IndirectTI: TIM Input 3 is selected to be +* connected to IC4. +* TIM_ICSelection_TRC: TIM Input 3 is selected to be connected +* to TRC. +* TIM_ICFilter: Specifies the Input Capture Filter. +* This parameter must be a value between 0x00 and 0x0F. +* Return : None +*******************************************************************************/ +static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; + + TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CC3E); + tmpccmr2 = TIMx->CHCTLR2; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 8); + tmpccmr2 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CC3S)) & ((uint16_t)~((uint16_t)TIM_IC3F))); + tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4)); + + if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4)) + { + tmpccer &= (uint16_t)~((uint16_t)(TIM_CC3P)); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CC3E); + } + else + { + tmpccer &= (uint16_t)~((uint16_t)(TIM_CC3P | TIM_CC3NP)); + tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC3E); + } + + TIMx->CHCTLR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + +/******************************************************************************* +* Function Name : TI4_Config +* Description : Configure the TI4 as Input. +* Input : TIMx: where x can be 1 to 4 select the TIM peripheral. +* IM_ICPolarity : The Input Polarity. +* TIM_ICPolarity_Rising. +* TIM_ICPolarity_Falling. +* TIM_ICSelection: specifies the input to be used. +* TIM_ICSelection_DirectTI: TIM Input 4 is selected to be +* connected to IC4. +* TIM_ICSelection_IndirectTI: TIM Input 4 is selected to be +* connected to IC3. +* TIM_ICSelection_TRC: TIM Input 4 is selected to be connected +* to TRC. +* TIM_ICFilter: Specifies the Input Capture Filter. +* This parameter must be a value between 0x00 and 0x0F. +* Return : None +*******************************************************************************/ +static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection, + uint16_t TIM_ICFilter) +{ + uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0; + + TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CC4E); + tmpccmr2 = TIMx->CHCTLR2; + tmpccer = TIMx->CCER; + tmp = (uint16_t)(TIM_ICPolarity << 12); + tmpccmr2 &= (uint16_t)((uint16_t)(~(uint16_t)TIM_CC4S) & ((uint16_t)~((uint16_t)TIM_IC4F))); + tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8); + tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12); + + if((TIMx == TIM1) || (TIMx == TIM2) || (TIMx == TIM3) || (TIMx == TIM4) ) + { + tmpccer &= (uint16_t)~((uint16_t)(TIM_CC4P)); + tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CC4E); + } + else + { + tmpccer &= (uint16_t)~((uint16_t)(TIM_CC3P | TIM_CC4NP)); + tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CC4E); + } + + TIMx->CHCTLR2 = tmpccmr2; + TIMx->CCER = tmpccer; +} + + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usart.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usart.c new file mode 100644 index 0000000000..365d6c3e7a --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usart.c @@ -0,0 +1,731 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_usart.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the USART firmware functions. +*******************************************************************************/ +#include "ch32v10x_usart.h" +#include "ch32v10x_rcc.h" + +/* USART_Private_Defines */ +#define CTLR1_UE_Set ((uint16_t)0x2000) /* USART Enable Mask */ +#define CTLR1_UE_Reset ((uint16_t)0xDFFF) /* USART Disable Mask */ + +#define CTLR1_WAKE_Mask ((uint16_t)0xF7FF) /* USART WakeUp Method Mask */ + +#define CTLR1_RWU_Set ((uint16_t)0x0002) /* USART mute mode Enable Mask */ +#define CTLR1_RWU_Reset ((uint16_t)0xFFFD) /* USART mute mode Enable Mask */ +#define CTLR1_SBK_Set ((uint16_t)0x0001) /* USART Break Character send Mask */ +#define CTLR1_CLEAR_Mask ((uint16_t)0xE9F3) /* USART CR1 Mask */ +#define CTLR2_Address_Mask ((uint16_t)0xFFF0) /* USART address Mask */ + +#define CTLR2_LINEN_Set ((uint16_t)0x4000) /* USART LIN Enable Mask */ +#define CTLR2_LINEN_Reset ((uint16_t)0xBFFF) /* USART LIN Disable Mask */ + +#define CTLR2_LBDL_Mask ((uint16_t)0xFFDF) /* USART LIN Break detection Mask */ +#define CTLR2_STOP_CLEAR_Mask ((uint16_t)0xCFFF) /* USART CR2 STOP Bits Mask */ +#define CTLR2_CLOCK_CLEAR_Mask ((uint16_t)0xF0FF) /* USART CR2 Clock Mask */ + +#define CTLR3_SCEN_Set ((uint16_t)0x0020) /* USART SC Enable Mask */ +#define CTLR3_SCEN_Reset ((uint16_t)0xFFDF) /* USART SC Disable Mask */ + +#define CTLR3_NACK_Set ((uint16_t)0x0010) /* USART SC NACK Enable Mask */ +#define CTLR3_NACK_Reset ((uint16_t)0xFFEF) /* USART SC NACK Disable Mask */ + +#define CTLR3_HDSEL_Set ((uint16_t)0x0008) /* USART Half-Duplex Enable Mask */ +#define CTLR3_HDSEL_Reset ((uint16_t)0xFFF7) /* USART Half-Duplex Disable Mask */ + +#define CTLR3_IRLP_Mask ((uint16_t)0xFFFB) /* USART IrDA LowPower mode Mask */ +#define CTLR3_CLEAR_Mask ((uint16_t)0xFCFF) /* USART CR3 Mask */ + +#define CTLR3_IREN_Set ((uint16_t)0x0002) /* USART IrDA Enable Mask */ +#define CTLR3_IREN_Reset ((uint16_t)0xFFFD) /* USART IrDA Disable Mask */ +#define GPR_LSB_Mask ((uint16_t)0x00FF) /* Guard Time Register LSB Mask */ +#define GPR_MSB_Mask ((uint16_t)0xFF00) /* Guard Time Register MSB Mask */ +#define IT_Mask ((uint16_t)0x001F) /* USART Interrupt Mask */ + +/* USART OverSampling-8 Mask */ +#define CTLR1_OVER8_Set ((uint16_t)0x8000) /* USART OVER8 mode Enable Mask */ +#define CTLR1_OVER8_Reset ((uint16_t)0x7FFF) /* USART OVER8 mode Disable Mask */ + +/* USART One Bit Sampling Mask */ +#define CTLR3_ONEBITE_Set ((uint16_t)0x0800) /* USART ONEBITE mode Enable Mask */ +#define CTLR3_ONEBITE_Reset ((uint16_t)0xF7FF) /* USART ONEBITE mode Disable Mask */ + +/******************************************************************************* +* Function Name : USART_DeInit +* Description : Deinitializes the USARTx peripheral registers to their default +* reset values. +* Input : USARTx: where x can be 1, 2 or 3 to select the UART peripheral. +* Return : None +*******************************************************************************/ +void USART_DeInit(USART_TypeDef* USARTx) +{ + if (USARTx == USART1) + { + RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE); + RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE); + } + else if (USARTx == USART2) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE); + } + else if (USARTx == USART3) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE); + } + else if (USARTx == UART4) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE); + } + else + { + if (USARTx == UART5) + { + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE); + } + } +} + +/******************************************************************************* +* Function Name : USART_Init +* Description : Initializes the USARTx peripheral according to the specified +* parameters in the USART_InitStruct. +* Input : USARTx: where x can be 1, 2 or 3 to select the UART peripheral. +* USART_InitStruct: pointer to a USART_InitTypeDef structure +* that contains the configuration information for the specified USART peripheral. +* Return : None +*******************************************************************************/ +void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct) +{ + uint32_t tmpreg = 0x00, apbclock = 0x00; + uint32_t integerdivider = 0x00; + uint32_t fractionaldivider = 0x00; + uint32_t usartxbase = 0; + RCC_ClocksTypeDef RCC_ClocksStatus; + + if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None) + { + } + + usartxbase = (uint32_t)USARTx; + tmpreg = USARTx->CTLR2; + tmpreg &= CTLR2_STOP_CLEAR_Mask; + tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits; + + USARTx->CTLR2 = (uint16_t)tmpreg; + tmpreg = USARTx->CTLR1; + tmpreg &= CTLR1_CLEAR_Mask; + tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity | + USART_InitStruct->USART_Mode; + USARTx->CTLR1 = (uint16_t)tmpreg; + + tmpreg = USARTx->CTLR3; + tmpreg &= CTLR3_CLEAR_Mask; + tmpreg |= USART_InitStruct->USART_HardwareFlowControl; + USARTx->CTLR3 = (uint16_t)tmpreg; + + RCC_GetClocksFreq(&RCC_ClocksStatus); + + if (usartxbase == USART1_BASE) + { + apbclock = RCC_ClocksStatus.PCLK2_Frequency; + } + else + { + apbclock = RCC_ClocksStatus.PCLK1_Frequency; + } + + if ((USARTx->CTLR1 & CTLR1_OVER8_Set) != 0) + { + integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate))); + } + else + { + integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate))); + } + tmpreg = (integerdivider / 100) << 4; + + fractionaldivider = integerdivider - (100 * (tmpreg >> 4)); + + if ((USARTx->CTLR1 & CTLR1_OVER8_Set) != 0) + { + tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07); + } + else + { + tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F); + } + + USARTx->BRR = (uint16_t)tmpreg; +} + +/******************************************************************************* +* Function Name : USART_StructInit +* Description : Fills each USART_InitStruct member with its default value. +* Input : USART_InitStruct: pointer to a USART_InitTypeDef structure +* which will be initialized. +* Return : None +*******************************************************************************/ +void USART_StructInit(USART_InitTypeDef* USART_InitStruct) +{ + USART_InitStruct->USART_BaudRate = 9600; + USART_InitStruct->USART_WordLength = USART_WordLength_8b; + USART_InitStruct->USART_StopBits = USART_StopBits_1; + USART_InitStruct->USART_Parity = USART_Parity_No ; + USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None; +} + +/******************************************************************************* +* Function Name : USART_ClockInit +* Description : Initializes the USARTx peripheral Clock according to the +* specified parameters in the USART_ClockInitStruct . +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef +* structure that contains the configuration information for the specified +* USART peripheral. +* Return : None +*******************************************************************************/ +void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct) +{ + uint32_t tmpreg = 0x00; + + tmpreg = USARTx->CTLR2; + tmpreg &= CTLR2_CLOCK_CLEAR_Mask; + tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | + USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit; + USARTx->CTLR2 = (uint16_t)tmpreg; +} + +/******************************************************************************* +* Function Name : USART_ClockStructInit +* Description : Fills each USART_InitStruct member with its default value. +* Input : USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef +* structure which will be initialized. +* Return : None +*******************************************************************************/ +void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct) +{ + USART_ClockInitStruct->USART_Clock = USART_Clock_Disable; + USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low; + USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge; + USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable; +} + +/******************************************************************************* +* Function Name : USART_Cmd +* Description : Enables or disables the specified USART peripheral. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR1 |= CTLR1_UE_Set; + } + else + { + USARTx->CTLR1 &= CTLR1_UE_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_ITConfig +* Description : Enables or disables the specified USART interrupts. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_IT: specifies the USART interrupt sources to be enabled or disabled. +* USART_IT_CTS: CTS change interrupt. +* USART_IT_LBD: LIN Break detection interrupt. +* USART_IT_TXE: Transmit Data Register empty interrupt. +* USART_IT_TC: Transmission complete interrupt. +* USART_IT_RXNE: Receive Data register not empty interrupt. +* USART_IT_IDLE: Idle line detection interrupt. +* USART_IT_PE: Parity Error interrupt. +* USART_IT_ERR: Error interrupt. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState) +{ + uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00; + uint32_t usartxbase = 0x00; + + if (USART_IT == USART_IT_CTS) + { + } + + usartxbase = (uint32_t)USARTx; + usartreg = (((uint8_t)USART_IT) >> 0x05); + itpos = USART_IT & IT_Mask; + itmask = (((uint32_t)0x01) << itpos); + + if (usartreg == 0x01) + { + usartxbase += 0x0C; + } + else if (usartreg == 0x02) + { + usartxbase += 0x10; + } + else + { + usartxbase += 0x14; + } + + if (NewState != DISABLE) + { + *(__IO uint32_t*)usartxbase |= itmask; + } + else + { + *(__IO uint32_t*)usartxbase &= ~itmask; + } +} + +/******************************************************************************* +* Function Name : USART_DMACmd +* Description : Enables or disables the USART DMA interface. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_DMAReq: specifies the DMA request. +* USART_DMAReq_Tx: USART DMA transmit request. +* USART_DMAReq_Rx: USART DMA receive request. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR3 |= USART_DMAReq; + } + else + { + USARTx->CTLR3 &= (uint16_t)~USART_DMAReq; + } +} + +/******************************************************************************* +* Function Name : USART_SetAddress +* Description : Sets the address of the USART node. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_Address: Indicates the address of the USART node. +* Return : None +*******************************************************************************/ +void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address) +{ + USARTx->CTLR2 &= CTLR2_Address_Mask; + USARTx->CTLR2 |= USART_Address; +} + +/******************************************************************************* +* Function Name : USART_WakeUpConfig +* Description : Selects the USART WakeUp method. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_WakeUp: specifies the USART wakeup method. +* USART_WakeUp_IdleLine: WakeUp by an idle line detection. +* USART_WakeUp_AddressMark: WakeUp by an address mark. +* Return : None +*******************************************************************************/ +void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp) +{ + USARTx->CTLR1 &= CTLR1_WAKE_Mask; + USARTx->CTLR1 |= USART_WakeUp; +} + +/******************************************************************************* +* Function Name : USART_ReceiverWakeUpCmd +* Description : Determines if the USART is in mute mode or not. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR1 |= CTLR1_RWU_Set; + } + else + { + USARTx->CTLR1 &= CTLR1_RWU_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_LINBreakDetectLengthConfig +* Description : Sets the USART LIN Break detection length. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_LINBreakDetectLength: specifies the LIN break detection length. +* USART_LINBreakDetectLength_10b: 10-bit break detection. +* USART_LINBreakDetectLength_11b: 11-bit break detection. +* Return : None +*******************************************************************************/ +void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength) +{ + USARTx->CTLR2 &= CTLR2_LBDL_Mask; + USARTx->CTLR2 |= USART_LINBreakDetectLength; +} + +/******************************************************************************* +* Function Name : USART_LINCmd +* Description : Enables or disables the USART LIN mode. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR2 |= CTLR2_LINEN_Set; + } + else + { + USARTx->CTLR2 &= CTLR2_LINEN_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_SendData +* Description : Transmits single data through the USARTx peripheral. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* Data: the data to transmit.. +* Return : None +*******************************************************************************/ +void USART_SendData(USART_TypeDef* USARTx, uint16_t Data) +{ + USARTx->DATAR = (Data & (uint16_t)0x01FF); +} + +/******************************************************************************* +* Function Name : USART_ReceiveData +* Description : Returns the most recent received data by the USARTx peripheral. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* Return : The received data. +*******************************************************************************/ +uint16_t USART_ReceiveData(USART_TypeDef* USARTx) +{ + return (uint16_t)(USARTx->DATAR & (uint16_t)0x01FF); +} + +/******************************************************************************* +* Function Name : USART_SendBreak +* Description : Transmits break characters. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* Return : None +*******************************************************************************/ +void USART_SendBreak(USART_TypeDef* USARTx) +{ + USARTx->CTLR1 |= CTLR1_SBK_Set; +} + +/******************************************************************************* +* Function Name : USART_SetGuardTime +* Description : Sets the specified USART guard time. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_GuardTime: specifies the guard time. +* Return : None +*******************************************************************************/ +void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime) +{ + USARTx->GPR &= GPR_LSB_Mask; + USARTx->GPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08); +} + +/******************************************************************************* +* Function Name : USART_SetPrescaler +* Description : Sets the system clock prescaler. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_Prescaler: specifies the prescaler clock. +* Return : None +*******************************************************************************/ +void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler) +{ + USARTx->GPR &= GPR_MSB_Mask; + USARTx->GPR |= USART_Prescaler; +} + +/******************************************************************************* +* Function Name : USART_SmartCardCmd +* Description : Enables or disables the USART Smart Card mode. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR3 |= CTLR3_SCEN_Set; + } + else + { + USARTx->CTLR3 &= CTLR3_SCEN_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_SmartCardNACKCmd +* Description : Enables or disables NACK transmission. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR3 |= CTLR3_NACK_Set; + } + else + { + USARTx->CTLR3 &= CTLR3_NACK_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_HalfDuplexCmd +* Description : Enables or disables the USART Half Duplex communication. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR3 |= CTLR3_HDSEL_Set; + } + else + { + USARTx->CTLR3 &= CTLR3_HDSEL_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_OverSampling8Cmd +* Description : Enables or disables the USART's 8x oversampling mode. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR1 |= CTLR1_OVER8_Set; + } + else + { + USARTx->CTLR1 &= CTLR1_OVER8_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_OneBitMethodCmd +* Description : Enables or disables the USART's one bit sampling method. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR3 |= CTLR3_ONEBITE_Set; + } + else + { + USARTx->CTLR3 &= CTLR3_ONEBITE_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_IrDAConfig +* Description : Configures the USART's IrDA interface. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_IrDAMode: specifies the IrDA mode. +* USART_IrDAMode_LowPower. +* USART_IrDAMode_Normal. +* Return : None +*******************************************************************************/ +void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode) +{ + USARTx->CTLR3 &= CTLR3_IRLP_Mask; + USARTx->CTLR3 |= USART_IrDAMode; +} + +/******************************************************************************* +* Function Name : USART_IrDACmd +* Description : Enables or disables the USART's IrDA interface. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* NewState: ENABLE or DISABLE. +* Return : None +*******************************************************************************/ +void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState) +{ + if (NewState != DISABLE) + { + USARTx->CTLR3 |= CTLR3_IREN_Set; + } + else + { + USARTx->CTLR3 &= CTLR3_IREN_Reset; + } +} + +/******************************************************************************* +* Function Name : USART_GetFlagStatus +* Description : Checks whether the specified USART flag is set or not. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_FLAG: specifies the flag to check. +* USART_FLAG_CTS: CTS Change flag. +* USART_FLAG_LBD: LIN Break detection flag. +* USART_FLAG_TXE: Transmit data register empty flag. +* USART_FLAG_TC: Transmission Complete flag. +* USART_FLAG_RXNE: Receive data register not empty flag. +* USART_FLAG_IDLE: Idle Line detection flag. +* USART_FLAG_ORE: OverRun Error flag. +* USART_FLAG_NE: Noise Error flag. +* USART_FLAG_FE: Framing Error flag. +* USART_FLAG_PE: Parity Error flag. +* Return : bitstatus: SET or RESET. +*******************************************************************************/ +FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG) +{ + FlagStatus bitstatus = RESET; + + if (USART_FLAG == USART_FLAG_CTS) + { + } + + if ((USARTx->STATR & USART_FLAG) != (uint16_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + return bitstatus; +} + +/******************************************************************************* +* Function Name : USART_ClearFlag +* Description : Clears the USARTx's pending flags. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_FLAG: specifies the flag to clear. +* USART_FLAG_CTS: CTS Change flag. +* USART_FLAG_LBD: LIN Break detection flag. +* USART_FLAG_TC: Transmission Complete flag. +* USART_FLAG_RXNE: Receive data register not empty flag. +* Return : None +*******************************************************************************/ +void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG) +{ + if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS) + { + } + + USARTx->STATR = (uint16_t)~USART_FLAG; +} + +/******************************************************************************* +* Function Name : USART_GetITStatus +* Description : Checks whether the specified USART interrupt has occurred or not. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_IT: specifies the USART interrupt source to check. +* USART_IT_CTS: CTS change interrupt. +* USART_IT_LBD: LIN Break detection interrupt. +* USART_IT_TXE: Tansmit Data Register empty interrupt. +* USART_IT_TC: Transmission complete interrupt. +* USART_IT_RXNE: Receive Data register not empty interrupt. +* USART_IT_IDLE: Idle line detection interrupt. +* USART_IT_ORE_RX : OverRun Error interrupt if the RXNEIE bit is set. +* USART_IT_ORE_ER : OverRun Error interrupt if the EIE bit is set. +* USART_IT_NE: Noise Error interrupt. +* USART_IT_FE: Framing Error interrupt. +* USART_IT_PE: Parity Error interrupt. +* Return : bitstatus: SET or RESET. +*******************************************************************************/ +ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT) +{ + uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00; + ITStatus bitstatus = RESET; + + if (USART_IT == USART_IT_CTS) + { + } + + usartreg = (((uint8_t)USART_IT) >> 0x05); + itmask = USART_IT & IT_Mask; + itmask = (uint32_t)0x01 << itmask; + + if (usartreg == 0x01) + { + itmask &= USARTx->CTLR1; + } + else if (usartreg == 0x02) + { + itmask &= USARTx->CTLR2; + } + else + { + itmask &= USARTx->CTLR3; + } + + bitpos = USART_IT >> 0x08; + bitpos = (uint32_t)0x01 << bitpos; + bitpos &= USARTx->STATR; + + if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET)) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + + return bitstatus; +} + +/******************************************************************************* +* Function Name : USART_ClearITPendingBit +* Description : Clears the USARTx's interrupt pending bits. +* Input : USARTx: where x can be 1, 2, 3 to select the USART peripheral. +* USART_IT: specifies the interrupt pending bit to clear. +* USART_IT_CTS: CTS change interrupt. +* USART_IT_LBD: LIN Break detection interrupt. +* USART_IT_TC: Transmission complete interrupt. +* USART_IT_RXNE: Receive Data register not empty interrupt. +* Return : None +*******************************************************************************/ +void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT) +{ + uint16_t bitpos = 0x00, itmask = 0x00; + + if (USART_IT == USART_IT_CTS) + { + } + + bitpos = USART_IT >> 0x08; + itmask = ((uint16_t)0x01 << (uint16_t)bitpos); + USARTx->STATR = (uint16_t)~itmask; +} + + + + + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usb.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usb.c new file mode 100644 index 0000000000..39b0ca5d04 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usb.c @@ -0,0 +1,149 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_usb.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the USB firmware functions. +*******************************************************************************/ +#include "ch32v10x_usb.h" +#include "ch32v10x_rcc.h" + +/******************************** USB DEVICE **********************************/ + +/* Endpoint address */ +PUINT8 pEP0_RAM_Addr; +PUINT8 pEP1_RAM_Addr; +PUINT8 pEP2_RAM_Addr; +PUINT8 pEP3_RAM_Addr; +PUINT8 pEP4_RAM_Addr; +PUINT8 pEP5_RAM_Addr; +PUINT8 pEP6_RAM_Addr; +PUINT8 pEP7_RAM_Addr; + +/******************************************************************************* +* Function Name : USB_DeviceInit +* Description : Initializes USB device. +* Input : None +* Return : None +*******************************************************************************/ +void USB_DeviceInit( void ) +{ + R8_USB_CTRL = 0x00; + + R8_UEP4_1_MOD = RB_UEP4_RX_EN|RB_UEP4_TX_EN|RB_UEP1_RX_EN|RB_UEP1_TX_EN; + R8_UEP2_3_MOD = RB_UEP2_RX_EN|RB_UEP2_TX_EN|RB_UEP3_RX_EN|RB_UEP3_TX_EN; + R8_UEP5_6_MOD = RB_UEP5_RX_EN|RB_UEP5_TX_EN|RB_UEP6_RX_EN|RB_UEP6_TX_EN; + R8_UEP7_MOD = RB_UEP7_RX_EN|RB_UEP7_TX_EN; + + R16_UEP0_DMA = (UINT16)(UINT32)pEP0_RAM_Addr; + R16_UEP1_DMA = (UINT16)(UINT32)pEP1_RAM_Addr; + R16_UEP2_DMA = (UINT16)(UINT32)pEP2_RAM_Addr; + R16_UEP3_DMA = (UINT16)(UINT32)pEP3_RAM_Addr; + R16_UEP4_DMA = (UINT16)(UINT32)pEP4_RAM_Addr; + R16_UEP5_DMA = (UINT16)(UINT32)pEP5_RAM_Addr; + R16_UEP6_DMA = (UINT16)(UINT32)pEP6_RAM_Addr; + R16_UEP7_DMA = (UINT16)(UINT32)pEP7_RAM_Addr; + + R8_UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; + R8_UEP1_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; + R8_UEP2_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; + R8_UEP3_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; + R8_UEP4_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; + R8_UEP5_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; + R8_UEP6_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; + R8_UEP7_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; + + R8_USB_INT_FG = 0xFF; + R8_USB_INT_EN = RB_UIE_SUSPEND | RB_UIE_BUS_RST | RB_UIE_TRANSFER; + + R8_USB_DEV_AD = 0x00; + R8_USB_CTRL = RB_UC_DEV_PU_EN | RB_UC_INT_BUSY | RB_UC_DMA_EN; + R8_UDEV_CTRL = RB_UD_PD_DIS|RB_UD_PORT_EN; +} + +/******************************************************************************* +* Function Name : DevEP1_IN_Deal +* Description : Device endpoint1 IN. +* Input : l: IN length(<64B) +* Return : None +*******************************************************************************/ +void DevEP1_IN_Deal( UINT8 l ) +{ + R8_UEP1_T_LEN = l; + R8_UEP1_CTRL = (R8_UEP1_CTRL & ~MASK_UEP_T_RES)| UEP_T_RES_ACK; +} + +/******************************************************************************* +* Function Name : DevEP2_IN_Deal +* Description : Device endpoint2 IN. +* Input : l: IN length(<64B) +* Return : None +*******************************************************************************/ +void DevEP2_IN_Deal( UINT8 l ) +{ + R8_UEP2_T_LEN = l; + R8_UEP2_CTRL = (R8_UEP2_CTRL & ~MASK_UEP_T_RES)| UEP_T_RES_ACK; +} + +/******************************************************************************* +* Function Name : DevEP3_IN_Deal +* Description : Device endpoint3 IN. +* Input : l: IN length(<64B) +* Return : None +*******************************************************************************/ +void DevEP3_IN_Deal( UINT8 l ) +{ + R8_UEP3_T_LEN = l; + R8_UEP3_CTRL = (R8_UEP3_CTRL & ~MASK_UEP_T_RES)| UEP_T_RES_ACK; +} + +/******************************************************************************* +* Function Name : DevEP4_IN_Deal +* Description : Device endpoint4 IN. +* Input : l: IN length(<64B) +* Return : None +*******************************************************************************/ +void DevEP4_IN_Deal( UINT8 l ) +{ + R8_UEP4_T_LEN = l; + R8_UEP4_CTRL = (R8_UEP4_CTRL & ~MASK_UEP_T_RES)| UEP_T_RES_ACK; +} + +/******************************************************************************* +* Function Name : DevEP5_IN_Deal +* Description : Device endpoint5 IN. +* Input : l: IN length(<64B) +* Return : None +*******************************************************************************/ +void DevEP5_IN_Deal( UINT8 l ) +{ + R8_UEP5_T_LEN = l; + R8_UEP5_CTRL = (R8_UEP5_CTRL & ~MASK_UEP_T_RES)| UEP_T_RES_ACK; +} + +/******************************************************************************* +* Function Name : DevEP6_IN_Deal +* Description : Device endpoint6 IN. +* Input : l: IN length(<64B) +* Return : None +*******************************************************************************/ +void DevEP6_IN_Deal( UINT8 l ) +{ + R8_UEP6_T_LEN = l; + R8_UEP6_CTRL = (R8_UEP6_CTRL & ~MASK_UEP_T_RES)| UEP_T_RES_ACK; +} + +/******************************************************************************* +* Function Name : DevEP7_IN_Deal +* Description : Device endpoint7 IN. +* Input : l: IN length(<64B) +* Return : None +*******************************************************************************/ +void DevEP7_IN_Deal( UINT8 l ) +{ + R8_UEP7_T_LEN = l; + R8_UEP7_CTRL = (R8_UEP7_CTRL & ~MASK_UEP_T_RES)| UEP_T_RES_ACK; +} + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usb_host.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usb_host.c new file mode 100644 index 0000000000..9776eaa546 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_usb_host.c @@ -0,0 +1,708 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_usb_host.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the USB firmware functions. +*******************************************************************************/ +#include "ch32v10x_usb_host.h" +#include "debug.h" + +/******************************** HOST DEVICE **********************************/ +UINT8 UsbDevEndp0Size; +UINT8 FoundNewDev; +_RootHubDev ThisUsbDev; + +PUINT8 pHOST_RX_RAM_Addr; +PUINT8 pHOST_TX_RAM_Addr; +extern UINT8 Com_Buffer[128]; + +__attribute__ ((aligned(4))) const UINT8 SetupGetDevDescr[] = { USB_REQ_TYP_IN, USB_GET_DESCRIPTOR, 0x00, USB_DESCR_TYP_DEVICE, 0x00, 0x00, sizeof( USB_DEV_DESCR ), 0x00 }; + +__attribute__ ((aligned(4))) const UINT8 SetupGetCfgDescr[] = { USB_REQ_TYP_IN, USB_GET_DESCRIPTOR, 0x00, USB_DESCR_TYP_CONFIG, 0x00, 0x00, 0x04, 0x00 }; + +__attribute__ ((aligned(4))) const UINT8 SetupSetUsbAddr[] = { USB_REQ_TYP_OUT, USB_SET_ADDRESS, USB_DEVICE_ADDR, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +__attribute__ ((aligned(4))) const UINT8 SetupSetUsbConfig[] = { USB_REQ_TYP_OUT, USB_SET_CONFIGURATION, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +__attribute__ ((aligned(4))) const UINT8 SetupSetUsbInterface[] = { USB_REQ_RECIP_INTERF, USB_SET_INTERFACE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +__attribute__ ((aligned(4))) const UINT8 SetupClrEndpStall[] = { USB_REQ_TYP_OUT | USB_REQ_RECIP_ENDP, USB_CLEAR_FEATURE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + + +/******************************************************************************* +* Function Name : DisableRootHubPort( ) +* Description : Disable root hub. +* Input : None +* Return : None +*******************************************************************************/ +void DisableRootHubPort(void) +{ +#ifdef FOR_ROOT_UDISK_ONLY + CH103DiskStatus = DISK_DISCONNECT; + +#endif + +#ifndef DISK_BASE_BUF_LEN + ThisUsbDev.DeviceStatus = ROOT_DEV_DISCONNECT; + ThisUsbDev.DeviceAddress = 0x00; + +#endif +} + +/******************************************************************************* +* Function Name : AnalyzeRootHub +* Description : Analyze root hub state. +* Input : None +* Return : Error +*******************************************************************************/ +UINT8 AnalyzeRootHub( void ) +{ + UINT8 s; + + s = ERR_SUCCESS; + + if ( R8_USB_MIS_ST & RB_UMS_DEV_ATTACH ) { + +#ifdef DISK_BASE_BUF_LEN + if ( CH103DiskStatus == DISK_DISCONNECT + +#else + if ( ThisUsbDev.DeviceStatus == ROOT_DEV_DISCONNECT + +#endif + || ( R8_UHOST_CTRL & RB_UH_PORT_EN ) == 0x00 ) { + DisableRootHubPort( ); + +#ifdef DISK_BASE_BUF_LEN + CH103DiskStatus = DISK_CONNECT; + +#else + ThisUsbDev.DeviceSpeed = R8_USB_MIS_ST & RB_UMS_DM_LEVEL ? 0 : 1; + ThisUsbDev.DeviceStatus = ROOT_DEV_CONNECTED; + +#endif + s = ERR_USB_CONNECT; + } + } + +#ifdef DISK_BASE_BUF_LEN + else if ( CH103DiskStatus >= DISK_CONNECT ) { + +#else + else if ( ThisUsbDev.DeviceStatus >= ROOT_DEV_CONNECTED ) { + +#endif + DisableRootHubPort( ); + if ( s == ERR_SUCCESS ) s = ERR_USB_DISCON; + } + + return( s ); +} + +/******************************************************************************* +* Function Name : SetHostUsbAddr +* Description : Set USB host address. +* Input : addr; host address. +* Return : None +*******************************************************************************/ +void SetHostUsbAddr( UINT8 addr ) +{ + R8_USB_DEV_AD = (R8_USB_DEV_AD&RB_UDA_GP_BIT) | (addr&MASK_USB_ADDR); +} + +#ifndef FOR_ROOT_UDISK_ONLY +/******************************************************************************* +* Function Name : SetUsbSpeed +* Description : Set USB speed. +* Input : FullSpeed: USB speed. +* Return : None +*******************************************************************************/ +void SetUsbSpeed( UINT8 FullSpeed ) +{ + if ( FullSpeed ) + { + R8_USB_CTRL &= ~ RB_UC_LOW_SPEED; + R8_UH_SETUP &= ~ RB_UH_PRE_PID_EN; + } + else + { + R8_USB_CTRL |= RB_UC_LOW_SPEED; + } +} +#endif + +/******************************************************************************* +* Function Name : ResetRootHubPort( ) +* Description : Reset root hub. +* Input : None +* Return : None +*******************************************************************************/ +void ResetRootHubPort( void ) +{ + UsbDevEndp0Size = DEFAULT_ENDP0_SIZE; + SetHostUsbAddr( 0x00 ); + R8_UHOST_CTRL &= ~RB_UH_PORT_EN; + SetUsbSpeed( 1 ); + R8_UHOST_CTRL = (R8_UHOST_CTRL & ~RB_UH_LOW_SPEED) | RB_UH_BUS_RESET; + Delay_Ms( 15 ); + R8_UHOST_CTRL = R8_UHOST_CTRL & ~ RB_UH_BUS_RESET; + Delay_Us( 250 ); + R8_USB_INT_FG = RB_UIF_DETECT; +} + +/******************************************************************************* +* Function Name : EnableRootHubPort( ) +* Description : Enable root hub. +* Input : None +* Return : ERROR +*******************************************************************************/ +UINT8 EnableRootHubPort(void) +{ +#ifdef DISK_BASE_BUF_LEN + if ( CH103DiskStatus < DISK_CONNECT ) CH103DiskStatus = DISK_CONNECT; + +#else + if ( ThisUsbDev.DeviceStatus < ROOT_DEV_CONNECTED ) ThisUsbDev.DeviceStatus = ROOT_DEV_CONNECTED; + +#endif + if ( R8_USB_MIS_ST & RB_UMS_DEV_ATTACH ) { +#ifndef DISK_BASE_BUF_LEN + if ( ( R8_UHOST_CTRL & RB_UH_PORT_EN ) == 0x00 ) { + ThisUsbDev.DeviceSpeed = (R8_USB_MIS_ST & RB_UMS_DM_LEVEL) ? 0 : 1; + if ( ThisUsbDev.DeviceSpeed == 0 ) R8_UHOST_CTRL |= RB_UH_LOW_SPEED; + } + +#endif + R8_UHOST_CTRL |= RB_UH_PORT_EN; + return( ERR_SUCCESS ); + } + + return( ERR_USB_DISCON ); +} + +/******************************************************************************* +* Function Name : WaitUSB_Interrupt +* Description : Wait USB Interrput. +* Input : None +* Return : EEROR +*******************************************************************************/ +UINT8 WaitUSB_Interrupt( void ) +{ + UINT16 i; + + for ( i = WAIT_USB_TOUT_200US; i != 0 && (R8_USB_INT_FG&RB_UIF_TRANSFER) == 0; i -- ){;} + return( (R8_USB_INT_FG&RB_UIF_TRANSFER) ? ERR_SUCCESS : ERR_USB_UNKNOWN ); +} + +/******************************************************************************* +* Function Name : USBHostTransact +* Description : USB host transport transaction. +* Input : endp_pid: endpoint and PID. +* tog: Synchronization flag. +* timeout: timeout times. +* Return : EEROR: +* ERR_USB_UNKNOWN +* ERR_USB_DISCON +* ERR_USB_CONNECT +* ERR_SUCCESS +*******************************************************************************/ +UINT8 USBHostTransact( UINT8 endp_pid, UINT8 tog, UINT32 timeout ) +{ + UINT8 TransRetry; + UINT8 s, r; + UINT16 i; + + R8_UH_RX_CTRL = R8_UH_TX_CTRL = tog; + TransRetry = 0; + + do { + R8_UH_EP_PID = endp_pid; + R8_USB_INT_FG = RB_UIF_TRANSFER; + for ( i = WAIT_USB_TOUT_200US; i != 0 && (R8_USB_INT_FG&RB_UIF_TRANSFER) == 0; i -- ); + R8_UH_EP_PID = 0x00; + if ( (R8_USB_INT_FG&RB_UIF_TRANSFER) == 0 ) {return( ERR_USB_UNKNOWN );} + + if ( R8_USB_INT_FG & RB_UIF_DETECT ) { + R8_USB_INT_FG = RB_UIF_DETECT; + s = AnalyzeRootHub( ); + + if ( s == ERR_USB_CONNECT ) FoundNewDev = 1; + +#ifdef DISK_BASE_BUF_LEN + + if ( CH103DiskStatus == DISK_DISCONNECT ) return( ERR_USB_DISCON ); + if ( CH103DiskStatus == DISK_CONNECT ) return( ERR_USB_CONNECT ); + +#else + if ( ThisUsbDev.DeviceStatus == ROOT_DEV_DISCONNECT ) return( ERR_USB_DISCON ); + if ( ThisUsbDev.DeviceStatus == ROOT_DEV_CONNECTED ) return( ERR_USB_CONNECT ); + +#endif + Delay_Us( 200 ); + } + + if ( R8_USB_INT_FG & RB_UIF_TRANSFER ) + { + if ( R8_USB_INT_ST & RB_UIS_TOG_OK ) return( ERR_SUCCESS ); + r = R8_USB_INT_ST & MASK_UIS_H_RES; + if ( r == USB_PID_STALL ) return( r | ERR_USB_TRANSFER ); + + if ( r == USB_PID_NAK ) + { + if ( timeout == 0 ) return( r | ERR_USB_TRANSFER ); + if ( timeout < 0xFFFF ) timeout --; + -- TransRetry; + } + else switch ( endp_pid >> 4 ) { + case USB_PID_SETUP: + + case USB_PID_OUT: + if ( r ) return( r | ERR_USB_TRANSFER ); + break; + + case USB_PID_IN: + if ( r == USB_PID_DATA0 && r == USB_PID_DATA1 ) { + } + else if ( r ) return( r | ERR_USB_TRANSFER ); + break; + + default: + return( ERR_USB_UNKNOWN ); + } + } + else { + R8_USB_INT_FG = 0xFF; + } + Delay_Us( 15 ); + } while ( ++ TransRetry < 3 ); + + return( ERR_USB_TRANSFER ); +} + +/******************************************************************************* +* Function Name : HostCtrlTransfer +* Description : Host control transport. +* Input : DataBuf : Receive or send data buffer. +* RetLen : Data length. +* Return : ERR_USB_BUF_OVER IN +* ERR_SUCCESS +*******************************************************************************/ +UINT8 HostCtrlTransfer( PUINT8 DataBuf, PUINT8 RetLen ) +{ + UINT16 RemLen = 0; + UINT8 s, RxLen, RxCnt, TxCnt; + PUINT8 pBuf; + PUINT8 pLen; + + pBuf = DataBuf; + pLen = RetLen; + Delay_Us( 200 ); + if ( pLen ) *pLen = 0; + + R8_UH_TX_LEN = sizeof( USB_SETUP_REQ ); + s = USBHostTransact( USB_PID_SETUP << 4 | 0x00, 0x00, 200000/20 ); + if ( s != ERR_SUCCESS ) return( s ); + R8_UH_RX_CTRL = R8_UH_TX_CTRL = RB_UH_R_TOG | RB_UH_R_AUTO_TOG | RB_UH_T_TOG | RB_UH_T_AUTO_TOG; + R8_UH_TX_LEN = 0x01; + RemLen = pSetupReq -> wLength; + + if ( RemLen && pBuf ) + { + if ( pSetupReq -> bRequestType & USB_REQ_TYP_IN ) + { + while ( RemLen ) + { + Delay_Us( 200 ); + s = USBHostTransact( USB_PID_IN << 4 | 0x00, R8_UH_RX_CTRL, 200000/20 ); + if ( s != ERR_SUCCESS ) return( s ); + RxLen = R8_USB_RX_LEN < RemLen ? R8_USB_RX_LEN : RemLen; + RemLen -= RxLen; + if ( pLen ) *pLen += RxLen; + + for ( RxCnt = 0; RxCnt != RxLen; RxCnt ++ ) + { + *pBuf = pHOST_RX_RAM_Addr[ RxCnt ]; + pBuf ++; + } + + if ( R8_USB_RX_LEN == 0 || ( R8_USB_RX_LEN & ( UsbDevEndp0Size - 1 ) ) ) break; + } + R8_UH_TX_LEN = 0x00; + } + else + { + while ( RemLen ) + { + Delay_Us( 200 ); + R8_UH_TX_LEN = RemLen >= UsbDevEndp0Size ? UsbDevEndp0Size : RemLen; + + for ( TxCnt = 0; TxCnt != R8_UH_TX_LEN; TxCnt ++ ) + { + pHOST_TX_RAM_Addr[ TxCnt ] = *pBuf; + pBuf ++; + } + + s = USBHostTransact( USB_PID_OUT << 4 | 0x00, R8_UH_TX_CTRL, 200000/20 ); + if ( s != ERR_SUCCESS ) return( s ); + RemLen -= R8_UH_TX_LEN; + if ( pLen ) *pLen += R8_UH_TX_LEN; + } + } + } + + Delay_Us( 200 ); + s = USBHostTransact( ( R8_UH_TX_LEN ? USB_PID_IN << 4 | 0x00: USB_PID_OUT << 4 | 0x00 ), RB_UH_R_TOG | RB_UH_T_TOG, 200000/20 ); + if ( s != ERR_SUCCESS ) return( s ); + if ( R8_UH_TX_LEN == 0 ) return( ERR_SUCCESS ); + if ( R8_USB_RX_LEN == 0 ) return( ERR_SUCCESS ); + + return( ERR_USB_BUF_OVER ); +} + +/******************************************************************************* +* Function Name : CopySetupReqPkg +* Description : Copy setup request package. +* Input : pReqPkt: setup request package address. +* Return : None +*******************************************************************************/ +void CopySetupReqPkg( const UINT8 *pReqPkt ) +{ + UINT8 i; + + for ( i = 0; i != sizeof( USB_SETUP_REQ ); i ++ ) + { + ((PUINT8)pSetupReq)[ i ] = *pReqPkt; + pReqPkt++; + } +} + +/******************************************************************************* +* Function Name : CtrlGetDeviceDescr +* Description : Get device descrptor +* Input : DataBuf: Data buffer. +* Return : ERR_USB_BUF_OVER +* ERR_SUCCESS +*******************************************************************************/ +UINT8 CtrlGetDeviceDescr( PUINT8 DataBuf ) +{ + UINT8 s; + UINT8 len; + + UsbDevEndp0Size = DEFAULT_ENDP0_SIZE; + CopySetupReqPkg( SetupGetDevDescr ); + s = HostCtrlTransfer( DataBuf, &len ); + + if ( s != ERR_SUCCESS ) return( s ); + UsbDevEndp0Size = ( (PUSB_DEV_DESCR)DataBuf ) -> bMaxPacketSize0; + if ( len < ((PUSB_SETUP_REQ)SetupGetDevDescr)->wLength ) return( ERR_USB_BUF_OVER ); + + return( ERR_SUCCESS ); +} + +/******************************************************************************* +* Function Name : CtrlGetConfigDescr +* Description : Get configration descrptor. +* Input : DataBuf: Data buffer. +* Return : ERR_USB_BUF_OVER +* ERR_SUCCESS +*******************************************************************************/ +UINT8 CtrlGetConfigDescr( PUINT8 DataBuf ) +{ + UINT8 s; + UINT8 len; + + CopySetupReqPkg( SetupGetCfgDescr ); + s = HostCtrlTransfer( DataBuf, &len ); + if ( s != ERR_SUCCESS ) return( s ); + if ( len < ( (PUSB_SETUP_REQ)SetupGetCfgDescr ) -> wLength ) return( ERR_USB_BUF_OVER ); + + len = ( (PUSB_CFG_DESCR)DataBuf ) -> wTotalLength; + CopySetupReqPkg( SetupGetCfgDescr ); + pSetupReq ->wLength = len; + s = HostCtrlTransfer( DataBuf, &len ); + if ( s != ERR_SUCCESS ) return( s ); + + return( ERR_SUCCESS ); +} + +/******************************************************************************* +* Function Name : CtrlSetUsbAddress +* Description : Set USB device address. +* Input : addr: Device address. +* Return : ERR_SUCCESS +*******************************************************************************/ +UINT8 CtrlSetUsbAddress( UINT8 addr ) +{ + UINT8 s; + + CopySetupReqPkg( SetupSetUsbAddr ); + pSetupReq -> wValue = addr; + s = HostCtrlTransfer( NULL, NULL ); + if ( s != ERR_SUCCESS ) return( s ); + SetHostUsbAddr( addr ); + Delay_Ms( 10 ); + + return( ERR_SUCCESS ); +} + +/******************************************************************************* +* Function Name : CtrlSetUsbConfig +* Description : Set usb configration. +* Input : cfg: Configration Value. +* Return : ERR_SUCCESS +*******************************************************************************/ +UINT8 CtrlSetUsbConfig( UINT8 cfg ) +{ + CopySetupReqPkg( SetupSetUsbConfig ); + pSetupReq -> wValue = cfg; + return( HostCtrlTransfer( NULL, NULL ) ); +} + +/******************************************************************************* +* Function Name : CtrlClearEndpStall +* Description : Clear endpoint STALL. +* Input : endp: Endpoint address. +* Return : ERR_SUCCESS +*******************************************************************************/ +UINT8 CtrlClearEndpStall( UINT8 endp ) +{ + CopySetupReqPkg( SetupClrEndpStall ); + pSetupReq -> wIndex = endp; + return( HostCtrlTransfer( NULL, NULL ) ); +} + +/******************************************************************************* +* Function Name : CtrlSetUsbIntercace +* Description : Set USB Interface configration. +* Input : cfg: Configration value. +* Return : ERR_SUCCESS +*******************************************************************************/ +UINT8 CtrlSetUsbIntercace( UINT8 cfg ) +{ + CopySetupReqPkg( SetupSetUsbInterface ); + pSetupReq -> wValue = cfg; + return( HostCtrlTransfer( NULL, NULL ) ); +} + +/******************************************************************************* +* Function Name : USB_HostInit +* Description : Initializes USB host mode. +* Input : None +* Return : None +*******************************************************************************/ +void USB_HostInit( void ) +{ + R8_USB_CTRL = RB_UC_HOST_MODE; + R8_UHOST_CTRL = 0; + R8_USB_DEV_AD = 0x00; + R8_UH_EP_MOD = RB_UH_EP_TX_EN | RB_UH_EP_RX_EN; + R16_UH_RX_DMA = (UINT16)(UINT32)pHOST_RX_RAM_Addr; + R16_UH_TX_DMA = (UINT16)(UINT32)pHOST_TX_RAM_Addr; + + R8_UH_RX_CTRL = 0x00; + R8_UH_TX_CTRL = 0x00; + R8_USB_CTRL = RB_UC_HOST_MODE | RB_UC_INT_BUSY | RB_UC_DMA_EN; + R8_UH_SETUP = RB_UH_SOF_EN; + R8_USB_INT_FG = 0xFF; + DisableRootHubPort( ); + R8_USB_INT_EN = RB_UIE_TRANSFER|RB_UIE_DETECT; + + FoundNewDev = 0; +} + +/***************************************************************************** +* Function Name : InitRootDevice +* Description : Initializes USB root hub. +* Input : DataBuf: Data buffer. +* Return : ERROR +*******************************************************************************/ +UINT8 InitRootDevice( PUINT8 DataBuf ) +{ + UINT8 i, s; + UINT8 cfg, dv_cls, if_cls; + + ResetRootHubPort( ); + + for ( i = 0, s = 0; i < 100; i ++ ) + { + Delay_Ms( 1 ); + if ( EnableRootHubPort( ) == ERR_SUCCESS ) { + i = 0; + s ++; + if ( s > 100 ) break; + } + } + + if ( i ) + { + DisableRootHubPort( ); + return( ERR_USB_DISCON ); + } + + SetUsbSpeed( ThisUsbDev.DeviceSpeed ); + + s = CtrlGetDeviceDescr( DataBuf ); + + if ( s == ERR_SUCCESS ) + { + + ThisUsbDev.DeviceVID = ((PUSB_DEV_DESCR)DataBuf)->idVendor; + ThisUsbDev.DevicePID = ((PUSB_DEV_DESCR)DataBuf)->idProduct; + dv_cls = ( (PUSB_DEV_DESCR)DataBuf ) -> bDeviceClass; + + s = CtrlSetUsbAddress( ((PUSB_SETUP_REQ)SetupSetUsbAddr)->wValue ); + + if ( s == ERR_SUCCESS ) + { + ThisUsbDev.DeviceAddress = ( (PUSB_SETUP_REQ)SetupSetUsbAddr )->wValue; + + s = CtrlGetConfigDescr( DataBuf ); + + if ( s == ERR_SUCCESS ) + { + cfg = ( (PUSB_CFG_DESCR)DataBuf )->bConfigurationValue; + if_cls = ( (PUSB_CFG_DESCR_LONG)DataBuf )->itf_descr.bInterfaceClass; + + if ( (dv_cls == 0x00) && (if_cls == USB_DEV_CLASS_STORAGE)) { + + #ifdef FOR_ROOT_UDISK_ONLY + CH103DiskStatus = DISK_USB_ADDR; + return( ERR_SUCCESS ); + } + else return( ERR_USB_UNSUPPORT ); + + #else + s = CtrlSetUsbConfig( cfg ); + + if ( s == ERR_SUCCESS ) + { + ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; + ThisUsbDev.DeviceType = USB_DEV_CLASS_STORAGE; + SetUsbSpeed( 1 ); + return( ERR_SUCCESS ); + } + } + else if ( (dv_cls == 0x00) && (if_cls == USB_DEV_CLASS_PRINTER) && ((PUSB_CFG_DESCR_LONG)DataBuf)->itf_descr.bInterfaceSubClass == 0x01 ) { + s = CtrlSetUsbConfig( cfg ); + if ( s == ERR_SUCCESS ) { + ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; + ThisUsbDev.DeviceType = USB_DEV_CLASS_PRINTER; + SetUsbSpeed( 1 ); + return( ERR_SUCCESS ); + } + } + else if ( (dv_cls == 0x00) && (if_cls == USB_DEV_CLASS_HID) && ((PUSB_CFG_DESCR_LONG)DataBuf)->itf_descr.bInterfaceSubClass <= 0x01 ) { + if_cls = ( (PUSB_CFG_DESCR_LONG)DataBuf ) -> itf_descr.bInterfaceProtocol; + s = CtrlSetUsbConfig( cfg ); + if ( s == ERR_SUCCESS ) { + ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; + if ( if_cls == 1 ) { + ThisUsbDev.DeviceType = DEV_TYPE_KEYBOARD; + SetUsbSpeed( 1 ); + return( ERR_SUCCESS ); + } + else if ( if_cls == 2 ) { + ThisUsbDev.DeviceType = DEV_TYPE_MOUSE; + SetUsbSpeed( 1 ); + return( ERR_SUCCESS ); + } + s = ERR_USB_UNSUPPORT; + } + } + else { + s = CtrlSetUsbConfig( cfg ); + if ( s == ERR_SUCCESS ) { + ThisUsbDev.DeviceStatus = ROOT_DEV_SUCCESS; + ThisUsbDev.DeviceType = DEV_TYPE_UNKNOW; + SetUsbSpeed( 1 ); + return( ERR_SUCCESS ); + } + } + + #endif + } + } + } + +#ifdef FOR_ROOT_UDISK_ONLY + CH103DiskStatus = DISK_CONNECT; + +#else + ThisUsbDev.DeviceStatus = ROOT_DEV_FAILED; + +#endif + + SetUsbSpeed( 1 ); + + return( s ); +} +/******************************************************************************* +* Function Name : HubGetPortStatus +* Description : ѯHUB˿״̬,Com_Buffer +* Input : UINT8 HubPortIndex +* Output : None +* Return : ERR_SUCCESS ɹ + ERR_USB_BUF_OVER ȴ +*******************************************************************************/ +UINT8 HubGetPortStatus( UINT8 HubPortIndex ) +{ + UINT8 s; + UINT8 len; + + pSetupReq -> bRequestType = HUB_GET_PORT_STATUS; + pSetupReq -> bRequest = HUB_GET_STATUS; + pSetupReq -> wValue = 0x0000; + pSetupReq -> wIndex = 0x0000|HubPortIndex; + pSetupReq -> wLength = 0x0004; + s = HostCtrlTransfer( Com_Buffer, &len ); // ִпƴ + if ( s != ERR_SUCCESS ) + { + return( s ); + } + if ( len < 4 ) + { + return( ERR_USB_BUF_OVER ); // ȴ + } + + return( ERR_SUCCESS ); +} + +/******************************************************************************* +* Function Name : HubSetPortFeature +* Description : HUB˿ +* Input : UINT8 HubPortIndex //HUB˿ + UINT8 FeatureSelt //HUB˿ +* Output : None +* Return : ERR_SUCCESS ɹ +* +*******************************************************************************/ +UINT8 HubSetPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ) +{ + pSetupReq -> bRequestType = HUB_SET_PORT_FEATURE; + pSetupReq -> bRequest = HUB_SET_FEATURE; + pSetupReq -> wValue = 0x0000|FeatureSelt; + pSetupReq -> wIndex = 0x0000|HubPortIndex; + pSetupReq -> wLength = 0x0000; + return( HostCtrlTransfer( NULL, NULL ) ); // ִпƴ +} + +/******************************************************************************* +* Function Name : HubClearPortFeature +* Description : HUB˿ +* Input : UINT8 HubPortIndex + UINT8 FeatureSelt +* Output : None +* Return : ERR_SUCCESS ɹ +* +*******************************************************************************/ +UINT8 HubClearPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ) +{ + pSetupReq -> bRequestType = HUB_CLEAR_PORT_FEATURE; + pSetupReq -> bRequest = HUB_CLEAR_FEATURE; + pSetupReq -> wValue = 0x0000|FeatureSelt; + pSetupReq -> wIndex = 0x0000|HubPortIndex; + pSetupReq -> wLength = 0x0000; + return( HostCtrlTransfer( NULL, NULL ) ); // ִпƴ +} + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_wwdg.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_wwdg.c new file mode 100644 index 0000000000..c5d925dbdb --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/src/ch32v10x_wwdg.c @@ -0,0 +1,123 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : ch32v10x_wwdg.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : This file provides all the WWDG firmware functions. +**********************************************************************************/ +#include "ch32v10x_wwdg.h" +#include "ch32v10x_rcc.h" + +/* CTLR register bit mask */ +#define CTLR_WDGA_Set ((uint32_t)0x00000080) + +/* CFGR register bit mask */ +#define CFGR_WDGTB_Mask ((uint32_t)0xFFFFFE7F) +#define CFGR_W_Mask ((uint32_t)0xFFFFFF80) +#define BIT_Mask ((uint8_t)0x7F) + +/******************************************************************************** +* Function Name : WWDG_DeInit +* Description : Deinitializes the WWDG peripheral registers to their default reset values +* Input : None +* Return : None +*********************************************************************************/ +void WWDG_DeInit(void) +{ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE); + RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE); +} + +/******************************************************************************** +* Function Name : WWDG_SetPrescaler +* Description : Sets the WWDG Prescaler +* Input : WWDG_Prescaler: specifies the WWDG Prescaler +* WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1 +* WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2 +* WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4 +* WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8 +* Return : None +*********************************************************************************/ +void WWDG_SetPrescaler(uint32_t WWDG_Prescaler) +{ + uint32_t tmpreg = 0; + tmpreg = WWDG->CFGR & CFGR_WDGTB_Mask; + tmpreg |= WWDG_Prescaler; + WWDG->CFGR = tmpreg; +} + +/******************************************************************************** +* Function Name : WWDG_SetWindowValue +* Description : Sets the WWDG window value +* Input : WindowValue: specifies the window value to be compared to the +* downcounter,which must be lower than 0x80 +* Return : None +*********************************************************************************/ +void WWDG_SetWindowValue(uint8_t WindowValue) +{ + __IO uint32_t tmpreg = 0; + + tmpreg = WWDG->CFGR & CFGR_W_Mask; + + tmpreg |= WindowValue & (uint32_t) BIT_Mask; + + WWDG->CFGR = tmpreg; +} + +/******************************************************************************** +* Function Name : WWDG_EnableIT +* Description : Enables the WWDG Early Wakeup interrupt(EWI) +* Input : None +* Return : None +*********************************************************************************/ +void WWDG_EnableIT(void) +{ + WWDG->CFGR |= (1<<9); +} + +/******************************************************************************** +* Function Name : WWDG_SetCounter +* Description : Sets the WWDG counter value +* Input : Counter: specifies the watchdog counter value,which must be a +* number between 0x40 and 0x7F +* Return : None +*********************************************************************************/ +void WWDG_SetCounter(uint8_t Counter) +{ + WWDG->CTLR = Counter & BIT_Mask; +} + + +/******************************************************************************** +* Function Name : WWDG_Enable +* Description : Enables WWDG and load the counter value +* Input : Counter: specifies the watchdog counter value,which must be a +* number between 0x40 and 0x7F +* Return : None +*********************************************************************************/ +void WWDG_Enable(uint8_t Counter) +{ + WWDG->CTLR = CTLR_WDGA_Set | Counter; +} + +/******************************************************************************** +* Function Name : WWDG_GetFlagStatus +* Description : Checks whether the Early Wakeup interrupt flag is set or not +* Input : None +* Return : The new state of the Early Wakeup interrupt flag (SET or RESET) +*********************************************************************************/ +FlagStatus WWDG_GetFlagStatus(void) +{ + return (FlagStatus)(WWDG->STATR); +} + +/******************************************************************************** +* Function Name : WWDG_ClearFlag +* Description : Clears Early Wakeup interrupt flag +* Input : None +* Return : None +*********************************************************************************/ +void WWDG_ClearFlag(void) +{ + WWDG->STATR = (uint32_t)RESET; +} diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/system_ch32v10x.c b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/system_ch32v10x.c new file mode 100644 index 0000000000..c11e93a9b6 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/system_ch32v10x.c @@ -0,0 +1,505 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : system_ch32v10x.c +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : CH32V10x Device Peripheral Access Layer System Source File. +*********************************************************************************/ +#include "ch32v10x.h" + +/* +* Uncomment the line corresponding to the desired System clock (SYSCLK) frequency (after +* reset the HSI is used as SYSCLK source). +* If none of the define below is enabled, the HSI is used as System clock source. +*/ +/* #define SYSCLK_FREQ_HSE HSE_VALUE */ +/* #define SYSCLK_FREQ_24MHz 24000000 */ +/* #define SYSCLK_FREQ_48MHz 48000000 */ +/* #define SYSCLK_FREQ_56MHz 56000000 */ +#define SYSCLK_FREQ_72MHz 72000000 + +/* Clock Definitions */ +#ifdef SYSCLK_FREQ_HSE + uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /* System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_24MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /* System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_48MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /* System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_56MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /* System Clock Frequency (Core Clock) */ +#elif defined SYSCLK_FREQ_72MHz + uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /* System Clock Frequency (Core Clock) */ +#else /* HSI Selected as System Clock source */ + uint32_t SystemCoreClock = HSI_VALUE; /* System Clock Frequency (Core Clock) */ +#endif + +__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + + +/* ch32v10x_system_private_function_proto_types */ +static void SetSysClock(void); + +#ifdef SYSCLK_FREQ_HSE + static void SetSysClockToHSE(void); +#elif defined SYSCLK_FREQ_24MHz + static void SetSysClockTo24(void); +#elif defined SYSCLK_FREQ_48MHz + static void SetSysClockTo48(void); +#elif defined SYSCLK_FREQ_56MHz + static void SetSysClockTo56(void); +#elif defined SYSCLK_FREQ_72MHz + static void SetSysClockTo72(void); +#endif + + +/****************************************************************************************** +* Function Name : SystemInit +* Description : Setup the microcontroller system Initialize the Embedded Flash Interface, +* the PLL and update the SystemCoreClock variable. +* Input : None +* Return : None +*******************************************************************************************/ +void SystemInit (void) +{ + RCC->CTLR |= (uint32_t)0x00000001; + RCC->CFGR0 &= (uint32_t)0xF8FF0000; + RCC->CTLR &= (uint32_t)0xFEF6FFFF; + RCC->CTLR &= (uint32_t)0xFFFBFFFF; + RCC->CFGR0 &= (uint32_t)0xFF80FFFF; + RCC->INTR = 0x009F0000; + SetSysClock(); +} + + +/****************************************************************************************** +* Function Name : SystemCoreClockUpdate +* Description : Update SystemCoreClock variable according to Clock Register Values. +* Input : None +* Return : None +*******************************************************************************************/ +void SystemCoreClockUpdate (void) +{ + uint32_t tmp = 0, pllmull = 0, pllsource = 0; + + tmp = RCC->CFGR0 & RCC_SWS; + + switch (tmp) + { + case 0x00: + SystemCoreClock = HSI_VALUE; + break; + case 0x04: + SystemCoreClock = HSE_VALUE; + break; + case 0x08: + pllmull = RCC->CFGR0 & RCC_PLLMULL; + pllsource = RCC->CFGR0 & RCC_PLLSRC; + pllmull = ( pllmull >> 18) + 2; + if (pllsource == 0x00) + { + SystemCoreClock = (HSI_VALUE >> 1) * pllmull; + } + else + { + if ((RCC->CFGR0 & RCC_PLLXTPRE) != (uint32_t)RESET) + { + SystemCoreClock = (HSE_VALUE >> 1) * pllmull; + } + else + { + SystemCoreClock = HSE_VALUE * pllmull; + } + } + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + + tmp = AHBPrescTable[((RCC->CFGR0 & RCC_HPRE) >> 4)]; + SystemCoreClock >>= tmp; +} + + +/****************************************************************************************** +* Function Name : SetSysClock +* Description : Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. +* Input : None +* Return : None +*******************************************************************************************/ +static void SetSysClock(void) +{ +#ifdef SYSCLK_FREQ_HSE + SetSysClockToHSE(); +#elif defined SYSCLK_FREQ_24MHz + SetSysClockTo24(); +#elif defined SYSCLK_FREQ_48MHz + SetSysClockTo48(); +#elif defined SYSCLK_FREQ_56MHz + SetSysClockTo56(); +#elif defined SYSCLK_FREQ_72MHz + SetSysClockTo72(); +#endif + + /* If none of the define above is enabled, the HSI is used as System clock + * source (default after reset) + */ +} + + +#ifdef SYSCLK_FREQ_HSE + +/****************************************************************************************** +* Function Name : SetSysClockToHSE +* Description : Sets HSE as System clock source and configure HCLK, PCLK2 and PCLK1 prescalers. +* Input : None +* Return : None +*******************************************************************************************/ +static void SetSysClockToHSE(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + + RCC->CTLR |= ((uint32_t)RCC_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CTLR & RCC_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CTLR & RCC_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; + /* Flash 0 wait state */ + FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); + FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_0; + + /* HCLK = SYSCLK */ + RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; + /* PCLK2 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; + /* PCLK1 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV1; + + /* Select HSE as system clock source */ + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_SW)); + RCC->CFGR0 |= (uint32_t)RCC_SW_HSE; + + /* Wait till HSE is used as system clock source */ + while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x04) + { + } + } + else + { + /* If HSE fails to start-up, the application will have wrong clock + * configuration. User can add here some code to deal with this error + */ + } +} + +#elif defined SYSCLK_FREQ_24MHz + +/****************************************************************************************** +* Function Name : SetSysClockTo24 +* Description : Sets System clock frequency to 24MHz and configure HCLK, PCLK2 and PCLK1 prescalers. +* Input : None +* Return : None +*******************************************************************************************/ +static void SetSysClockTo24(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + RCC->CTLR |= ((uint32_t)RCC_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CTLR & RCC_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CTLR & RCC_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; + + /* Flash 0 wait state */ + FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); + FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_0; + + /* HCLK = SYSCLK */ + RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; + /* PCLK2 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; + /* PCLK1 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV1; + + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL)); + RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE | RCC_PLLMULL3); + /* Enable PLL */ + RCC->CTLR |= RCC_PLLON; + + /* Wait till PLL is ready */ + while((RCC->CTLR & RCC_PLLRDY) == 0) + { + } + /* Select PLL as system clock source */ + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_SW)); + RCC->CFGR0 |= (uint32_t)RCC_SW_PLL; + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08) + { + } + } + else + { + /* If HSE fails to start-up, the application will have wrong clock + * configuration. User can add here some code to deal with this error + */ + } +} + + +#elif defined SYSCLK_FREQ_48MHz + +/****************************************************************************************** +* Function Name : SetSysClockTo48 +* Description : Sets System clock frequency to 48MHz and configure HCLK, PCLK2 and PCLK1 prescalers. +* Input : None +* Return : None +*******************************************************************************************/ +static void SetSysClockTo48(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + + RCC->CTLR |= ((uint32_t)RCC_HSEON); + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CTLR & RCC_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CTLR & RCC_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; + + /* Flash 1 wait state */ + FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); + FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_1; + + /* HCLK = SYSCLK */ + RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; + /* PCLK2 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; + /* PCLK1 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV2; + + /* PLL configuration: PLLCLK = HSE * 6 = 48 MHz */ + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL)); + RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLMULL6); + + /* Enable PLL */ + RCC->CTLR |= RCC_PLLON; + /* Wait till PLL is ready */ + while((RCC->CTLR & RCC_PLLRDY) == 0) + { + } + /* Select PLL as system clock source */ + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_SW)); + RCC->CFGR0 |= (uint32_t)RCC_SW_PLL; + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08) + { + } + } + else + { + /* + * If HSE fails to start-up, the application will have wrong clock + * configuration. User can add here some code to deal with this error + */ + } +} + +#elif defined SYSCLK_FREQ_56MHz + +/****************************************************************************************** +* Function Name : SetSysClockTo56 +* Description : Sets System clock frequency to 56MHz and configure HCLK, PCLK2 and PCLK1 prescalers. +* Input : None +* Return : None +*******************************************************************************************/ +static void SetSysClockTo56(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + RCC->CTLR |= ((uint32_t)RCC_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CTLR & RCC_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CTLR & RCC_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; + + /* Flash 2 wait state */ + FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); + FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_2; + + /* HCLK = SYSCLK */ + RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; + /* PCLK2 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; + /* PCLK1 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV2; + + /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */ + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_PLLSRC | RCC_PLLXTPRE | RCC_PLLMULL)); + RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLMULL7); + /* Enable PLL */ + RCC->CTLR |= RCC_PLLON; + /* Wait till PLL is ready */ + while((RCC->CTLR & RCC_PLLRDY) == 0) + { + } + + /* Select PLL as system clock source */ + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_SW)); + RCC->CFGR0 |= (uint32_t)RCC_SW_PLL; + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08) + { + } + } + else + { + /* + * If HSE fails to start-up, the application will have wrong clock + * configuration. User can add here some code to deal with this error + */ + } +} + +#elif defined SYSCLK_FREQ_72MHz + +/****************************************************************************************** +* Function Name : SetSysClockTo72 +* Description : Sets System clock frequency to 72MHz and configure HCLK, PCLK2 and PCLK1 prescalers. +* Input : None +* Return : None +*******************************************************************************************/ +static void SetSysClockTo72(void) +{ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + RCC->CTLR |= ((uint32_t)RCC_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CTLR & RCC_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CTLR & RCC_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Enable Prefetch Buffer */ + FLASH->ACTLR |= FLASH_ACTLR_PRFTBE; + + /* Flash 2 wait state */ + FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY); + FLASH->ACTLR |= (uint32_t)FLASH_ACTLR_LATENCY_2; + + /* HCLK = SYSCLK */ + RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV1; + /* PCLK2 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE2_DIV1; + /* PCLK1 = HCLK */ + RCC->CFGR0 |= (uint32_t)RCC_PPRE1_DIV2; + + /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_PLLSRC | RCC_PLLXTPRE | + RCC_PLLMULL)); + RCC->CFGR0 |= (uint32_t)(RCC_PLLSRC_HSE | RCC_PLLMULL9); + /* Enable PLL */ + RCC->CTLR |= RCC_PLLON; + /* Wait till PLL is ready */ + while((RCC->CTLR & RCC_PLLRDY) == 0) + { + } + /* Select PLL as system clock source */ + RCC->CFGR0 &= (uint32_t)((uint32_t)~(RCC_SW)); + RCC->CFGR0 |= (uint32_t)RCC_SW_PLL; + /* Wait till PLL is used as system clock source */ + while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08) + { + } + } + else + { + /* + * If HSE fails to start-up, the application will have wrong clock + * configuration. User can add here some code to deal with this error + */ + } +} +#endif + + + + diff --git a/bsp/ch32v103/libraries/WCH32V103_std_peripheral/system_ch32v10x.h b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/system_ch32v10x.h new file mode 100644 index 0000000000..df208db059 --- /dev/null +++ b/bsp/ch32v103/libraries/WCH32V103_std_peripheral/system_ch32v10x.h @@ -0,0 +1,28 @@ +/********************************** (C) COPYRIGHT ******************************* +* File Name : system_ch32v10x.h +* Author : WCH +* Version : V1.0.0 +* Date : 2020/04/30 +* Description : CH32V10x Device Peripheral Access Layer System Header File. +*******************************************************************************/ +#ifndef __SYSTEM_CH32V10x_H +#define __SYSTEM_CH32V10x_H + +#ifdef __cplusplus + extern "C" { +#endif + +extern uint32_t SystemCoreClock; /* System Clock Frequency (Core Clock) */ + +/* System_Exported_Functions */ +extern void SystemInit(void); +extern void SystemCoreClockUpdate(void); + +#ifdef __cplusplus +} +#endif + +#endif /*__CH32V10x_SYSTEM_H */ + + + diff --git a/bsp/ch32v103/linkscripts/link.lds b/bsp/ch32v103/linkscripts/link.lds new file mode 100644 index 0000000000..df36c9cf80 --- /dev/null +++ b/bsp/ch32v103/linkscripts/link.lds @@ -0,0 +1,193 @@ +ENTRY( _start ) + +__stack_size = 2048; + +PROVIDE( _stack_size = __stack_size ); + + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K +} + + +SECTIONS +{ + + .init : + { + _sinit = .; + . = ALIGN(4); + KEEP(*(SORT_NONE(.init))) + . = ALIGN(4); + _einit = .; + } >FLASH AT>FLASH + + .vector : + { + *(.vector); + . = ALIGN(64); + } >FLASH AT>FLASH + + .text : + { + . = ALIGN(4); + *(.text) + *(.text.*) + *(.rodata) + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t.*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(4); + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + . = ALIGN(4); + + /* section information for modules */ + . = ALIGN(4); + __rtmsymtab_start = .; + KEEP(*(RTMSymTab)) + __rtmsymtab_end = .; + . = ALIGN(4); + + } >FLASH AT>FLASH + + .fini : + { + KEEP(*(SORT_NONE(.fini))) + . = ALIGN(4); + } >FLASH AT>FLASH + + PROVIDE( _etext = . ); + PROVIDE( _eitcm = . ); + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH AT>FLASH + + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) + KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH AT>FLASH + + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) + KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH AT>FLASH + + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } >FLASH AT>FLASH + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } >FLASH AT>FLASH + + .dalign : + { + . = ALIGN(4); + PROVIDE(_data_vma = .); + } >RAM AT>FLASH + + .dlalign : + { + . = ALIGN(4); + PROVIDE(_data_lma = .); + } >FLASH AT>FLASH + + .data : + { + *(.gnu.linkonce.r.*) + *(.data .data.*) + *(.gnu.linkonce.d.*) + . = ALIGN(8); + PROVIDE( __global_pointer$ = . + 0x800 ); + *(.sdata .sdata.*) + *(.sdata2.*) + *(.gnu.linkonce.s.*) + . = ALIGN(8); + *(.srodata.cst16) + *(.srodata.cst8) + *(.srodata.cst4) + *(.srodata.cst2) + *(.srodata .srodata.*) + . = ALIGN(4); + PROVIDE( _edata = .); + } >RAM AT>FLASH + + .bss : + { + . = ALIGN(4); + PROVIDE( _sbss = .); + *(.sbss*) + *(.gnu.linkonce.sb.*) + *(.bss*) + *(.gnu.linkonce.b.*) + *(COMMON*) + . = ALIGN(4); + PROVIDE( _ebss = .); + } >RAM AT>FLASH + + PROVIDE( _end = _ebss); + PROVIDE( end = . ); + + .stack ORIGIN(RAM) + LENGTH(RAM) - __stack_size : + { + . = ALIGN(4); + PROVIDE(_susrstack = . ); + . = . + __stack_size; + PROVIDE( _eusrstack = .); + } >RAM + +} + + + diff --git a/bsp/ch32v103/rtconfig.h b/bsp/ch32v103/rtconfig.h new file mode 100644 index 0000000000..07750eaed7 --- /dev/null +++ b/bsp/ch32v103/rtconfig.h @@ -0,0 +1,164 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 7 +#define RT_TIMER_THREAD_STACK_SIZE 512 +#define RT_DEBUG + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart1" +#define RT_VER_NUM 0x40003 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 512 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 1024 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_ONLY +#define FINSH_ARG_MAX 10 + +/* Device virtual file system */ + + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_USING_LIBC + +/* Network */ + +/* Socket abstraction layer */ + + +/* Network interface device */ + + +/* light weight TCP/IP stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + + +/* Hardware Drivers Config */ + +#define SOC_CH32V103R8T6 + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_UART_CONSOLE +#define BSP_USING_PIN + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_UART +#define RT_USING_UART1 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/ch32v103/rtconfig.py b/bsp/ch32v103/rtconfig.py new file mode 100644 index 0000000000..b0755df0d2 --- /dev/null +++ b/bsp/ch32v103/rtconfig.py @@ -0,0 +1,66 @@ +import os +ARCH = 'risc-v' +CPU = 'ch32v103' +# toolchains options +CROSS_TOOL = 'gcc' + +#------- toolchains path ------------------------------------------------------- +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') + +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'E:/DevBoard/ARTT/rt-studio/RT-ThreadStudio/repo/Extract/ToolChain_Support_Packages/WCH/RISC-V-GCC-WCH/8.2.0/bin' + #EXEC_PATH = r'/opt/unknown-gcc/bin' +else: + print('Please make sure your toolchains is GNU GCC!') + exit(0) + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' +#BUILD = 'release' + +CORE = 'risc-v' +MAP_FILE = 'rtthread.map' +LINK_FILE = './linkscripts/link.lds' +TARGET_NAME = 'rtthread.bin' +TARGET_HEX = 'rtthread.hex' + +#------- GCC settings ---------------------------------------------------------- +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'riscv-none-embed-' + CC = PREFIX + 'gcc' + CXX= PREFIX + 'g++' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + #DEVICE = ' -march=rv32imac -mabi=ilp32 -DUSE_PLIC -DUSE_M_TIME -DNO_INIT -mcmodel=medany -msmall-data-limit=8 -L. -nostartfiles -lc ' + DEVICE = ' -march=rv32imac -mabi=ilp32 -msmall-data-limit=8 -mno-save-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -Wunused -Wuninitialized -L. -nostartfiles -lc ' + CFLAGS = DEVICE + CFLAGS += ' -save-temps=obj' + AFLAGS = '-c'+ DEVICE + ' -x assembler-with-cpp' + AFLAGS += ' -IIlibraries/Core -Ilibraries/WCH32V103_std_peripheral -Ilibraries/WCH32V103_std_peripheral/inc' + LFLAGS = DEVICE + LFLAGS += ' -Wl,--gc-sections,-cref,-Map=' + MAP_FILE + LFLAGS += ' -T ' + LINK_FILE + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O -g3' + AFLAGS += ' -g3' + else: + CFLAGS += ' -O2' + + #POST_ACTION = OBJCPY + ' -O binary $TARGET ' + TARGET_NAME + '\n' + POST_ACTION = OBJCPY + ' -O ihex $TARGET ' + TARGET_HEX + '\n' + POST_ACTION += SIZE + ' $TARGET\n' diff --git a/libcpu/risc-v/SConscript b/libcpu/risc-v/SConscript index 2447aee65a..adde94b4c9 100644 --- a/libcpu/risc-v/SConscript +++ b/libcpu/risc-v/SConscript @@ -16,6 +16,8 @@ elif rtconfig.CPU == "nuclei" : group = group elif rtconfig.CPU == "virt64" : group = group +elif rtconfig.CPU == "ch32v103" : + group = group else : group = group + SConscript(os.path.join(cwd, 'common', 'SConscript')) diff --git a/libcpu/risc-v/ch32v103/SConscript b/libcpu/risc-v/ch32v103/SConscript new file mode 100644 index 0000000000..b0ae20ba02 --- /dev/null +++ b/libcpu/risc-v/ch32v103/SConscript @@ -0,0 +1,14 @@ +# RT-Thread building script for component + +from building import * + +Import('rtconfig') + +cwd = GetCurrentDir() +src = Glob('*.c') + Glob('*.cpp') + Glob('*_gcc.S') +CPPPATH = [cwd] +ASFLAGS = '' + +group = DefineGroup('cpu', src, depend = [''], CPPPATH = CPPPATH, ASFLAGS = ASFLAGS) + +Return('group') diff --git a/libcpu/risc-v/ch32v103/context_gcc.S b/libcpu/risc-v/ch32v103/context_gcc.S new file mode 100644 index 0000000000..641837f3f4 --- /dev/null +++ b/libcpu/risc-v/ch32v103/context_gcc.S @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/28 Bernard The unify RISC-V porting implementation + * 2018/12/27 Jesven Add SMP support + */ + +#include "cpuport.h" + +#ifdef RT_USING_SMP +#define rt_hw_interrupt_disable rt_hw_local_irq_disable +#define rt_hw_interrupt_enable rt_hw_local_irq_enable +#endif + +/* + * rt_base_t rt_hw_interrupt_disable(void); + */ + .globl rt_hw_interrupt_disable +rt_hw_interrupt_disable: + csrrci a0, mstatus, 8 + ret + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ + .globl rt_hw_interrupt_enable +rt_hw_interrupt_enable: + csrw mstatus, a0 + ret + +/* + * #ifdef RT_USING_SMP + * void rt_hw_context_switch_to(rt_ubase_t to, stuct rt_thread *to_thread); + * #else + * void rt_hw_context_switch_to(rt_ubase_t to); + * #endif + * a0 --> to + * a1 --> to_thread + */ + .globl rt_hw_context_switch_to +rt_hw_context_switch_to: /* ֱл'from',Ҫڿʼʱ */ + la t0, _eusrstack /* ״лǰmainspĴԺжջ */ + csrw mscratch,t0 + + LOAD sp, (a0) /* 'to'̵߳spֵָmcusp */ + +#ifdef RT_USING_SMP /* ˵ģƬ */ + mv a0, a1 + jal rt_cpus_lock_status_restore +#endif + LOAD a0, 2 * REGBYTES(sp) + csrw mstatus, a0 /* ָ'to'̵߳mstatusֵ */ + j rt_hw_context_switch_exit + +/* + * #ifdef RT_USING_SMP + * void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); + * #else + * void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to); + * #endif + * + * a0 --> from + * a1 --> to + * a2 --> to_thread + */ + .globl rt_hw_context_switch +rt_hw_context_switch: + /* saved from thread context + * x1/ra -> sp(0) + * x1/ra -> sp(1) + * mstatus.mie -> sp(2) + * x(i) -> sp(i-4) + * ﱣ'from'߳ + * ӸĴͨüĴǰ + */ + +#ifdef ARCH_RISCV_FPU + addi sp, sp, -32 * FREGBYTES + + FSTORE f0, 0 * FREGBYTES(sp) + FSTORE f1, 1 * FREGBYTES(sp) + FSTORE f2, 2 * FREGBYTES(sp) + FSTORE f3, 3 * FREGBYTES(sp) + FSTORE f4, 4 * FREGBYTES(sp) + FSTORE f5, 5 * FREGBYTES(sp) + FSTORE f6, 6 * FREGBYTES(sp) + FSTORE f7, 7 * FREGBYTES(sp) + FSTORE f8, 8 * FREGBYTES(sp) + FSTORE f9, 9 * FREGBYTES(sp) + FSTORE f10, 10 * FREGBYTES(sp) + FSTORE f11, 11 * FREGBYTES(sp) + FSTORE f12, 12 * FREGBYTES(sp) + FSTORE f13, 13 * FREGBYTES(sp) + FSTORE f14, 14 * FREGBYTES(sp) + FSTORE f15, 15 * FREGBYTES(sp) + FSTORE f16, 16 * FREGBYTES(sp) + FSTORE f17, 17 * FREGBYTES(sp) + FSTORE f18, 18 * FREGBYTES(sp) + FSTORE f19, 19 * FREGBYTES(sp) + FSTORE f20, 20 * FREGBYTES(sp) + FSTORE f21, 21 * FREGBYTES(sp) + FSTORE f22, 22 * FREGBYTES(sp) + FSTORE f23, 23 * FREGBYTES(sp) + FSTORE f24, 24 * FREGBYTES(sp) + FSTORE f25, 25 * FREGBYTES(sp) + FSTORE f26, 26 * FREGBYTES(sp) + FSTORE f27, 27 * FREGBYTES(sp) + FSTORE f28, 28 * FREGBYTES(sp) + FSTORE f29, 29 * FREGBYTES(sp) + FSTORE f30, 30 * FREGBYTES(sp) + FSTORE f31, 31 * FREGBYTES(sp) +#endif + + addi sp, sp, -32 * REGBYTES /* л߳ǰfromsp32ڴ洢Ĵֵ */ + STORE sp, (a0) /* fromspֵҪʱram´лʱ */ + + STORE x1, 0 * REGBYTES(sp) /* ߳fromtoлra浽ṹepcλ */ + STORE x1, 1 * REGBYTES(sp) /* ra浽raλ */ + + csrr a0, mstatus /* ޸Ϊֱӱmstatus */ + andi a0, a0, 8 + beqz a0, save_mpie + li a0, 0x80 +save_mpie: + STORE a0, 2 * REGBYTES(sp) + + STORE x4, 4 * REGBYTES(sp) + STORE x5, 5 * REGBYTES(sp) + STORE x6, 6 * REGBYTES(sp) + STORE x7, 7 * REGBYTES(sp) + STORE x8, 8 * REGBYTES(sp) + STORE x9, 9 * REGBYTES(sp) + STORE x10, 10 * REGBYTES(sp) + STORE x11, 11 * REGBYTES(sp) + STORE x12, 12 * REGBYTES(sp) + STORE x13, 13 * REGBYTES(sp) + STORE x14, 14 * REGBYTES(sp) + STORE x15, 15 * REGBYTES(sp) + STORE x16, 16 * REGBYTES(sp) + STORE x17, 17 * REGBYTES(sp) + STORE x18, 18 * REGBYTES(sp) + STORE x19, 19 * REGBYTES(sp) + STORE x20, 20 * REGBYTES(sp) + STORE x21, 21 * REGBYTES(sp) + STORE x22, 22 * REGBYTES(sp) + STORE x23, 23 * REGBYTES(sp) + STORE x24, 24 * REGBYTES(sp) + STORE x25, 25 * REGBYTES(sp) + STORE x26, 26 * REGBYTES(sp) + STORE x27, 27 * REGBYTES(sp) + STORE x28, 28 * REGBYTES(sp) + STORE x29, 29 * REGBYTES(sp) + STORE x30, 30 * REGBYTES(sp) + STORE x31, 31 * REGBYTES(sp) + + /* restore to thread context + * sp(0) -> epc; + * sp(1) -> ra; + * sp(i) -> x(i+2) + */ + LOAD sp, (a1) /* ȡ'to'߳spֵ */ + +#ifdef RT_USING_SMP + mv a0, a2 + jal rt_cpus_lock_status_restore +#endif /*RT_USING_SMP*/ + + j rt_hw_context_switch_exit + +#ifdef RT_USING_SMP +/* + * void rt_hw_context_switch_interrupt(void *context, rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); + * + * a0 --> context + * a1 --> from + * a2 --> to + * a3 --> to_thread + */ + .globl rt_hw_context_switch_interrupt +rt_hw_context_switch_interrupt: + + STORE a0, 0(a1) + + LOAD sp, 0(a2) + move a0, a3 + call rt_cpus_lock_status_restore + + j rt_hw_context_switch_exit + +#endif + +.global rt_hw_context_switch_exit +rt_hw_context_switch_exit: +#ifdef RT_USING_SMP +#ifdef RT_USING_SIGNALS + mv a0, sp + + csrr t0, mhartid + /* switch interrupt stack of current cpu */ + la sp, __stack_start__ + addi t1, t0, 1 + li t2, __STACKSIZE__ + mul t1, t1, t2 + add sp, sp, t1 /* sp = (cpuid + 1) * __STACKSIZE__ + __stack_start__ */ + + call rt_signal_check + mv sp, a0 +#endif +#endif + /* resw ra to mepc */ + LOAD a0, 0 * REGBYTES(sp) /* ൱ڰraֵmepc */ + csrw mepc, a0 + + LOAD x1, 1 * REGBYTES(sp) /* ָra */ + + li t0, 0x00001800 + csrs mstatus, t0 + LOAD a0, 2 * REGBYTES(sp) + # csrw mstatus ,a0 /* ָmstatus */ + csrs mstatus, a0 + + LOAD x4, 4 * REGBYTES(sp) + LOAD x5, 5 * REGBYTES(sp) + LOAD x6, 6 * REGBYTES(sp) + LOAD x7, 7 * REGBYTES(sp) + LOAD x8, 8 * REGBYTES(sp) + LOAD x9, 9 * REGBYTES(sp) + LOAD x10, 10 * REGBYTES(sp) + LOAD x11, 11 * REGBYTES(sp) + LOAD x12, 12 * REGBYTES(sp) + LOAD x13, 13 * REGBYTES(sp) + LOAD x14, 14 * REGBYTES(sp) + LOAD x15, 15 * REGBYTES(sp) + LOAD x16, 16 * REGBYTES(sp) + LOAD x17, 17 * REGBYTES(sp) + LOAD x18, 18 * REGBYTES(sp) + LOAD x19, 19 * REGBYTES(sp) + LOAD x20, 20 * REGBYTES(sp) + LOAD x21, 21 * REGBYTES(sp) + LOAD x22, 22 * REGBYTES(sp) + LOAD x23, 23 * REGBYTES(sp) + LOAD x24, 24 * REGBYTES(sp) + LOAD x25, 25 * REGBYTES(sp) + LOAD x26, 26 * REGBYTES(sp) + LOAD x27, 27 * REGBYTES(sp) + LOAD x28, 28 * REGBYTES(sp) + LOAD x29, 29 * REGBYTES(sp) + LOAD x30, 30 * REGBYTES(sp) + LOAD x31, 31 * REGBYTES(sp) + + addi sp, sp, 32 * REGBYTES /* ָsp */ + +#ifdef ARCH_RISCV_FPU /* Ĵ帡Ĵע߳ջĴС */ + FLOAD f0, 0 * FREGBYTES(sp) + FLOAD f1, 1 * FREGBYTES(sp) + FLOAD f2, 2 * FREGBYTES(sp) + FLOAD f3, 3 * FREGBYTES(sp) + FLOAD f4, 4 * FREGBYTES(sp) + FLOAD f5, 5 * FREGBYTES(sp) + FLOAD f6, 6 * FREGBYTES(sp) + FLOAD f7, 7 * FREGBYTES(sp) + FLOAD f8, 8 * FREGBYTES(sp) + FLOAD f9, 9 * FREGBYTES(sp) + FLOAD f10, 10 * FREGBYTES(sp) + FLOAD f11, 11 * FREGBYTES(sp) + FLOAD f12, 12 * FREGBYTES(sp) + FLOAD f13, 13 * FREGBYTES(sp) + FLOAD f14, 14 * FREGBYTES(sp) + FLOAD f15, 15 * FREGBYTES(sp) + FLOAD f16, 16 * FREGBYTES(sp) + FLOAD f17, 17 * FREGBYTES(sp) + FLOAD f18, 18 * FREGBYTES(sp) + FLOAD f19, 19 * FREGBYTES(sp) + FLOAD f20, 20 * FREGBYTES(sp) + FLOAD f21, 21 * FREGBYTES(sp) + FLOAD f22, 22 * FREGBYTES(sp) + FLOAD f23, 23 * FREGBYTES(sp) + FLOAD f24, 24 * FREGBYTES(sp) + FLOAD f25, 25 * FREGBYTES(sp) + FLOAD f26, 26 * FREGBYTES(sp) + FLOAD f27, 27 * FREGBYTES(sp) + FLOAD f28, 28 * FREGBYTES(sp) + FLOAD f29, 29 * FREGBYTES(sp) + FLOAD f30, 30 * FREGBYTES(sp) + FLOAD f31, 31 * FREGBYTES(sp) + + addi sp, sp, 32 * FREGBYTES +#endif + + mret /* ʱ򷵻صmepc,raֵ */ diff --git a/libcpu/risc-v/ch32v103/cpuport.c b/libcpu/risc-v/ch32v103/cpuport.c new file mode 100644 index 0000000000..89ad71533a --- /dev/null +++ b/libcpu/risc-v/ch32v103/cpuport.c @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/28 Bernard The unify RISC-V porting code. + * 2021/10/08 Walter init mstatus as 0x00001888, calll Software_IRQn + * in rt_hw_context_switch_interrupt() + */ + +#include +#include + +#include "cpuport.h" +#include "ch32v10x.h" +#ifndef RT_USING_SMP +volatile rt_ubase_t rt_interrupt_from_thread = 0; +volatile rt_ubase_t rt_interrupt_to_thread = 0; +volatile rt_uint32_t rt_thread_switch_interrupt_flag = 0; +#endif + +struct rt_hw_stack_frame +{ + rt_ubase_t epc; /* epc - epc - program counter */ + rt_ubase_t ra; /* x1 - ra - return address for jumps */ + rt_ubase_t mstatus; /* - machine status register */ + rt_ubase_t gp; /* x3 - gp - global pointer */ + rt_ubase_t tp; /* x4 - tp - thread pointer */ + rt_ubase_t t0; /* x5 - t0 - temporary register 0 */ + rt_ubase_t t1; /* x6 - t1 - temporary register 1 */ + rt_ubase_t t2; /* x7 - t2 - temporary register 2 */ + rt_ubase_t s0_fp; /* x8 - s0/fp - saved register 0 or frame pointer */ + rt_ubase_t s1; /* x9 - s1 - saved register 1 */ + rt_ubase_t a0; /* x10 - a0 - return value or function argument 0 */ + rt_ubase_t a1; /* x11 - a1 - return value or function argument 1 */ + rt_ubase_t a2; /* x12 - a2 - function argument 2 */ + rt_ubase_t a3; /* x13 - a3 - function argument 3 */ + rt_ubase_t a4; /* x14 - a4 - function argument 4 */ + rt_ubase_t a5; /* x15 - a5 - function argument 5 */ + rt_ubase_t a6; /* x16 - a6 - function argument 6 */ + rt_ubase_t a7; /* x17 - s7 - function argument 7 */ + rt_ubase_t s2; /* x18 - s2 - saved register 2 */ + rt_ubase_t s3; /* x19 - s3 - saved register 3 */ + rt_ubase_t s4; /* x20 - s4 - saved register 4 */ + rt_ubase_t s5; /* x21 - s5 - saved register 5 */ + rt_ubase_t s6; /* x22 - s6 - saved register 6 */ + rt_ubase_t s7; /* x23 - s7 - saved register 7 */ + rt_ubase_t s8; /* x24 - s8 - saved register 8 */ + rt_ubase_t s9; /* x25 - s9 - saved register 9 */ + rt_ubase_t s10; /* x26 - s10 - saved register 10 */ + rt_ubase_t s11; /* x27 - s11 - saved register 11 */ + rt_ubase_t t3; /* x28 - t3 - temporary register 3 */ + rt_ubase_t t4; /* x29 - t4 - temporary register 4 */ + rt_ubase_t t5; /* x30 - t5 - temporary register 5 */ + rt_ubase_t t6; /* x31 - t6 - temporary register 6 */ + +/* ӸĴ */ +#ifdef ARCH_RISCV_FPU + rv_floatreg_t f0; /* f0 */ + rv_floatreg_t f1; /* f1 */ + rv_floatreg_t f2; /* f2 */ + rv_floatreg_t f3; /* f3 */ + rv_floatreg_t f4; /* f4 */ + rv_floatreg_t f5; /* f5 */ + rv_floatreg_t f6; /* f6 */ + rv_floatreg_t f7; /* f7 */ + rv_floatreg_t f8; /* f8 */ + rv_floatreg_t f9; /* f9 */ + rv_floatreg_t f10; /* f10 */ + rv_floatreg_t f11; /* f11 */ + rv_floatreg_t f12; /* f12 */ + rv_floatreg_t f13; /* f13 */ + rv_floatreg_t f14; /* f14 */ + rv_floatreg_t f15; /* f15 */ + rv_floatreg_t f16; /* f16 */ + rv_floatreg_t f17; /* f17 */ + rv_floatreg_t f18; /* f18 */ + rv_floatreg_t f19; /* f19 */ + rv_floatreg_t f20; /* f20 */ + rv_floatreg_t f21; /* f21 */ + rv_floatreg_t f22; /* f22 */ + rv_floatreg_t f23; /* f23 */ + rv_floatreg_t f24; /* f24 */ + rv_floatreg_t f25; /* f25 */ + rv_floatreg_t f26; /* f26 */ + rv_floatreg_t f27; /* f27 */ + rv_floatreg_t f28; /* f28 */ + rv_floatreg_t f29; /* f29 */ + rv_floatreg_t f30; /* f30 */ + rv_floatreg_t f31; /* f31 */ +#endif +}; + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, + void *parameter, + rt_uint8_t *stack_addr, + void *texit) +{ + struct rt_hw_stack_frame *frame; + rt_uint8_t *stk; + int i; + + stk = stack_addr + sizeof(rt_ubase_t); + stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_ubase_t)stk, REGBYTES); + stk -= sizeof(struct rt_hw_stack_frame); + + frame = (struct rt_hw_stack_frame *)stk; + + for (i = 0; i < sizeof(struct rt_hw_stack_frame) / sizeof(rt_ubase_t); i++) + { + ((rt_ubase_t *)frame)[i] = 0xdeadbeef; + } + + frame->ra = (rt_ubase_t)texit; + frame->a0 = (rt_ubase_t)parameter; + frame->epc = (rt_ubase_t)tentry; /* ʼΪڣmret֮һлӦеִ */ + + /* force to machine mode(MPP=11) and set MPIE to 1 */ + frame->mstatus = 0x00001888; //mstatus ʼ + return stk; +} + +/* + * #ifdef RT_USING_SMP + * void rt_hw_context_switch_interrupt(void *context, rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); + * #else + * void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to); + * #endif + */ +#ifndef RT_USING_SMP +void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to) +{ + if (rt_thread_switch_interrupt_flag == 0) + rt_interrupt_from_thread = from; + + rt_interrupt_to_thread = to; + rt_thread_switch_interrupt_flag = 1; + NVIC_SetPendingIRQ(Software_IRQn); /* жл߳ */ + return ; +} +#endif /* end of RT_USING_SMP */ + +/** shutdown CPU */ +RT_WEAK void rt_hw_cpu_shutdown() +{ + rt_uint32_t level; + rt_kprintf("shutdown...\n"); + + level = rt_hw_interrupt_disable(); + while (level) + { + RT_ASSERT(0); + } +} diff --git a/libcpu/risc-v/ch32v103/cpuport.h b/libcpu/risc-v/ch32v103/cpuport.h new file mode 100644 index 0000000000..b59746756e --- /dev/null +++ b/libcpu/risc-v/ch32v103/cpuport.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-10-03 Bernard The first version + * 2020/11/20 BalanceTWK Add FPU support + */ + +#ifndef CPUPORT_H__ +#define CPUPORT_H__ + +#include + +/* bytes of register width */ +#ifdef ARCH_CPU_64BIT +#define STORE sd +#define LOAD ld +#define REGBYTES 8 +#else +#define STORE sw +#define LOAD lw +#define REGBYTES 4 +#endif + +/* ӸĴ */ +#ifdef ARCH_RISCV_FPU +#ifdef ARCH_RISCV_FPU_D +#define FSTORE fsd +#define FLOAD fld +#define FREGBYTES 8 +#define rv_floatreg_t rt_int64_t +#endif +#ifdef ARCH_RISCV_FPU_S +#define FSTORE fsw +#define FLOAD flw +#define FREGBYTES 4 +#define rv_floatreg_t rt_int32_t +#endif +#endif + +#endif diff --git a/libcpu/risc-v/ch32v103/cpuport.s b/libcpu/risc-v/ch32v103/cpuport.s new file mode 100644 index 0000000000..915d59ea6f --- /dev/null +++ b/libcpu/risc-v/ch32v103/cpuport.s @@ -0,0 +1,27797 @@ + .file "cpuport.c" + .option nopic + .text +.Ltext0: + .cfi_sections .debug_frame + .section .text.rt_hw_stack_init,"ax",@progbits + .align 1 + .globl rt_hw_stack_init + .type rt_hw_stack_init, @function +rt_hw_stack_init: +.LFB29: + .file 1 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\libcpu\\risc-v\\ch32v103\\cpuport.c" + .loc 1 108 1 + .cfi_startproc +.LVL0: + mv a6,a0 + .loc 1 109 5 + .loc 1 110 5 + .loc 1 111 5 + .loc 1 113 5 +.LVL1: + .loc 1 114 5 + .loc 1 113 9 is_stmt 0 + addi a2,a2,4 +.LVL2: + .loc 1 114 44 + andi a2,a2,-4 +.LVL3: + .loc 1 115 5 is_stmt 1 + .loc 1 115 9 is_stmt 0 + addi a0,a2,-128 +.LVL4: + .loc 1 117 5 is_stmt 1 + .loc 1 119 5 + mv a5,a0 + .loc 1 121 34 is_stmt 0 + li a4,-559038464 + addi a4,a4,-273 +.LVL5: +.L2: + .loc 1 121 9 is_stmt 1 discriminator 3 + .loc 1 121 34 is_stmt 0 discriminator 3 + sw a4,0(a5) + addi a5,a5,4 + .loc 1 119 5 discriminator 3 + bne a2,a5,.L2 + .loc 1 124 5 is_stmt 1 + .loc 1 124 15 is_stmt 0 + sw a3,-124(a2) + .loc 1 125 5 is_stmt 1 + .loc 1 125 15 is_stmt 0 + sw a1,-88(a2) + .loc 1 126 5 is_stmt 1 + .loc 1 126 16 is_stmt 0 + sw a6,-128(a2) + .loc 1 130 6 is_stmt 1 + .loc 1 130 21 is_stmt 0 + li a5,8192 + addi a5,a5,-1912 + sw a5,-120(a2) + .loc 1 131 5 is_stmt 1 + .loc 1 132 1 is_stmt 0 + ret + .cfi_endproc +.LFE29: + .size rt_hw_stack_init, .-rt_hw_stack_init + .section .text.rt_hw_context_switch_interrupt,"ax",@progbits + .align 1 + .globl rt_hw_context_switch_interrupt + .type rt_hw_context_switch_interrupt, @function +rt_hw_context_switch_interrupt: +.LFB30: + .loc 1 143 1 is_stmt 1 + .cfi_startproc +.LVL6: + .loc 1 144 5 + .loc 1 144 41 is_stmt 0 + lui a5,%hi(.LANCHOR0) + lw a5,%lo(.LANCHOR0)(a5) + .loc 1 144 8 + bnez a5,.L5 + .loc 1 145 9 is_stmt 1 + .loc 1 145 34 is_stmt 0 + lui a5,%hi(.LANCHOR1) + sw a0,%lo(.LANCHOR1)(a5) +.L5: + .loc 1 147 5 is_stmt 1 + .loc 1 147 28 is_stmt 0 + lui a5,%hi(.LANCHOR2) + sw a1,%lo(.LANCHOR2)(a5) + .loc 1 148 5 is_stmt 1 + .loc 1 148 37 is_stmt 0 + lui a5,%hi(.LANCHOR0) + li a4,1 + sw a4,%lo(.LANCHOR0)(a5) + .loc 1 149 5 is_stmt 1 +.LVL7: +.LBB4: +.LBB5: + .file 2 "libraries\\Core/core_riscv.h" + .loc 2 173 3 + .loc 2 173 62 is_stmt 0 + li a5,-536813568 + li a4,16384 + sw a4,512(a5) +.LVL8: +.LBE5: +.LBE4: + .loc 1 151 5 is_stmt 1 + .loc 1 152 1 is_stmt 0 + ret + .cfi_endproc +.LFE30: + .size rt_hw_context_switch_interrupt, .-rt_hw_context_switch_interrupt + .section .text.rt_hw_cpu_shutdown,"ax",@progbits + .align 1 + .globl rt_hw_cpu_shutdown + .type rt_hw_cpu_shutdown, @function +rt_hw_cpu_shutdown: +.LFB31: + .loc 1 157 1 is_stmt 1 + .cfi_startproc + addi sp,sp,-16 + .cfi_def_cfa_offset 16 + sw ra,12(sp) + sw s0,8(sp) + sw s1,4(sp) + .cfi_offset 1, -4 + .cfi_offset 8, -8 + .cfi_offset 9, -12 + .loc 1 158 5 + .loc 1 159 5 + lui a0,%hi(.LC0) + addi a0,a0,%lo(.LC0) + call rt_kprintf +.LVL9: + .loc 1 161 5 + .loc 1 161 13 is_stmt 0 + call rt_hw_interrupt_disable +.LVL10: + .loc 1 162 5 is_stmt 1 + .loc 1 164 65 + .loc 1 162 11 is_stmt 0 + beqz a0,.L6 + .loc 1 164 21 + lui s1,%hi(.LANCHOR3) + lui s0,%hi(.LC1) +.LVL11: +.L8: + .loc 1 164 9 is_stmt 1 discriminator 1 + .loc 1 164 21 discriminator 1 + li a2,164 + addi a1,s1,%lo(.LANCHOR3) + addi a0,s0,%lo(.LC1) + call rt_assert_handler +.LVL12: + .loc 1 164 65 discriminator 1 + j .L8 +.LVL13: +.L6: + .loc 1 166 1 is_stmt 0 + lw ra,12(sp) + .cfi_restore 1 + lw s0,8(sp) + .cfi_restore 8 + lw s1,4(sp) + .cfi_restore 9 + addi sp,sp,16 + .cfi_def_cfa_offset 0 + jr ra + .cfi_endproc +.LFE31: + .size rt_hw_cpu_shutdown, .-rt_hw_cpu_shutdown + .globl rt_thread_switch_interrupt_flag + .globl rt_interrupt_to_thread + .globl rt_interrupt_from_thread + .section .rodata.__FUNCTION__.4865,"a" + .align 2 + .set .LANCHOR3,. + 0 + .type __FUNCTION__.4865, @object + .size __FUNCTION__.4865, 19 +__FUNCTION__.4865: + .string "rt_hw_cpu_shutdown" + .section .rodata.rt_hw_cpu_shutdown.str1.4,"aMS",@progbits,1 + .align 2 +.LC0: + .string "shutdown...\n" + .zero 3 +.LC1: + .string "0" + .section .sbss.rt_interrupt_from_thread,"aw",@nobits + .align 2 + .set .LANCHOR1,. + 0 + .type rt_interrupt_from_thread, @object + .size rt_interrupt_from_thread, 4 +rt_interrupt_from_thread: + .zero 4 + .section .sbss.rt_interrupt_to_thread,"aw",@nobits + .align 2 + .set .LANCHOR2,. + 0 + .type rt_interrupt_to_thread, @object + .size rt_interrupt_to_thread, 4 +rt_interrupt_to_thread: + .zero 4 + .section .sbss.rt_thread_switch_interrupt_flag,"aw",@nobits + .align 2 + .set .LANCHOR0,. + 0 + .type rt_thread_switch_interrupt_flag, @object + .size rt_thread_switch_interrupt_flag, 4 +rt_thread_switch_interrupt_flag: + .zero 4 + .text +.Letext0: + .file 3 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/rtdef.h" + .file 4 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\machine\\_default_types.h" + .file 5 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\lock.h" + .file 6 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\_types.h" + .file 7 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\lib\\gcc\\riscv-none-embed\\8.2.0\\include\\stddef.h" + .file 8 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\reent.h" + .file 9 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\_stdint.h" + .file 10 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\time.h" + .file 11 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/rtthread.h" + .file 12 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\components\\finsh/finsh_api.h" + .file 13 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x.h" + .file 14 "libraries\\WCH32V103_std_peripheral/system_ch32v10x.h" + .file 15 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_usb.h" + .file 16 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_usb_host.h" + .file 17 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/rthw.h" + .section .debug_info,"",@progbits +.Ldebug_info0: + .4byte 0x12a0 + .2byte 0x4 + .4byte .Ldebug_abbrev0 + .byte 0x4 + .byte 0x1 + .4byte .LASF4805 + .byte 0xc + .4byte .LASF4806 + .4byte .LASF4807 + .4byte .Ldebug_ranges0+0 + .4byte 0 + .4byte .Ldebug_line0 + .4byte .Ldebug_macro0 + .byte 0x2 + .byte 0x1 + .byte 0x6 + .4byte .LASF4550 + .byte 0x2 + .byte 0x2 + .byte 0x5 + .4byte .LASF4551 + .byte 0x3 + .byte 0x4 + .byte 0x5 + .string "int" + .byte 0x4 + .4byte .LASF4554 + .byte 0x3 + .byte 0x47 + .byte 0x17 + .4byte 0x4a + .byte 0x2 + .byte 0x1 + .byte 0x8 + .4byte .LASF4552 + .byte 0x2 + .byte 0x2 + .byte 0x7 + .4byte .LASF4553 + .byte 0x4 + .4byte .LASF4555 + .byte 0x3 + .byte 0x49 + .byte 0x16 + .4byte 0x69 + .byte 0x5 + .4byte 0x58 + .byte 0x2 + .byte 0x4 + .byte 0x7 + .4byte .LASF4556 + .byte 0x2 + .byte 0x8 + .byte 0x5 + .4byte .LASF4557 + .byte 0x2 + .byte 0x8 + .byte 0x7 + .4byte .LASF4558 + .byte 0x2 + .byte 0x4 + .byte 0x5 + .4byte .LASF4559 + .byte 0x4 + .4byte .LASF4560 + .byte 0x3 + .byte 0x56 + .byte 0x17 + .4byte 0x96 + .byte 0x5 + .4byte 0x85 + .byte 0x2 + .byte 0x4 + .byte 0x7 + .4byte .LASF4561 + .byte 0x4 + .4byte .LASF4562 + .byte 0x3 + .byte 0x5c + .byte 0x14 + .4byte 0x85 + .byte 0x6 + .4byte 0xb9 + .4byte 0xb9 + .byte 0x7 + .4byte 0x69 + .byte 0x7 + .byte 0 + .byte 0x2 + .byte 0x1 + .byte 0x6 + .4byte .LASF1174 + .byte 0x8 + .4byte 0xb9 + .byte 0x9 + .byte 0x4 + .byte 0xa + .byte 0x4 + .4byte 0x3e + .byte 0xa + .byte 0x4 + .4byte 0xc0 + .byte 0xa + .byte 0x4 + .4byte 0xb9 + .byte 0x4 + .4byte .LASF4563 + .byte 0x4 + .byte 0x2b + .byte 0x17 + .4byte 0x4a + .byte 0x4 + .4byte .LASF4564 + .byte 0x4 + .byte 0x4f + .byte 0x1b + .4byte 0x96 + .byte 0x2 + .byte 0x10 + .byte 0x4 + .4byte .LASF4565 + .byte 0x4 + .4byte .LASF4566 + .byte 0x5 + .byte 0x22 + .byte 0x19 + .4byte 0x104 + .byte 0xa + .byte 0x4 + .4byte 0x10a + .byte 0xb + .4byte .LASF4673 + .byte 0x4 + .4byte .LASF4567 + .byte 0x6 + .byte 0x2c + .byte 0xe + .4byte 0x7e + .byte 0x4 + .4byte .LASF4568 + .byte 0x6 + .byte 0x72 + .byte 0xe + .4byte 0x7e + .byte 0x4 + .4byte .LASF4569 + .byte 0x6 + .byte 0x91 + .byte 0x14 + .4byte 0x37 + .byte 0xc + .4byte .LASF4570 + .byte 0x7 + .2byte 0x165 + .byte 0x16 + .4byte 0x69 + .byte 0xd + .byte 0x4 + .byte 0x6 + .byte 0xa6 + .byte 0x3 + .4byte 0x162 + .byte 0xe + .4byte .LASF4571 + .byte 0x6 + .byte 0xa8 + .byte 0xc + .4byte 0x133 + .byte 0xe + .4byte .LASF4572 + .byte 0x6 + .byte 0xa9 + .byte 0x13 + .4byte 0x162 + .byte 0 + .byte 0x6 + .4byte 0x4a + .4byte 0x172 + .byte 0x7 + .4byte 0x69 + .byte 0x3 + .byte 0 + .byte 0xf + .byte 0x8 + .byte 0x6 + .byte 0xa3 + .byte 0x9 + .4byte 0x196 + .byte 0x10 + .4byte .LASF4573 + .byte 0x6 + .byte 0xa5 + .byte 0x7 + .4byte 0x37 + .byte 0 + .byte 0x10 + .4byte .LASF4574 + .byte 0x6 + .byte 0xaa + .byte 0x5 + .4byte 0x140 + .byte 0x4 + .byte 0 + .byte 0x4 + .4byte .LASF4575 + .byte 0x6 + .byte 0xab + .byte 0x3 + .4byte 0x172 + .byte 0x4 + .4byte .LASF4576 + .byte 0x6 + .byte 0xaf + .byte 0x11 + .4byte 0xf8 + .byte 0x4 + .4byte .LASF4577 + .byte 0x8 + .byte 0x16 + .byte 0x17 + .4byte 0x96 + .byte 0x11 + .4byte .LASF4582 + .byte 0x18 + .byte 0x8 + .byte 0x2f + .byte 0x8 + .4byte 0x214 + .byte 0x10 + .4byte .LASF4578 + .byte 0x8 + .byte 0x31 + .byte 0x13 + .4byte 0x214 + .byte 0 + .byte 0x12 + .string "_k" + .byte 0x8 + .byte 0x32 + .byte 0x7 + .4byte 0x37 + .byte 0x4 + .byte 0x10 + .4byte .LASF4579 + .byte 0x8 + .byte 0x32 + .byte 0xb + .4byte 0x37 + .byte 0x8 + .byte 0x10 + .4byte .LASF4580 + .byte 0x8 + .byte 0x32 + .byte 0x14 + .4byte 0x37 + .byte 0xc + .byte 0x10 + .4byte .LASF4581 + .byte 0x8 + .byte 0x32 + .byte 0x1b + .4byte 0x37 + .byte 0x10 + .byte 0x12 + .string "_x" + .byte 0x8 + .byte 0x33 + .byte 0xb + .4byte 0x21a + .byte 0x14 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x1ba + .byte 0x6 + .4byte 0x1ae + .4byte 0x22a + .byte 0x7 + .4byte 0x69 + .byte 0 + .byte 0 + .byte 0x11 + .4byte .LASF4583 + .byte 0x24 + .byte 0x8 + .byte 0x37 + .byte 0x8 + .4byte 0x2ad + .byte 0x10 + .4byte .LASF4584 + .byte 0x8 + .byte 0x39 + .byte 0x7 + .4byte 0x37 + .byte 0 + .byte 0x10 + .4byte .LASF4585 + .byte 0x8 + .byte 0x3a + .byte 0x7 + .4byte 0x37 + .byte 0x4 + .byte 0x10 + .4byte .LASF4586 + .byte 0x8 + .byte 0x3b + .byte 0x7 + .4byte 0x37 + .byte 0x8 + .byte 0x10 + .4byte .LASF4587 + .byte 0x8 + .byte 0x3c + .byte 0x7 + .4byte 0x37 + .byte 0xc + .byte 0x10 + .4byte .LASF4588 + .byte 0x8 + .byte 0x3d + .byte 0x7 + .4byte 0x37 + .byte 0x10 + .byte 0x10 + .4byte .LASF4589 + .byte 0x8 + .byte 0x3e + .byte 0x7 + .4byte 0x37 + .byte 0x14 + .byte 0x10 + .4byte .LASF4590 + .byte 0x8 + .byte 0x3f + .byte 0x7 + .4byte 0x37 + .byte 0x18 + .byte 0x10 + .4byte .LASF4591 + .byte 0x8 + .byte 0x40 + .byte 0x7 + .4byte 0x37 + .byte 0x1c + .byte 0x10 + .4byte .LASF4592 + .byte 0x8 + .byte 0x41 + .byte 0x7 + .4byte 0x37 + .byte 0x20 + .byte 0 + .byte 0x13 + .4byte .LASF4593 + .2byte 0x108 + .byte 0x8 + .byte 0x4a + .byte 0x8 + .4byte 0x2f2 + .byte 0x10 + .4byte .LASF4594 + .byte 0x8 + .byte 0x4b + .byte 0x9 + .4byte 0x2f2 + .byte 0 + .byte 0x10 + .4byte .LASF4595 + .byte 0x8 + .byte 0x4c + .byte 0x9 + .4byte 0x2f2 + .byte 0x80 + .byte 0x14 + .4byte .LASF4596 + .byte 0x8 + .byte 0x4e + .byte 0xa + .4byte 0x1ae + .2byte 0x100 + .byte 0x14 + .4byte .LASF4597 + .byte 0x8 + .byte 0x51 + .byte 0xa + .4byte 0x1ae + .2byte 0x104 + .byte 0 + .byte 0x6 + .4byte 0xc5 + .4byte 0x302 + .byte 0x7 + .4byte 0x69 + .byte 0x1f + .byte 0 + .byte 0x13 + .4byte .LASF4598 + .2byte 0x190 + .byte 0x8 + .byte 0x5d + .byte 0x8 + .4byte 0x345 + .byte 0x10 + .4byte .LASF4578 + .byte 0x8 + .byte 0x5e + .byte 0x12 + .4byte 0x345 + .byte 0 + .byte 0x10 + .4byte .LASF4599 + .byte 0x8 + .byte 0x5f + .byte 0x6 + .4byte 0x37 + .byte 0x4 + .byte 0x10 + .4byte .LASF4600 + .byte 0x8 + .byte 0x61 + .byte 0x9 + .4byte 0x34b + .byte 0x8 + .byte 0x10 + .4byte .LASF4593 + .byte 0x8 + .byte 0x62 + .byte 0x1e + .4byte 0x2ad + .byte 0x88 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x302 + .byte 0x6 + .4byte 0x35b + .4byte 0x35b + .byte 0x7 + .4byte 0x69 + .byte 0x1f + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x361 + .byte 0x15 + .byte 0x11 + .4byte .LASF4601 + .byte 0x8 + .byte 0x8 + .byte 0x75 + .byte 0x8 + .4byte 0x38a + .byte 0x10 + .4byte .LASF4602 + .byte 0x8 + .byte 0x76 + .byte 0x11 + .4byte 0x38a + .byte 0 + .byte 0x10 + .4byte .LASF4603 + .byte 0x8 + .byte 0x77 + .byte 0x6 + .4byte 0x37 + .byte 0x4 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x4a + .byte 0x11 + .4byte .LASF4604 + .byte 0x68 + .byte 0x8 + .byte 0xb5 + .byte 0x8 + .4byte 0x4d3 + .byte 0x12 + .string "_p" + .byte 0x8 + .byte 0xb6 + .byte 0x12 + .4byte 0x38a + .byte 0 + .byte 0x12 + .string "_r" + .byte 0x8 + .byte 0xb7 + .byte 0x7 + .4byte 0x37 + .byte 0x4 + .byte 0x12 + .string "_w" + .byte 0x8 + .byte 0xb8 + .byte 0x7 + .4byte 0x37 + .byte 0x8 + .byte 0x10 + .4byte .LASF4605 + .byte 0x8 + .byte 0xb9 + .byte 0x9 + .4byte 0x30 + .byte 0xc + .byte 0x10 + .4byte .LASF4606 + .byte 0x8 + .byte 0xba + .byte 0x9 + .4byte 0x30 + .byte 0xe + .byte 0x12 + .string "_bf" + .byte 0x8 + .byte 0xbb + .byte 0x11 + .4byte 0x362 + .byte 0x10 + .byte 0x10 + .4byte .LASF4607 + .byte 0x8 + .byte 0xbc + .byte 0x7 + .4byte 0x37 + .byte 0x18 + .byte 0x10 + .4byte .LASF4608 + .byte 0x8 + .byte 0xc3 + .byte 0xa + .4byte 0xc5 + .byte 0x1c + .byte 0x10 + .4byte .LASF4609 + .byte 0x8 + .byte 0xc5 + .byte 0xe + .4byte 0x645 + .byte 0x20 + .byte 0x10 + .4byte .LASF4610 + .byte 0x8 + .byte 0xc7 + .byte 0xe + .4byte 0x669 + .byte 0x24 + .byte 0x10 + .4byte .LASF4611 + .byte 0x8 + .byte 0xca + .byte 0xd + .4byte 0x68d + .byte 0x28 + .byte 0x10 + .4byte .LASF4612 + .byte 0x8 + .byte 0xcb + .byte 0x9 + .4byte 0x6a7 + .byte 0x2c + .byte 0x12 + .string "_ub" + .byte 0x8 + .byte 0xce + .byte 0x11 + .4byte 0x362 + .byte 0x30 + .byte 0x12 + .string "_up" + .byte 0x8 + .byte 0xcf + .byte 0x12 + .4byte 0x38a + .byte 0x38 + .byte 0x12 + .string "_ur" + .byte 0x8 + .byte 0xd0 + .byte 0x7 + .4byte 0x37 + .byte 0x3c + .byte 0x10 + .4byte .LASF4613 + .byte 0x8 + .byte 0xd3 + .byte 0x11 + .4byte 0x6ad + .byte 0x40 + .byte 0x10 + .4byte .LASF4614 + .byte 0x8 + .byte 0xd4 + .byte 0x11 + .4byte 0x6bd + .byte 0x43 + .byte 0x12 + .string "_lb" + .byte 0x8 + .byte 0xd7 + .byte 0x11 + .4byte 0x362 + .byte 0x44 + .byte 0x10 + .4byte .LASF4615 + .byte 0x8 + .byte 0xda + .byte 0x7 + .4byte 0x37 + .byte 0x4c + .byte 0x10 + .4byte .LASF4616 + .byte 0x8 + .byte 0xdb + .byte 0xa + .4byte 0x10f + .byte 0x50 + .byte 0x10 + .4byte .LASF4617 + .byte 0x8 + .byte 0xde + .byte 0x12 + .4byte 0x4f1 + .byte 0x54 + .byte 0x10 + .4byte .LASF4618 + .byte 0x8 + .byte 0xe2 + .byte 0xc + .4byte 0x1a2 + .byte 0x58 + .byte 0x10 + .4byte .LASF4619 + .byte 0x8 + .byte 0xe4 + .byte 0xe + .4byte 0x196 + .byte 0x5c + .byte 0x10 + .4byte .LASF4620 + .byte 0x8 + .byte 0xe5 + .byte 0x7 + .4byte 0x37 + .byte 0x64 + .byte 0 + .byte 0x16 + .4byte 0x127 + .4byte 0x4f1 + .byte 0x17 + .4byte 0x4f1 + .byte 0x17 + .4byte 0xc5 + .byte 0x17 + .4byte 0xd3 + .byte 0x17 + .4byte 0x37 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x4fc + .byte 0x8 + .4byte 0x4f1 + .byte 0x18 + .4byte .LASF4621 + .2byte 0x428 + .byte 0x8 + .2byte 0x239 + .byte 0x8 + .4byte 0x645 + .byte 0x19 + .4byte .LASF4622 + .byte 0x8 + .2byte 0x23b + .byte 0x7 + .4byte 0x37 + .byte 0 + .byte 0x19 + .4byte .LASF4623 + .byte 0x8 + .2byte 0x240 + .byte 0xb + .4byte 0x719 + .byte 0x4 + .byte 0x19 + .4byte .LASF4624 + .byte 0x8 + .2byte 0x240 + .byte 0x14 + .4byte 0x719 + .byte 0x8 + .byte 0x19 + .4byte .LASF4625 + .byte 0x8 + .2byte 0x240 + .byte 0x1e + .4byte 0x719 + .byte 0xc + .byte 0x19 + .4byte .LASF4626 + .byte 0x8 + .2byte 0x242 + .byte 0x7 + .4byte 0x37 + .byte 0x10 + .byte 0x19 + .4byte .LASF4627 + .byte 0x8 + .2byte 0x243 + .byte 0x8 + .4byte 0x909 + .byte 0x14 + .byte 0x19 + .4byte .LASF4628 + .byte 0x8 + .2byte 0x246 + .byte 0x7 + .4byte 0x37 + .byte 0x30 + .byte 0x19 + .4byte .LASF4629 + .byte 0x8 + .2byte 0x247 + .byte 0x16 + .4byte 0x91e + .byte 0x34 + .byte 0x19 + .4byte .LASF4630 + .byte 0x8 + .2byte 0x249 + .byte 0x7 + .4byte 0x37 + .byte 0x38 + .byte 0x19 + .4byte .LASF4631 + .byte 0x8 + .2byte 0x24b + .byte 0xa + .4byte 0x92f + .byte 0x3c + .byte 0x19 + .4byte .LASF4632 + .byte 0x8 + .2byte 0x24e + .byte 0x13 + .4byte 0x214 + .byte 0x40 + .byte 0x19 + .4byte .LASF4633 + .byte 0x8 + .2byte 0x24f + .byte 0x7 + .4byte 0x37 + .byte 0x44 + .byte 0x19 + .4byte .LASF4634 + .byte 0x8 + .2byte 0x250 + .byte 0x13 + .4byte 0x214 + .byte 0x48 + .byte 0x19 + .4byte .LASF4635 + .byte 0x8 + .2byte 0x251 + .byte 0x14 + .4byte 0x935 + .byte 0x4c + .byte 0x19 + .4byte .LASF4636 + .byte 0x8 + .2byte 0x254 + .byte 0x7 + .4byte 0x37 + .byte 0x50 + .byte 0x19 + .4byte .LASF4637 + .byte 0x8 + .2byte 0x255 + .byte 0x9 + .4byte 0xd3 + .byte 0x54 + .byte 0x19 + .4byte .LASF4638 + .byte 0x8 + .2byte 0x278 + .byte 0x7 + .4byte 0x8e4 + .byte 0x58 + .byte 0x1a + .4byte .LASF4598 + .byte 0x8 + .2byte 0x27c + .byte 0x13 + .4byte 0x345 + .2byte 0x148 + .byte 0x1a + .4byte .LASF4639 + .byte 0x8 + .2byte 0x27d + .byte 0x12 + .4byte 0x302 + .2byte 0x14c + .byte 0x1a + .4byte .LASF4640 + .byte 0x8 + .2byte 0x281 + .byte 0xc + .4byte 0x946 + .2byte 0x2dc + .byte 0x1a + .4byte .LASF4641 + .byte 0x8 + .2byte 0x286 + .byte 0x10 + .4byte 0x6da + .2byte 0x2e0 + .byte 0x1a + .4byte .LASF4642 + .byte 0x8 + .2byte 0x288 + .byte 0xa + .4byte 0x952 + .2byte 0x2ec + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x4d3 + .byte 0x16 + .4byte 0x127 + .4byte 0x669 + .byte 0x17 + .4byte 0x4f1 + .byte 0x17 + .4byte 0xc5 + .byte 0x17 + .4byte 0xcd + .byte 0x17 + .4byte 0x37 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x64b + .byte 0x16 + .4byte 0x11b + .4byte 0x68d + .byte 0x17 + .4byte 0x4f1 + .byte 0x17 + .4byte 0xc5 + .byte 0x17 + .4byte 0x11b + .byte 0x17 + .4byte 0x37 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x66f + .byte 0x16 + .4byte 0x37 + .4byte 0x6a7 + .byte 0x17 + .4byte 0x4f1 + .byte 0x17 + .4byte 0xc5 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x693 + .byte 0x6 + .4byte 0x4a + .4byte 0x6bd + .byte 0x7 + .4byte 0x69 + .byte 0x2 + .byte 0 + .byte 0x6 + .4byte 0x4a + .4byte 0x6cd + .byte 0x7 + .4byte 0x69 + .byte 0 + .byte 0 + .byte 0xc + .4byte .LASF4643 + .byte 0x8 + .2byte 0x11f + .byte 0x18 + .4byte 0x390 + .byte 0x1b + .4byte .LASF4644 + .byte 0xc + .byte 0x8 + .2byte 0x123 + .byte 0x8 + .4byte 0x713 + .byte 0x19 + .4byte .LASF4578 + .byte 0x8 + .2byte 0x125 + .byte 0x11 + .4byte 0x713 + .byte 0 + .byte 0x19 + .4byte .LASF4645 + .byte 0x8 + .2byte 0x126 + .byte 0x7 + .4byte 0x37 + .byte 0x4 + .byte 0x19 + .4byte .LASF4646 + .byte 0x8 + .2byte 0x127 + .byte 0xb + .4byte 0x719 + .byte 0x8 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x6da + .byte 0xa + .byte 0x4 + .4byte 0x6cd + .byte 0x1b + .4byte .LASF4647 + .byte 0xe + .byte 0x8 + .2byte 0x13f + .byte 0x8 + .4byte 0x758 + .byte 0x19 + .4byte .LASF4648 + .byte 0x8 + .2byte 0x140 + .byte 0x12 + .4byte 0x758 + .byte 0 + .byte 0x19 + .4byte .LASF4649 + .byte 0x8 + .2byte 0x141 + .byte 0x12 + .4byte 0x758 + .byte 0x6 + .byte 0x19 + .4byte .LASF4650 + .byte 0x8 + .2byte 0x142 + .byte 0x12 + .4byte 0x51 + .byte 0xc + .byte 0 + .byte 0x6 + .4byte 0x51 + .4byte 0x768 + .byte 0x7 + .4byte 0x69 + .byte 0x2 + .byte 0 + .byte 0x1c + .byte 0xd0 + .byte 0x8 + .2byte 0x259 + .byte 0x7 + .4byte 0x87d + .byte 0x19 + .4byte .LASF4651 + .byte 0x8 + .2byte 0x25b + .byte 0x18 + .4byte 0x69 + .byte 0 + .byte 0x19 + .4byte .LASF4652 + .byte 0x8 + .2byte 0x25c + .byte 0x12 + .4byte 0xd3 + .byte 0x4 + .byte 0x19 + .4byte .LASF4653 + .byte 0x8 + .2byte 0x25d + .byte 0x10 + .4byte 0x87d + .byte 0x8 + .byte 0x19 + .4byte .LASF4654 + .byte 0x8 + .2byte 0x25e + .byte 0x17 + .4byte 0x22a + .byte 0x24 + .byte 0x19 + .4byte .LASF4655 + .byte 0x8 + .2byte 0x25f + .byte 0xf + .4byte 0x37 + .byte 0x48 + .byte 0x19 + .4byte .LASF4656 + .byte 0x8 + .2byte 0x260 + .byte 0x2c + .4byte 0x77 + .byte 0x50 + .byte 0x19 + .4byte .LASF4657 + .byte 0x8 + .2byte 0x261 + .byte 0x1a + .4byte 0x71f + .byte 0x58 + .byte 0x19 + .4byte .LASF4658 + .byte 0x8 + .2byte 0x262 + .byte 0x16 + .4byte 0x196 + .byte 0x68 + .byte 0x19 + .4byte .LASF4659 + .byte 0x8 + .2byte 0x263 + .byte 0x16 + .4byte 0x196 + .byte 0x70 + .byte 0x19 + .4byte .LASF4660 + .byte 0x8 + .2byte 0x264 + .byte 0x16 + .4byte 0x196 + .byte 0x78 + .byte 0x19 + .4byte .LASF4661 + .byte 0x8 + .2byte 0x265 + .byte 0x10 + .4byte 0xa9 + .byte 0x80 + .byte 0x19 + .4byte .LASF4662 + .byte 0x8 + .2byte 0x266 + .byte 0x10 + .4byte 0x88d + .byte 0x88 + .byte 0x19 + .4byte .LASF4663 + .byte 0x8 + .2byte 0x267 + .byte 0xf + .4byte 0x37 + .byte 0xa0 + .byte 0x19 + .4byte .LASF4664 + .byte 0x8 + .2byte 0x268 + .byte 0x16 + .4byte 0x196 + .byte 0xa4 + .byte 0x19 + .4byte .LASF4665 + .byte 0x8 + .2byte 0x269 + .byte 0x16 + .4byte 0x196 + .byte 0xac + .byte 0x19 + .4byte .LASF4666 + .byte 0x8 + .2byte 0x26a + .byte 0x16 + .4byte 0x196 + .byte 0xb4 + .byte 0x19 + .4byte .LASF4667 + .byte 0x8 + .2byte 0x26b + .byte 0x16 + .4byte 0x196 + .byte 0xbc + .byte 0x19 + .4byte .LASF4668 + .byte 0x8 + .2byte 0x26c + .byte 0x16 + .4byte 0x196 + .byte 0xc4 + .byte 0x19 + .4byte .LASF4669 + .byte 0x8 + .2byte 0x26d + .byte 0x8 + .4byte 0x37 + .byte 0xcc + .byte 0 + .byte 0x6 + .4byte 0xb9 + .4byte 0x88d + .byte 0x7 + .4byte 0x69 + .byte 0x19 + .byte 0 + .byte 0x6 + .4byte 0xb9 + .4byte 0x89d + .byte 0x7 + .4byte 0x69 + .byte 0x17 + .byte 0 + .byte 0x1c + .byte 0xf0 + .byte 0x8 + .2byte 0x272 + .byte 0x7 + .4byte 0x8c4 + .byte 0x19 + .4byte .LASF4670 + .byte 0x8 + .2byte 0x275 + .byte 0x1b + .4byte 0x8c4 + .byte 0 + .byte 0x19 + .4byte .LASF4671 + .byte 0x8 + .2byte 0x276 + .byte 0x18 + .4byte 0x8d4 + .byte 0x78 + .byte 0 + .byte 0x6 + .4byte 0x38a + .4byte 0x8d4 + .byte 0x7 + .4byte 0x69 + .byte 0x1d + .byte 0 + .byte 0x6 + .4byte 0x69 + .4byte 0x8e4 + .byte 0x7 + .4byte 0x69 + .byte 0x1d + .byte 0 + .byte 0x1d + .byte 0xf0 + .byte 0x8 + .2byte 0x257 + .byte 0x3 + .4byte 0x909 + .byte 0x1e + .4byte .LASF4621 + .byte 0x8 + .2byte 0x26e + .byte 0xb + .4byte 0x768 + .byte 0x1e + .4byte .LASF4672 + .byte 0x8 + .2byte 0x277 + .byte 0xb + .4byte 0x89d + .byte 0 + .byte 0x6 + .4byte 0xb9 + .4byte 0x919 + .byte 0x7 + .4byte 0x69 + .byte 0x18 + .byte 0 + .byte 0xb + .4byte .LASF4674 + .byte 0xa + .byte 0x4 + .4byte 0x919 + .byte 0x1f + .4byte 0x92f + .byte 0x17 + .4byte 0x4f1 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x924 + .byte 0xa + .byte 0x4 + .4byte 0x214 + .byte 0x1f + .4byte 0x946 + .byte 0x17 + .4byte 0x37 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0x94c + .byte 0xa + .byte 0x4 + .4byte 0x93b + .byte 0x6 + .4byte 0x6cd + .4byte 0x962 + .byte 0x7 + .4byte 0x69 + .byte 0x2 + .byte 0 + .byte 0x20 + .4byte .LASF4675 + .byte 0x8 + .2byte 0x307 + .byte 0x17 + .4byte 0x4f1 + .byte 0x20 + .4byte .LASF4676 + .byte 0x8 + .2byte 0x308 + .byte 0x1d + .4byte 0x4f7 + .byte 0x4 + .4byte .LASF4677 + .byte 0x9 + .byte 0x18 + .byte 0x13 + .4byte 0xd9 + .byte 0x5 + .4byte 0x97c + .byte 0x4 + .4byte .LASF4678 + .byte 0x9 + .byte 0x30 + .byte 0x14 + .4byte 0xe5 + .byte 0x8 + .4byte 0x98d + .byte 0x5 + .4byte 0x999 + .byte 0x5 + .4byte 0x98d + .byte 0x21 + .4byte .LASF4679 + .byte 0xa + .byte 0x9a + .byte 0xd + .4byte 0x7e + .byte 0x21 + .4byte .LASF4680 + .byte 0xa + .byte 0x9b + .byte 0xc + .4byte 0x37 + .byte 0x6 + .4byte 0xd3 + .4byte 0x9d0 + .byte 0x7 + .4byte 0x69 + .byte 0x1 + .byte 0 + .byte 0x21 + .4byte .LASF4681 + .byte 0xa + .byte 0x9e + .byte 0xe + .4byte 0x9c0 + .byte 0x1f + .4byte 0x9f1 + .byte 0x17 + .4byte 0xcd + .byte 0x17 + .4byte 0xcd + .byte 0x17 + .4byte 0x9d + .byte 0 + .byte 0x20 + .4byte .LASF4682 + .byte 0xb + .2byte 0x245 + .byte 0xf + .4byte 0x9fe + .byte 0xa + .byte 0x4 + .4byte 0x9dc + .byte 0x4 + .4byte .LASF4683 + .byte 0xc + .byte 0x12 + .byte 0x10 + .4byte 0xa10 + .byte 0xa + .byte 0x4 + .4byte 0xa16 + .byte 0x22 + .4byte 0x7e + .byte 0x11 + .4byte .LASF4684 + .byte 0x8 + .byte 0xc + .byte 0x15 + .byte 0x8 + .4byte 0xa43 + .byte 0x10 + .4byte .LASF4685 + .byte 0xc + .byte 0x17 + .byte 0x11 + .4byte 0xcd + .byte 0 + .byte 0x10 + .4byte .LASF4686 + .byte 0xc + .byte 0x1b + .byte 0x12 + .4byte 0xa04 + .byte 0x4 + .byte 0 + .byte 0x21 + .4byte .LASF4687 + .byte 0xc + .byte 0x1d + .byte 0x1e + .4byte 0xa4f + .byte 0xa + .byte 0x4 + .4byte 0xa1b + .byte 0x21 + .4byte .LASF4688 + .byte 0xc + .byte 0x1d + .byte 0x35 + .4byte 0xa4f + .byte 0x23 + .4byte .LASF4808 + .byte 0x7 + .byte 0x4 + .4byte 0x69 + .byte 0xd + .byte 0x1a + .byte 0xe + .4byte 0xb7c + .byte 0x24 + .4byte .LASF4689 + .byte 0x2 + .byte 0x24 + .4byte .LASF4690 + .byte 0x3 + .byte 0x24 + .4byte .LASF4691 + .byte 0xc + .byte 0x24 + .4byte .LASF4692 + .byte 0xe + .byte 0x24 + .4byte .LASF4693 + .byte 0x10 + .byte 0x24 + .4byte .LASF4694 + .byte 0x11 + .byte 0x24 + .4byte .LASF4695 + .byte 0x12 + .byte 0x24 + .4byte .LASF4696 + .byte 0x13 + .byte 0x24 + .4byte .LASF4697 + .byte 0x14 + .byte 0x24 + .4byte .LASF4698 + .byte 0x15 + .byte 0x24 + .4byte .LASF4699 + .byte 0x16 + .byte 0x24 + .4byte .LASF4700 + .byte 0x17 + .byte 0x24 + .4byte .LASF4701 + .byte 0x18 + .byte 0x24 + .4byte .LASF4702 + .byte 0x19 + .byte 0x24 + .4byte .LASF4703 + .byte 0x1a + .byte 0x24 + .4byte .LASF4704 + .byte 0x1b + .byte 0x24 + .4byte .LASF4705 + .byte 0x1c + .byte 0x24 + .4byte .LASF4706 + .byte 0x1d + .byte 0x24 + .4byte .LASF4707 + .byte 0x1e + .byte 0x24 + .4byte .LASF4708 + .byte 0x1f + .byte 0x24 + .4byte .LASF4709 + .byte 0x20 + .byte 0x24 + .4byte .LASF4710 + .byte 0x21 + .byte 0x24 + .4byte .LASF4711 + .byte 0x22 + .byte 0x24 + .4byte .LASF4712 + .byte 0x27 + .byte 0x24 + .4byte .LASF4713 + .byte 0x28 + .byte 0x24 + .4byte .LASF4714 + .byte 0x29 + .byte 0x24 + .4byte .LASF4715 + .byte 0x2a + .byte 0x24 + .4byte .LASF4716 + .byte 0x2b + .byte 0x24 + .4byte .LASF4717 + .byte 0x2c + .byte 0x24 + .4byte .LASF4718 + .byte 0x2d + .byte 0x24 + .4byte .LASF4719 + .byte 0x2e + .byte 0x24 + .4byte .LASF4720 + .byte 0x2f + .byte 0x24 + .4byte .LASF4721 + .byte 0x30 + .byte 0x24 + .4byte .LASF4722 + .byte 0x31 + .byte 0x24 + .4byte .LASF4723 + .byte 0x32 + .byte 0x24 + .4byte .LASF4724 + .byte 0x33 + .byte 0x24 + .4byte .LASF4725 + .byte 0x34 + .byte 0x24 + .4byte .LASF4726 + .byte 0x35 + .byte 0x24 + .4byte .LASF4727 + .byte 0x36 + .byte 0x24 + .4byte .LASF4728 + .byte 0x37 + .byte 0x24 + .4byte .LASF4729 + .byte 0x38 + .byte 0x24 + .4byte .LASF4730 + .byte 0x39 + .byte 0x24 + .4byte .LASF4731 + .byte 0x3a + .byte 0x24 + .4byte .LASF4732 + .byte 0x3b + .byte 0 + .byte 0x4 + .4byte .LASF4733 + .byte 0xd + .byte 0x4c + .byte 0x3 + .4byte 0xa61 + .byte 0x25 + .2byte 0xd14 + .byte 0x2 + .byte 0x3e + .byte 0x9 + .4byte 0xcbe + .byte 0x12 + .string "ISR" + .byte 0x2 + .byte 0x3f + .byte 0x1b + .4byte 0xcd3 + .byte 0 + .byte 0x12 + .string "IPR" + .byte 0x2 + .byte 0x40 + .byte 0x1b + .4byte 0xcd8 + .byte 0x20 + .byte 0x10 + .4byte .LASF4734 + .byte 0x2 + .byte 0x41 + .byte 0x15 + .4byte 0x9a3 + .byte 0x40 + .byte 0x10 + .4byte .LASF4735 + .byte 0x2 + .byte 0x42 + .byte 0x15 + .4byte 0x9a3 + .byte 0x44 + .byte 0x10 + .4byte .LASF4736 + .byte 0x2 + .byte 0x43 + .byte 0x15 + .4byte 0x9a3 + .byte 0x48 + .byte 0x10 + .4byte .LASF4737 + .byte 0x2 + .byte 0x44 + .byte 0x1b + .4byte 0x99e + .byte 0x4c + .byte 0x10 + .4byte .LASF4738 + .byte 0x2 + .byte 0x45 + .byte 0xb + .4byte 0xcdd + .byte 0x50 + .byte 0x10 + .4byte .LASF4739 + .byte 0x2 + .byte 0x46 + .byte 0x15 + .4byte 0xcfd + .byte 0x60 + .byte 0x10 + .4byte .LASF4740 + .byte 0x2 + .byte 0x47 + .byte 0xb + .4byte 0xd02 + .byte 0x70 + .byte 0x14 + .4byte .LASF4741 + .byte 0x2 + .byte 0x48 + .byte 0x15 + .4byte 0xd22 + .2byte 0x100 + .byte 0x14 + .4byte .LASF4742 + .byte 0x2 + .byte 0x49 + .byte 0xb + .4byte 0xd27 + .2byte 0x120 + .byte 0x14 + .4byte .LASF4743 + .byte 0x2 + .byte 0x4a + .byte 0x15 + .4byte 0xd22 + .2byte 0x180 + .byte 0x14 + .4byte .LASF4744 + .byte 0x2 + .byte 0x4b + .byte 0xb + .4byte 0xd27 + .2byte 0x1a0 + .byte 0x14 + .4byte .LASF4745 + .byte 0x2 + .byte 0x4c + .byte 0x15 + .4byte 0xd22 + .2byte 0x200 + .byte 0x14 + .4byte .LASF4746 + .byte 0x2 + .byte 0x4d + .byte 0xb + .4byte 0xd27 + .2byte 0x220 + .byte 0x14 + .4byte .LASF4747 + .byte 0x2 + .byte 0x4e + .byte 0x15 + .4byte 0xd22 + .2byte 0x280 + .byte 0x14 + .4byte .LASF4748 + .byte 0x2 + .byte 0x4f + .byte 0xb + .4byte 0xd27 + .2byte 0x2a0 + .byte 0x14 + .4byte .LASF4749 + .byte 0x2 + .byte 0x50 + .byte 0x15 + .4byte 0xd22 + .2byte 0x300 + .byte 0x14 + .4byte .LASF4750 + .byte 0x2 + .byte 0x51 + .byte 0xb + .4byte 0xd37 + .2byte 0x320 + .byte 0x14 + .4byte .LASF4751 + .byte 0x2 + .byte 0x52 + .byte 0x14 + .4byte 0xd57 + .2byte 0x400 + .byte 0x14 + .4byte .LASF4752 + .byte 0x2 + .byte 0x53 + .byte 0xb + .4byte 0xd5c + .2byte 0x500 + .byte 0x14 + .4byte .LASF4753 + .byte 0x2 + .byte 0x54 + .byte 0x15 + .4byte 0x9a3 + .2byte 0xd10 + .byte 0 + .byte 0x6 + .4byte 0x99e + .4byte 0xcce + .byte 0x7 + .4byte 0x69 + .byte 0x7 + .byte 0 + .byte 0x8 + .4byte 0xcbe + .byte 0x5 + .4byte 0xcce + .byte 0x5 + .4byte 0xcce + .byte 0x6 + .4byte 0x97c + .4byte 0xced + .byte 0x7 + .4byte 0x69 + .byte 0xf + .byte 0 + .byte 0x6 + .4byte 0x9a3 + .4byte 0xcfd + .byte 0x7 + .4byte 0x69 + .byte 0x3 + .byte 0 + .byte 0x5 + .4byte 0xced + .byte 0x6 + .4byte 0x97c + .4byte 0xd12 + .byte 0x7 + .4byte 0x69 + .byte 0x8f + .byte 0 + .byte 0x6 + .4byte 0x9a3 + .4byte 0xd22 + .byte 0x7 + .4byte 0x69 + .byte 0x7 + .byte 0 + .byte 0x5 + .4byte 0xd12 + .byte 0x6 + .4byte 0x97c + .4byte 0xd37 + .byte 0x7 + .4byte 0x69 + .byte 0x5f + .byte 0 + .byte 0x6 + .4byte 0x97c + .4byte 0xd47 + .byte 0x7 + .4byte 0x69 + .byte 0xdf + .byte 0 + .byte 0x6 + .4byte 0x988 + .4byte 0xd57 + .byte 0x7 + .4byte 0x69 + .byte 0xff + .byte 0 + .byte 0x5 + .4byte 0xd47 + .byte 0x6 + .4byte 0x97c + .4byte 0xd6d + .byte 0x26 + .4byte 0x69 + .2byte 0x80f + .byte 0 + .byte 0x4 + .4byte .LASF4754 + .byte 0x2 + .byte 0x55 + .byte 0x2 + .4byte 0xb88 + .byte 0x21 + .4byte .LASF4755 + .byte 0xe + .byte 0xf + .byte 0x11 + .4byte 0x98d + .byte 0x4 + .4byte .LASF4756 + .byte 0xf + .byte 0x2d + .byte 0x17 + .4byte 0x4a + .byte 0x8 + .4byte 0xd85 + .byte 0x4 + .4byte .LASF4757 + .byte 0xf + .byte 0x30 + .byte 0x18 + .4byte 0x51 + .byte 0x4 + .4byte .LASF4758 + .byte 0xf + .byte 0x52 + .byte 0x18 + .4byte 0x38a + .byte 0x20 + .4byte .LASF4759 + .byte 0xf + .2byte 0x284 + .byte 0xf + .4byte 0xda2 + .byte 0x20 + .4byte .LASF4760 + .byte 0xf + .2byte 0x285 + .byte 0xf + .4byte 0xda2 + .byte 0x20 + .4byte .LASF4761 + .byte 0xf + .2byte 0x286 + .byte 0xf + .4byte 0xda2 + .byte 0x20 + .4byte .LASF4762 + .byte 0xf + .2byte 0x287 + .byte 0xf + .4byte 0xda2 + .byte 0x20 + .4byte .LASF4763 + .byte 0xf + .2byte 0x288 + .byte 0xf + .4byte 0xda2 + .byte 0x20 + .4byte .LASF4764 + .byte 0xf + .2byte 0x289 + .byte 0xf + .4byte 0xda2 + .byte 0x20 + .4byte .LASF4765 + .byte 0xf + .2byte 0x28a + .byte 0xf + .4byte 0xda2 + .byte 0x20 + .4byte .LASF4766 + .byte 0xf + .2byte 0x28b + .byte 0xf + .4byte 0xda2 + .byte 0xf + .byte 0xe + .byte 0x10 + .byte 0x28 + .byte 0x9 + .4byte 0xe88 + .byte 0x10 + .4byte .LASF4767 + .byte 0x10 + .byte 0x2a + .byte 0xb + .4byte 0xd85 + .byte 0 + .byte 0x10 + .4byte .LASF4768 + .byte 0x10 + .byte 0x2b + .byte 0xb + .4byte 0xd85 + .byte 0x1 + .byte 0x10 + .4byte .LASF4769 + .byte 0x10 + .byte 0x2c + .byte 0xb + .4byte 0xd85 + .byte 0x2 + .byte 0x10 + .4byte .LASF4770 + .byte 0x10 + .byte 0x2d + .byte 0xb + .4byte 0xd85 + .byte 0x3 + .byte 0x10 + .4byte .LASF4771 + .byte 0x10 + .byte 0x2e + .byte 0xa + .4byte 0xd96 + .byte 0x4 + .byte 0x10 + .4byte .LASF4772 + .byte 0x10 + .byte 0x2f + .byte 0xa + .4byte 0xd96 + .byte 0x6 + .byte 0x10 + .4byte .LASF4773 + .byte 0x10 + .byte 0x30 + .byte 0xb + .4byte 0xe88 + .byte 0x8 + .byte 0x10 + .4byte .LASF4774 + .byte 0x10 + .byte 0x31 + .byte 0xb + .4byte 0xd85 + .byte 0xc + .byte 0 + .byte 0x6 + .4byte 0xd85 + .4byte 0xe98 + .byte 0x7 + .4byte 0x69 + .byte 0x3 + .byte 0 + .byte 0x4 + .4byte .LASF4775 + .byte 0x10 + .byte 0x32 + .byte 0x3 + .4byte 0xe16 + .byte 0x21 + .4byte .LASF4776 + .byte 0x10 + .byte 0x35 + .byte 0x14 + .4byte 0xe98 + .byte 0x21 + .4byte .LASF4777 + .byte 0x10 + .byte 0x36 + .byte 0xe + .4byte 0xd85 + .byte 0x21 + .4byte .LASF4778 + .byte 0x10 + .byte 0x37 + .byte 0xe + .4byte 0xd85 + .byte 0x21 + .4byte .LASF4779 + .byte 0x10 + .byte 0x39 + .byte 0xf + .4byte 0xda2 + .byte 0x21 + .4byte .LASF4780 + .byte 0x10 + .byte 0x3a + .byte 0xf + .4byte 0xda2 + .byte 0x6 + .4byte 0xd91 + .4byte 0xeeb + .byte 0x27 + .byte 0 + .byte 0x8 + .4byte 0xee0 + .byte 0x21 + .4byte .LASF4781 + .byte 0x10 + .byte 0x3d + .byte 0x14 + .4byte 0xeeb + .byte 0x21 + .4byte .LASF4782 + .byte 0x10 + .byte 0x3e + .byte 0x14 + .4byte 0xeeb + .byte 0x21 + .4byte .LASF4783 + .byte 0x10 + .byte 0x3f + .byte 0x14 + .4byte 0xeeb + .byte 0x21 + .4byte .LASF4784 + .byte 0x10 + .byte 0x40 + .byte 0x14 + .4byte 0xeeb + .byte 0x21 + .4byte .LASF4785 + .byte 0x10 + .byte 0x41 + .byte 0x14 + .4byte 0xeeb + .byte 0x21 + .4byte .LASF4786 + .byte 0x10 + .byte 0x42 + .byte 0x14 + .4byte 0xeeb + .byte 0x28 + .4byte .LASF4787 + .byte 0x1 + .byte 0x11 + .byte 0x15 + .4byte 0x91 + .byte 0x5 + .byte 0x3 + .4byte rt_interrupt_from_thread + .byte 0x28 + .4byte .LASF4788 + .byte 0x1 + .byte 0x12 + .byte 0x15 + .4byte 0x91 + .byte 0x5 + .byte 0x3 + .4byte rt_interrupt_to_thread + .byte 0x28 + .4byte .LASF4789 + .byte 0x1 + .byte 0x13 + .byte 0x16 + .4byte 0x64 + .byte 0x5 + .byte 0x3 + .4byte rt_thread_switch_interrupt_flag + .byte 0x11 + .4byte .LASF4790 + .byte 0x80 + .byte 0x1 + .byte 0x16 + .byte 0x8 + .4byte 0x1101 + .byte 0x12 + .string "epc" + .byte 0x1 + .byte 0x18 + .byte 0x10 + .4byte 0x85 + .byte 0 + .byte 0x12 + .string "ra" + .byte 0x1 + .byte 0x19 + .byte 0x10 + .4byte 0x85 + .byte 0x4 + .byte 0x10 + .4byte .LASF4791 + .byte 0x1 + .byte 0x1a + .byte 0x10 + .4byte 0x85 + .byte 0x8 + .byte 0x12 + .string "gp" + .byte 0x1 + .byte 0x1b + .byte 0x10 + .4byte 0x85 + .byte 0xc + .byte 0x12 + .string "tp" + .byte 0x1 + .byte 0x1c + .byte 0x10 + .4byte 0x85 + .byte 0x10 + .byte 0x12 + .string "t0" + .byte 0x1 + .byte 0x1d + .byte 0x10 + .4byte 0x85 + .byte 0x14 + .byte 0x12 + .string "t1" + .byte 0x1 + .byte 0x1e + .byte 0x10 + .4byte 0x85 + .byte 0x18 + .byte 0x12 + .string "t2" + .byte 0x1 + .byte 0x1f + .byte 0x10 + .4byte 0x85 + .byte 0x1c + .byte 0x10 + .4byte .LASF4792 + .byte 0x1 + .byte 0x20 + .byte 0x10 + .4byte 0x85 + .byte 0x20 + .byte 0x12 + .string "s1" + .byte 0x1 + .byte 0x21 + .byte 0x10 + .4byte 0x85 + .byte 0x24 + .byte 0x12 + .string "a0" + .byte 0x1 + .byte 0x22 + .byte 0x10 + .4byte 0x85 + .byte 0x28 + .byte 0x12 + .string "a1" + .byte 0x1 + .byte 0x23 + .byte 0x10 + .4byte 0x85 + .byte 0x2c + .byte 0x12 + .string "a2" + .byte 0x1 + .byte 0x24 + .byte 0x10 + .4byte 0x85 + .byte 0x30 + .byte 0x12 + .string "a3" + .byte 0x1 + .byte 0x25 + .byte 0x10 + .4byte 0x85 + .byte 0x34 + .byte 0x12 + .string "a4" + .byte 0x1 + .byte 0x26 + .byte 0x10 + .4byte 0x85 + .byte 0x38 + .byte 0x12 + .string "a5" + .byte 0x1 + .byte 0x27 + .byte 0x10 + .4byte 0x85 + .byte 0x3c + .byte 0x12 + .string "a6" + .byte 0x1 + .byte 0x28 + .byte 0x10 + .4byte 0x85 + .byte 0x40 + .byte 0x12 + .string "a7" + .byte 0x1 + .byte 0x29 + .byte 0x10 + .4byte 0x85 + .byte 0x44 + .byte 0x12 + .string "s2" + .byte 0x1 + .byte 0x2a + .byte 0x10 + .4byte 0x85 + .byte 0x48 + .byte 0x12 + .string "s3" + .byte 0x1 + .byte 0x2b + .byte 0x10 + .4byte 0x85 + .byte 0x4c + .byte 0x12 + .string "s4" + .byte 0x1 + .byte 0x2c + .byte 0x10 + .4byte 0x85 + .byte 0x50 + .byte 0x12 + .string "s5" + .byte 0x1 + .byte 0x2d + .byte 0x10 + .4byte 0x85 + .byte 0x54 + .byte 0x12 + .string "s6" + .byte 0x1 + .byte 0x2e + .byte 0x10 + .4byte 0x85 + .byte 0x58 + .byte 0x12 + .string "s7" + .byte 0x1 + .byte 0x2f + .byte 0x10 + .4byte 0x85 + .byte 0x5c + .byte 0x12 + .string "s8" + .byte 0x1 + .byte 0x30 + .byte 0x10 + .4byte 0x85 + .byte 0x60 + .byte 0x12 + .string "s9" + .byte 0x1 + .byte 0x31 + .byte 0x10 + .4byte 0x85 + .byte 0x64 + .byte 0x12 + .string "s10" + .byte 0x1 + .byte 0x32 + .byte 0x10 + .4byte 0x85 + .byte 0x68 + .byte 0x12 + .string "s11" + .byte 0x1 + .byte 0x33 + .byte 0x10 + .4byte 0x85 + .byte 0x6c + .byte 0x12 + .string "t3" + .byte 0x1 + .byte 0x34 + .byte 0x10 + .4byte 0x85 + .byte 0x70 + .byte 0x12 + .string "t4" + .byte 0x1 + .byte 0x35 + .byte 0x10 + .4byte 0x85 + .byte 0x74 + .byte 0x12 + .string "t5" + .byte 0x1 + .byte 0x36 + .byte 0x10 + .4byte 0x85 + .byte 0x78 + .byte 0x12 + .string "t6" + .byte 0x1 + .byte 0x37 + .byte 0x10 + .4byte 0x85 + .byte 0x7c + .byte 0 + .byte 0x29 + .4byte .LASF4793 + .byte 0x1 + .byte 0x9c + .byte 0x6 + .4byte .LFB31 + .4byte .LFE31-.LFB31 + .byte 0x1 + .byte 0x9c + .4byte 0x1179 + .byte 0x2a + .4byte .LASF4800 + .byte 0x1 + .byte 0x9e + .byte 0x11 + .4byte 0x58 + .4byte .LLST5 + .byte 0x2b + .4byte .LASF4809 + .4byte 0x1189 + .byte 0x5 + .byte 0x3 + .4byte __FUNCTION__.4865 + .byte 0x2c + .4byte .LVL9 + .4byte 0x127d + .4byte 0x114d + .byte 0x2d + .byte 0x1 + .byte 0x5a + .byte 0x5 + .byte 0x3 + .4byte .LC0 + .byte 0 + .byte 0x2e + .4byte .LVL10 + .4byte 0x128a + .byte 0x2f + .4byte .LVL12 + .4byte 0x1296 + .byte 0x2d + .byte 0x1 + .byte 0x5a + .byte 0x5 + .byte 0x3 + .4byte .LC1 + .byte 0x2d + .byte 0x1 + .byte 0x5b + .byte 0x5 + .byte 0x3 + .4byte .LANCHOR3 + .byte 0x2d + .byte 0x1 + .byte 0x5c + .byte 0x2 + .byte 0x8 + .byte 0xa4 + .byte 0 + .byte 0 + .byte 0x6 + .4byte 0xc0 + .4byte 0x1189 + .byte 0x7 + .4byte 0x69 + .byte 0x12 + .byte 0 + .byte 0x8 + .4byte 0x1179 + .byte 0x29 + .4byte .LASF4794 + .byte 0x1 + .byte 0x8e + .byte 0x6 + .4byte .LFB30 + .4byte .LFE30-.LFB30 + .byte 0x1 + .byte 0x9c + .4byte 0x11da + .byte 0x30 + .4byte .LASF4795 + .byte 0x1 + .byte 0x8e + .byte 0x30 + .4byte 0x85 + .byte 0x1 + .byte 0x5a + .byte 0x31 + .string "to" + .byte 0x1 + .byte 0x8e + .byte 0x41 + .4byte 0x85 + .byte 0x1 + .byte 0x5b + .byte 0x32 + .4byte 0x1263 + .4byte .LBB4 + .4byte .LBE4-.LBB4 + .byte 0x1 + .byte 0x95 + .byte 0x5 + .byte 0x33 + .4byte 0x1270 + .4byte .LLST4 + .byte 0 + .byte 0 + .byte 0x34 + .4byte .LASF4810 + .byte 0x1 + .byte 0x68 + .byte 0xd + .4byte 0xc7 + .4byte .LFB29 + .4byte .LFE29-.LFB29 + .byte 0x1 + .byte 0x9c + .4byte 0x125d + .byte 0x35 + .4byte .LASF4796 + .byte 0x1 + .byte 0x68 + .byte 0x24 + .4byte 0xc5 + .4byte .LLST0 + .byte 0x30 + .4byte .LASF4797 + .byte 0x1 + .byte 0x69 + .byte 0x24 + .4byte 0xc5 + .byte 0x1 + .byte 0x5b + .byte 0x35 + .4byte .LASF4798 + .byte 0x1 + .byte 0x6a + .byte 0x2a + .4byte 0xc7 + .4byte .LLST1 + .byte 0x30 + .4byte .LASF4799 + .byte 0x1 + .byte 0x6b + .byte 0x24 + .4byte 0xc5 + .byte 0x1 + .byte 0x5d + .byte 0x36 + .4byte .LASF4801 + .byte 0x1 + .byte 0x6d + .byte 0x1f + .4byte 0x125d + .byte 0x1 + .byte 0x5a + .byte 0x37 + .string "stk" + .byte 0x1 + .byte 0x6e + .byte 0x11 + .4byte 0xc7 + .4byte .LLST2 + .byte 0x37 + .string "i" + .byte 0x1 + .byte 0x6f + .byte 0x9 + .4byte 0x37 + .4byte .LLST3 + .byte 0 + .byte 0xa + .byte 0x4 + .4byte 0xf6e + .byte 0x38 + .4byte .LASF4811 + .byte 0x2 + .byte 0xab + .byte 0x14 + .byte 0x3 + .4byte 0x127d + .byte 0x39 + .4byte .LASF4808 + .byte 0x2 + .byte 0xab + .byte 0x31 + .4byte 0xb7c + .byte 0 + .byte 0x3a + .4byte .LASF4802 + .4byte .LASF4802 + .byte 0xb + .2byte 0x209 + .byte 0x6 + .byte 0x3b + .4byte .LASF4803 + .4byte .LASF4803 + .byte 0x11 + .byte 0x69 + .byte 0xb + .byte 0x3a + .4byte .LASF4804 + .4byte .LASF4804 + .byte 0xb + .2byte 0x248 + .byte 0x6 + .byte 0 + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .byte 0x1 + .byte 0x11 + .byte 0x1 + .byte 0x25 + .byte 0xe + .byte 0x13 + .byte 0xb + .byte 0x3 + .byte 0xe + .byte 0x1b + .byte 0xe + .byte 0x55 + .byte 0x17 + .byte 0x11 + .byte 0x1 + .byte 0x10 + .byte 0x17 + .byte 0x99,0x42 + .byte 0x17 + .byte 0 + .byte 0 + .byte 0x2 + .byte 0x24 + .byte 0 + .byte 0xb + .byte 0xb + .byte 0x3e + .byte 0xb + .byte 0x3 + .byte 0xe + .byte 0 + .byte 0 + .byte 0x3 + .byte 0x24 + .byte 0 + .byte 0xb + .byte 0xb + .byte 0x3e + .byte 0xb + .byte 0x3 + .byte 0x8 + .byte 0 + .byte 0 + .byte 0x4 + .byte 0x16 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x5 + .byte 0x35 + .byte 0 + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x6 + .byte 0x1 + .byte 0x1 + .byte 0x49 + .byte 0x13 + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x7 + .byte 0x21 + .byte 0 + .byte 0x49 + .byte 0x13 + .byte 0x2f + .byte 0xb + .byte 0 + .byte 0 + .byte 0x8 + .byte 0x26 + .byte 0 + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x9 + .byte 0xf + .byte 0 + .byte 0xb + .byte 0xb + .byte 0 + .byte 0 + .byte 0xa + .byte 0xf + .byte 0 + .byte 0xb + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0xb + .byte 0x13 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3c + .byte 0x19 + .byte 0 + .byte 0 + .byte 0xc + .byte 0x16 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0xd + .byte 0x17 + .byte 0x1 + .byte 0xb + .byte 0xb + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0xe + .byte 0xd + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0xf + .byte 0x13 + .byte 0x1 + .byte 0xb + .byte 0xb + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x10 + .byte 0xd + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x38 + .byte 0xb + .byte 0 + .byte 0 + .byte 0x11 + .byte 0x13 + .byte 0x1 + .byte 0x3 + .byte 0xe + .byte 0xb + .byte 0xb + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x12 + .byte 0xd + .byte 0 + .byte 0x3 + .byte 0x8 + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x38 + .byte 0xb + .byte 0 + .byte 0 + .byte 0x13 + .byte 0x13 + .byte 0x1 + .byte 0x3 + .byte 0xe + .byte 0xb + .byte 0x5 + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x14 + .byte 0xd + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x38 + .byte 0x5 + .byte 0 + .byte 0 + .byte 0x15 + .byte 0x15 + .byte 0 + .byte 0x27 + .byte 0x19 + .byte 0 + .byte 0 + .byte 0x16 + .byte 0x15 + .byte 0x1 + .byte 0x27 + .byte 0x19 + .byte 0x49 + .byte 0x13 + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x17 + .byte 0x5 + .byte 0 + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x18 + .byte 0x13 + .byte 0x1 + .byte 0x3 + .byte 0xe + .byte 0xb + .byte 0x5 + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x19 + .byte 0xd + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x38 + .byte 0xb + .byte 0 + .byte 0 + .byte 0x1a + .byte 0xd + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x38 + .byte 0x5 + .byte 0 + .byte 0 + .byte 0x1b + .byte 0x13 + .byte 0x1 + .byte 0x3 + .byte 0xe + .byte 0xb + .byte 0xb + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x1c + .byte 0x13 + .byte 0x1 + .byte 0xb + .byte 0xb + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x1d + .byte 0x17 + .byte 0x1 + .byte 0xb + .byte 0xb + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x1e + .byte 0xd + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x1f + .byte 0x15 + .byte 0x1 + .byte 0x27 + .byte 0x19 + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x20 + .byte 0x34 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x3f + .byte 0x19 + .byte 0x3c + .byte 0x19 + .byte 0 + .byte 0 + .byte 0x21 + .byte 0x34 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x3f + .byte 0x19 + .byte 0x3c + .byte 0x19 + .byte 0 + .byte 0 + .byte 0x22 + .byte 0x15 + .byte 0 + .byte 0x27 + .byte 0x19 + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x23 + .byte 0x4 + .byte 0x1 + .byte 0x3 + .byte 0xe + .byte 0x3e + .byte 0xb + .byte 0xb + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x24 + .byte 0x28 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x1c + .byte 0xb + .byte 0 + .byte 0 + .byte 0x25 + .byte 0x13 + .byte 0x1 + .byte 0xb + .byte 0x5 + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x26 + .byte 0x21 + .byte 0 + .byte 0x49 + .byte 0x13 + .byte 0x2f + .byte 0x5 + .byte 0 + .byte 0 + .byte 0x27 + .byte 0x21 + .byte 0 + .byte 0 + .byte 0 + .byte 0x28 + .byte 0x34 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x3f + .byte 0x19 + .byte 0x2 + .byte 0x18 + .byte 0 + .byte 0 + .byte 0x29 + .byte 0x2e + .byte 0x1 + .byte 0x3f + .byte 0x19 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x27 + .byte 0x19 + .byte 0x11 + .byte 0x1 + .byte 0x12 + .byte 0x6 + .byte 0x40 + .byte 0x18 + .byte 0x97,0x42 + .byte 0x19 + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x2a + .byte 0x34 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x2 + .byte 0x17 + .byte 0 + .byte 0 + .byte 0x2b + .byte 0x34 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x49 + .byte 0x13 + .byte 0x34 + .byte 0x19 + .byte 0x2 + .byte 0x18 + .byte 0 + .byte 0 + .byte 0x2c + .byte 0x89,0x82,0x1 + .byte 0x1 + .byte 0x11 + .byte 0x1 + .byte 0x31 + .byte 0x13 + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x2d + .byte 0x8a,0x82,0x1 + .byte 0 + .byte 0x2 + .byte 0x18 + .byte 0x91,0x42 + .byte 0x18 + .byte 0 + .byte 0 + .byte 0x2e + .byte 0x89,0x82,0x1 + .byte 0 + .byte 0x11 + .byte 0x1 + .byte 0x31 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x2f + .byte 0x89,0x82,0x1 + .byte 0x1 + .byte 0x11 + .byte 0x1 + .byte 0x31 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x30 + .byte 0x5 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x2 + .byte 0x18 + .byte 0 + .byte 0 + .byte 0x31 + .byte 0x5 + .byte 0 + .byte 0x3 + .byte 0x8 + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x2 + .byte 0x18 + .byte 0 + .byte 0 + .byte 0x32 + .byte 0x1d + .byte 0x1 + .byte 0x31 + .byte 0x13 + .byte 0x11 + .byte 0x1 + .byte 0x12 + .byte 0x6 + .byte 0x58 + .byte 0xb + .byte 0x59 + .byte 0xb + .byte 0x57 + .byte 0xb + .byte 0 + .byte 0 + .byte 0x33 + .byte 0x5 + .byte 0 + .byte 0x31 + .byte 0x13 + .byte 0x2 + .byte 0x17 + .byte 0 + .byte 0 + .byte 0x34 + .byte 0x2e + .byte 0x1 + .byte 0x3f + .byte 0x19 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x27 + .byte 0x19 + .byte 0x49 + .byte 0x13 + .byte 0x11 + .byte 0x1 + .byte 0x12 + .byte 0x6 + .byte 0x40 + .byte 0x18 + .byte 0x97,0x42 + .byte 0x19 + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x35 + .byte 0x5 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x2 + .byte 0x17 + .byte 0 + .byte 0 + .byte 0x36 + .byte 0x34 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x2 + .byte 0x18 + .byte 0 + .byte 0 + .byte 0x37 + .byte 0x34 + .byte 0 + .byte 0x3 + .byte 0x8 + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0x2 + .byte 0x17 + .byte 0 + .byte 0 + .byte 0x38 + .byte 0x2e + .byte 0x1 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x27 + .byte 0x19 + .byte 0x20 + .byte 0xb + .byte 0x1 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x39 + .byte 0x5 + .byte 0 + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0x49 + .byte 0x13 + .byte 0 + .byte 0 + .byte 0x3a + .byte 0x2e + .byte 0 + .byte 0x3f + .byte 0x19 + .byte 0x3c + .byte 0x19 + .byte 0x6e + .byte 0xe + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0x5 + .byte 0x39 + .byte 0xb + .byte 0 + .byte 0 + .byte 0x3b + .byte 0x2e + .byte 0 + .byte 0x3f + .byte 0x19 + .byte 0x3c + .byte 0x19 + .byte 0x6e + .byte 0xe + .byte 0x3 + .byte 0xe + .byte 0x3a + .byte 0xb + .byte 0x3b + .byte 0xb + .byte 0x39 + .byte 0xb + .byte 0 + .byte 0 + .byte 0 + .section .debug_loc,"",@progbits +.Ldebug_loc0: +.LLST5: + .4byte .LVL10 + .4byte .LVL11 + .2byte 0x1 + .byte 0x5a + .4byte .LVL13 + .4byte .LFE31 + .2byte 0x1 + .byte 0x5a + .4byte 0 + .4byte 0 +.LLST4: + .4byte .LVL7 + .4byte .LVL8 + .2byte 0x2 + .byte 0x3e + .byte 0x9f + .4byte 0 + .4byte 0 +.LLST0: + .4byte .LVL0 + .4byte .LVL4 + .2byte 0x1 + .byte 0x5a + .4byte .LVL4 + .4byte .LFE29 + .2byte 0x1 + .byte 0x60 + .4byte 0 + .4byte 0 +.LLST1: + .4byte .LVL0 + .4byte .LVL2 + .2byte 0x1 + .byte 0x5c + .4byte .LVL2 + .4byte .LVL3 + .2byte 0x3 + .byte 0x7c + .byte 0x7c + .byte 0x9f + .4byte .LVL3 + .4byte .LFE29 + .2byte 0x4 + .byte 0xf3 + .byte 0x1 + .byte 0x5c + .byte 0x9f + .4byte 0 + .4byte 0 +.LLST2: + .4byte .LVL1 + .4byte .LVL2 + .2byte 0x3 + .byte 0x7c + .byte 0x4 + .byte 0x9f + .4byte .LVL2 + .4byte .LVL4 + .2byte 0x1 + .byte 0x5c + .4byte .LVL4 + .4byte .LFE29 + .2byte 0x1 + .byte 0x5a + .4byte 0 + .4byte 0 +.LLST3: + .4byte .LVL4 + .4byte .LVL5 + .2byte 0x2 + .byte 0x30 + .byte 0x9f + .4byte 0 + .4byte 0 + .section .debug_aranges,"",@progbits + .4byte 0x2c + .2byte 0x2 + .4byte .Ldebug_info0 + .byte 0x4 + .byte 0 + .2byte 0 + .2byte 0 + .4byte .LFB29 + .4byte .LFE29-.LFB29 + .4byte .LFB30 + .4byte .LFE30-.LFB30 + .4byte .LFB31 + .4byte .LFE31-.LFB31 + .4byte 0 + .4byte 0 + .section .debug_ranges,"",@progbits +.Ldebug_ranges0: + .4byte .LFB29 + .4byte .LFE29 + .4byte .LFB30 + .4byte .LFE30 + .4byte .LFB31 + .4byte .LFE31 + .4byte 0 + .4byte 0 + .section .debug_macro,"",@progbits +.Ldebug_macro0: + .2byte 0x4 + .byte 0x2 + .4byte .Ldebug_line0 + .byte 0x3 + .byte 0 + .byte 0x1 + .byte 0x5 + .byte 0x1 + .4byte .LASF0 + .byte 0x5 + .byte 0x2 + .4byte .LASF1 + .byte 0x5 + .byte 0x3 + .4byte .LASF2 + .byte 0x5 + .byte 0x4 + .4byte .LASF3 + .byte 0x5 + .byte 0x5 + .4byte .LASF4 + .byte 0x5 + .byte 0x6 + .4byte .LASF5 + .byte 0x5 + .byte 0x7 + .4byte .LASF6 + .byte 0x5 + .byte 0x8 + .4byte .LASF7 + .byte 0x5 + .byte 0x9 + .4byte .LASF8 + .byte 0x5 + .byte 0xa + .4byte .LASF9 + .byte 0x5 + .byte 0xb + .4byte .LASF10 + .byte 0x5 + .byte 0xc + .4byte .LASF11 + .byte 0x5 + .byte 0xd + .4byte .LASF12 + .byte 0x5 + .byte 0xe + .4byte .LASF13 + .byte 0x5 + .byte 0xf + .4byte .LASF14 + .byte 0x5 + .byte 0x10 + .4byte .LASF15 + .byte 0x5 + .byte 0x11 + .4byte .LASF16 + .byte 0x5 + .byte 0x12 + .4byte .LASF17 + .byte 0x5 + .byte 0x13 + .4byte .LASF18 + .byte 0x5 + .byte 0x14 + .4byte .LASF19 + .byte 0x5 + .byte 0x15 + .4byte .LASF20 + .byte 0x5 + .byte 0x16 + .4byte .LASF21 + .byte 0x5 + .byte 0x17 + .4byte .LASF22 + .byte 0x5 + .byte 0x18 + .4byte .LASF23 + .byte 0x5 + .byte 0x19 + .4byte .LASF24 + .byte 0x5 + .byte 0x1a + .4byte .LASF25 + .byte 0x5 + .byte 0x1b + .4byte .LASF26 + .byte 0x5 + .byte 0x1c + .4byte .LASF27 + .byte 0x5 + .byte 0x1d + .4byte .LASF28 + .byte 0x5 + .byte 0x1e + .4byte .LASF29 + .byte 0x5 + .byte 0x1f + .4byte .LASF30 + .byte 0x5 + .byte 0x20 + .4byte .LASF31 + .byte 0x5 + .byte 0x21 + .4byte .LASF32 + .byte 0x5 + .byte 0x22 + .4byte .LASF33 + .byte 0x5 + .byte 0x23 + .4byte .LASF34 + .byte 0x5 + .byte 0x24 + .4byte .LASF35 + .byte 0x5 + .byte 0x25 + .4byte .LASF36 + .byte 0x5 + .byte 0x26 + .4byte .LASF37 + .byte 0x5 + .byte 0x27 + .4byte .LASF38 + .byte 0x5 + .byte 0x28 + .4byte .LASF39 + .byte 0x5 + .byte 0x29 + .4byte .LASF40 + .byte 0x5 + .byte 0x2a + .4byte .LASF41 + .byte 0x5 + .byte 0x2b + .4byte .LASF42 + .byte 0x5 + .byte 0x2c + .4byte .LASF43 + .byte 0x5 + .byte 0x2d + .4byte .LASF44 + .byte 0x5 + .byte 0x2e + .4byte .LASF45 + .byte 0x5 + .byte 0x2f + .4byte .LASF46 + .byte 0x5 + .byte 0x30 + .4byte .LASF47 + .byte 0x5 + .byte 0x31 + .4byte .LASF48 + .byte 0x5 + .byte 0x32 + .4byte .LASF49 + .byte 0x5 + .byte 0x33 + .4byte .LASF50 + .byte 0x5 + .byte 0x34 + .4byte .LASF51 + .byte 0x5 + .byte 0x35 + .4byte .LASF52 + .byte 0x5 + .byte 0x36 + .4byte .LASF53 + .byte 0x5 + .byte 0x37 + .4byte .LASF54 + .byte 0x5 + .byte 0x38 + .4byte .LASF55 + .byte 0x5 + .byte 0x39 + .4byte .LASF56 + .byte 0x5 + .byte 0x3a + .4byte .LASF57 + .byte 0x5 + .byte 0x3b + .4byte .LASF58 + .byte 0x5 + .byte 0x3c + .4byte .LASF59 + .byte 0x5 + .byte 0x3d + .4byte .LASF60 + .byte 0x5 + .byte 0x3e + .4byte .LASF61 + .byte 0x5 + .byte 0x3f + .4byte .LASF62 + .byte 0x5 + .byte 0x40 + .4byte .LASF63 + .byte 0x5 + .byte 0x41 + .4byte .LASF64 + .byte 0x5 + .byte 0x42 + .4byte .LASF65 + .byte 0x5 + .byte 0x43 + .4byte .LASF66 + .byte 0x5 + .byte 0x44 + .4byte .LASF67 + .byte 0x5 + .byte 0x45 + .4byte .LASF68 + .byte 0x5 + .byte 0x46 + .4byte .LASF69 + .byte 0x5 + .byte 0x47 + .4byte .LASF70 + .byte 0x5 + .byte 0x48 + .4byte .LASF71 + .byte 0x5 + .byte 0x49 + .4byte .LASF72 + .byte 0x5 + .byte 0x4a + .4byte .LASF73 + .byte 0x5 + .byte 0x4b + .4byte .LASF74 + .byte 0x5 + .byte 0x4c + .4byte .LASF75 + .byte 0x5 + .byte 0x4d + .4byte .LASF76 + .byte 0x5 + .byte 0x4e + .4byte .LASF77 + .byte 0x5 + .byte 0x4f + .4byte .LASF78 + .byte 0x5 + .byte 0x50 + .4byte .LASF79 + .byte 0x5 + .byte 0x51 + .4byte .LASF80 + .byte 0x5 + .byte 0x52 + .4byte .LASF81 + .byte 0x5 + .byte 0x53 + .4byte .LASF82 + .byte 0x5 + .byte 0x54 + .4byte .LASF83 + .byte 0x5 + .byte 0x55 + .4byte .LASF84 + .byte 0x5 + .byte 0x56 + .4byte .LASF85 + .byte 0x5 + .byte 0x57 + .4byte .LASF86 + .byte 0x5 + .byte 0x58 + .4byte .LASF87 + .byte 0x5 + .byte 0x59 + .4byte .LASF88 + .byte 0x5 + .byte 0x5a + .4byte .LASF89 + .byte 0x5 + .byte 0x5b + .4byte .LASF90 + .byte 0x5 + .byte 0x5c + .4byte .LASF91 + .byte 0x5 + .byte 0x5d + .4byte .LASF92 + .byte 0x5 + .byte 0x5e + .4byte .LASF93 + .byte 0x5 + .byte 0x5f + .4byte .LASF94 + .byte 0x5 + .byte 0x60 + .4byte .LASF95 + .byte 0x5 + .byte 0x61 + .4byte .LASF96 + .byte 0x5 + .byte 0x62 + .4byte .LASF97 + .byte 0x5 + .byte 0x63 + .4byte .LASF98 + .byte 0x5 + .byte 0x64 + .4byte .LASF99 + .byte 0x5 + .byte 0x65 + .4byte .LASF100 + .byte 0x5 + .byte 0x66 + .4byte .LASF101 + .byte 0x5 + .byte 0x67 + .4byte .LASF102 + .byte 0x5 + .byte 0x68 + .4byte .LASF103 + .byte 0x5 + .byte 0x69 + .4byte .LASF104 + .byte 0x5 + .byte 0x6a + .4byte .LASF105 + .byte 0x5 + .byte 0x6b + .4byte .LASF106 + .byte 0x5 + .byte 0x6c + .4byte .LASF107 + .byte 0x5 + .byte 0x6d + .4byte .LASF108 + .byte 0x5 + .byte 0x6e + .4byte .LASF109 + .byte 0x5 + .byte 0x6f + .4byte .LASF110 + .byte 0x5 + .byte 0x70 + .4byte .LASF111 + .byte 0x5 + .byte 0x71 + .4byte .LASF112 + .byte 0x5 + .byte 0x72 + .4byte .LASF113 + .byte 0x5 + .byte 0x73 + .4byte .LASF114 + .byte 0x5 + .byte 0x74 + .4byte .LASF115 + .byte 0x5 + .byte 0x75 + .4byte .LASF116 + .byte 0x5 + .byte 0x76 + .4byte .LASF117 + .byte 0x5 + .byte 0x77 + .4byte .LASF118 + .byte 0x5 + .byte 0x78 + .4byte .LASF119 + .byte 0x5 + .byte 0x79 + .4byte .LASF120 + .byte 0x5 + .byte 0x7a + .4byte .LASF121 + .byte 0x5 + .byte 0x7b + .4byte .LASF122 + .byte 0x5 + .byte 0x7c + .4byte .LASF123 + .byte 0x5 + .byte 0x7d + .4byte .LASF124 + .byte 0x5 + .byte 0x7e + .4byte .LASF125 + .byte 0x5 + .byte 0x7f + .4byte .LASF126 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF127 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF128 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF129 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF130 + .byte 0x5 + .byte 0x84,0x1 + .4byte .LASF131 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF132 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF133 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF134 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF135 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF136 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF137 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF138 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF139 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF140 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF141 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF142 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF143 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF144 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF145 + .byte 0x5 + .byte 0x93,0x1 + .4byte .LASF146 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF147 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF148 + .byte 0x5 + .byte 0x96,0x1 + .4byte .LASF149 + .byte 0x5 + .byte 0x97,0x1 + .4byte .LASF150 + .byte 0x5 + .byte 0x98,0x1 + .4byte .LASF151 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF152 + .byte 0x5 + .byte 0x9a,0x1 + .4byte .LASF153 + .byte 0x5 + .byte 0x9b,0x1 + .4byte .LASF154 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF155 + .byte 0x5 + .byte 0x9d,0x1 + .4byte .LASF156 + .byte 0x5 + .byte 0x9e,0x1 + .4byte .LASF157 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF158 + .byte 0x5 + .byte 0xa0,0x1 + .4byte .LASF159 + .byte 0x5 + .byte 0xa1,0x1 + .4byte .LASF160 + .byte 0x5 + .byte 0xa2,0x1 + .4byte .LASF161 + .byte 0x5 + .byte 0xa3,0x1 + .4byte .LASF162 + .byte 0x5 + .byte 0xa4,0x1 + .4byte .LASF163 + .byte 0x5 + .byte 0xa5,0x1 + .4byte .LASF164 + .byte 0x5 + .byte 0xa6,0x1 + .4byte .LASF165 + .byte 0x5 + .byte 0xa7,0x1 + .4byte .LASF166 + .byte 0x5 + .byte 0xa8,0x1 + .4byte .LASF167 + .byte 0x5 + .byte 0xa9,0x1 + .4byte .LASF168 + .byte 0x5 + .byte 0xaa,0x1 + .4byte .LASF169 + .byte 0x5 + .byte 0xab,0x1 + .4byte .LASF170 + .byte 0x5 + .byte 0xac,0x1 + .4byte .LASF171 + .byte 0x5 + .byte 0xad,0x1 + .4byte .LASF172 + .byte 0x5 + .byte 0xae,0x1 + .4byte .LASF173 + .byte 0x5 + .byte 0xaf,0x1 + .4byte .LASF174 + .byte 0x5 + .byte 0xb0,0x1 + .4byte .LASF175 + .byte 0x5 + .byte 0xb1,0x1 + .4byte .LASF176 + .byte 0x5 + .byte 0xb2,0x1 + .4byte .LASF177 + .byte 0x5 + .byte 0xb3,0x1 + .4byte .LASF178 + .byte 0x5 + .byte 0xb4,0x1 + .4byte .LASF179 + .byte 0x5 + .byte 0xb5,0x1 + .4byte .LASF180 + .byte 0x5 + .byte 0xb6,0x1 + .4byte .LASF181 + .byte 0x5 + .byte 0xb7,0x1 + .4byte .LASF182 + .byte 0x5 + .byte 0xb8,0x1 + .4byte .LASF183 + .byte 0x5 + .byte 0xb9,0x1 + .4byte .LASF184 + .byte 0x5 + .byte 0xba,0x1 + .4byte .LASF185 + .byte 0x5 + .byte 0xbb,0x1 + .4byte .LASF186 + .byte 0x5 + .byte 0xbc,0x1 + .4byte .LASF187 + .byte 0x5 + .byte 0xbd,0x1 + .4byte .LASF188 + .byte 0x5 + .byte 0xbe,0x1 + .4byte .LASF189 + .byte 0x5 + .byte 0xbf,0x1 + .4byte .LASF190 + .byte 0x5 + .byte 0xc0,0x1 + .4byte .LASF191 + .byte 0x5 + .byte 0xc1,0x1 + .4byte .LASF192 + .byte 0x5 + .byte 0xc2,0x1 + .4byte .LASF193 + .byte 0x5 + .byte 0xc3,0x1 + .4byte .LASF194 + .byte 0x5 + .byte 0xc4,0x1 + .4byte .LASF195 + .byte 0x5 + .byte 0xc5,0x1 + .4byte .LASF196 + .byte 0x5 + .byte 0xc6,0x1 + .4byte .LASF197 + .byte 0x5 + .byte 0xc7,0x1 + .4byte .LASF198 + .byte 0x5 + .byte 0xc8,0x1 + .4byte .LASF199 + .byte 0x5 + .byte 0xc9,0x1 + .4byte .LASF200 + .byte 0x5 + .byte 0xca,0x1 + .4byte .LASF201 + .byte 0x5 + .byte 0xcb,0x1 + .4byte .LASF202 + .byte 0x5 + .byte 0xcc,0x1 + .4byte .LASF203 + .byte 0x5 + .byte 0xcd,0x1 + .4byte .LASF204 + .byte 0x5 + .byte 0xce,0x1 + .4byte .LASF205 + .byte 0x5 + .byte 0xcf,0x1 + .4byte .LASF206 + .byte 0x5 + .byte 0xd0,0x1 + .4byte .LASF207 + .byte 0x5 + .byte 0xd1,0x1 + .4byte .LASF208 + .byte 0x5 + .byte 0xd2,0x1 + .4byte .LASF209 + .byte 0x5 + .byte 0xd3,0x1 + .4byte .LASF210 + .byte 0x5 + .byte 0xd4,0x1 + .4byte .LASF211 + .byte 0x5 + .byte 0xd5,0x1 + .4byte .LASF212 + .byte 0x5 + .byte 0xd6,0x1 + .4byte .LASF213 + .byte 0x5 + .byte 0xd7,0x1 + .4byte .LASF214 + .byte 0x5 + .byte 0xd8,0x1 + .4byte .LASF215 + .byte 0x5 + .byte 0xd9,0x1 + .4byte .LASF216 + .byte 0x5 + .byte 0xda,0x1 + .4byte .LASF217 + .byte 0x5 + .byte 0xdb,0x1 + .4byte .LASF218 + .byte 0x5 + .byte 0xdc,0x1 + .4byte .LASF219 + .byte 0x5 + .byte 0xdd,0x1 + .4byte .LASF220 + .byte 0x5 + .byte 0xde,0x1 + .4byte .LASF221 + .byte 0x5 + .byte 0xdf,0x1 + .4byte .LASF222 + .byte 0x5 + .byte 0xe0,0x1 + .4byte .LASF223 + .byte 0x5 + .byte 0xe1,0x1 + .4byte .LASF224 + .byte 0x5 + .byte 0xe2,0x1 + .4byte .LASF225 + .byte 0x5 + .byte 0xe3,0x1 + .4byte .LASF226 + .byte 0x5 + .byte 0xe4,0x1 + .4byte .LASF227 + .byte 0x5 + .byte 0xe5,0x1 + .4byte .LASF228 + .byte 0x5 + .byte 0xe6,0x1 + .4byte .LASF229 + .byte 0x5 + .byte 0xe7,0x1 + .4byte .LASF230 + .byte 0x5 + .byte 0xe8,0x1 + .4byte .LASF231 + .byte 0x5 + .byte 0xe9,0x1 + .4byte .LASF232 + .byte 0x5 + .byte 0xea,0x1 + .4byte .LASF233 + .byte 0x5 + .byte 0xeb,0x1 + .4byte .LASF234 + .byte 0x5 + .byte 0xec,0x1 + .4byte .LASF235 + .byte 0x5 + .byte 0xed,0x1 + .4byte .LASF236 + .byte 0x5 + .byte 0xee,0x1 + .4byte .LASF237 + .byte 0x5 + .byte 0xef,0x1 + .4byte .LASF238 + .byte 0x5 + .byte 0xf0,0x1 + .4byte .LASF239 + .byte 0x5 + .byte 0xf1,0x1 + .4byte .LASF240 + .byte 0x5 + .byte 0xf2,0x1 + .4byte .LASF241 + .byte 0x5 + .byte 0xf3,0x1 + .4byte .LASF242 + .byte 0x5 + .byte 0xf4,0x1 + .4byte .LASF243 + .byte 0x5 + .byte 0xf5,0x1 + .4byte .LASF244 + .byte 0x5 + .byte 0xf6,0x1 + .4byte .LASF245 + .byte 0x5 + .byte 0xf7,0x1 + .4byte .LASF246 + .byte 0x5 + .byte 0xf8,0x1 + .4byte .LASF247 + .byte 0x5 + .byte 0xf9,0x1 + .4byte .LASF248 + .byte 0x5 + .byte 0xfa,0x1 + .4byte .LASF249 + .byte 0x5 + .byte 0xfb,0x1 + .4byte .LASF250 + .byte 0x5 + .byte 0xfc,0x1 + .4byte .LASF251 + .byte 0x5 + .byte 0xfd,0x1 + .4byte .LASF252 + .byte 0x5 + .byte 0xfe,0x1 + .4byte .LASF253 + .byte 0x5 + .byte 0xff,0x1 + .4byte .LASF254 + .byte 0x5 + .byte 0x80,0x2 + .4byte .LASF255 + .byte 0x5 + .byte 0x81,0x2 + .4byte .LASF256 + .byte 0x5 + .byte 0x82,0x2 + .4byte .LASF257 + .byte 0x5 + .byte 0x83,0x2 + .4byte .LASF258 + .byte 0x5 + .byte 0x84,0x2 + .4byte .LASF259 + .byte 0x5 + .byte 0x85,0x2 + .4byte .LASF260 + .byte 0x5 + .byte 0x86,0x2 + .4byte .LASF261 + .byte 0x5 + .byte 0x87,0x2 + .4byte .LASF262 + .byte 0x5 + .byte 0x88,0x2 + .4byte .LASF263 + .byte 0x5 + .byte 0x89,0x2 + .4byte .LASF264 + .byte 0x5 + .byte 0x8a,0x2 + .4byte .LASF265 + .byte 0x5 + .byte 0x8b,0x2 + .4byte .LASF266 + .byte 0x5 + .byte 0x8c,0x2 + .4byte .LASF267 + .byte 0x5 + .byte 0x8d,0x2 + .4byte .LASF268 + .byte 0x5 + .byte 0x8e,0x2 + .4byte .LASF269 + .byte 0x5 + .byte 0x8f,0x2 + .4byte .LASF270 + .byte 0x5 + .byte 0x90,0x2 + .4byte .LASF271 + .byte 0x5 + .byte 0x91,0x2 + .4byte .LASF272 + .byte 0x5 + .byte 0x92,0x2 + .4byte .LASF273 + .byte 0x5 + .byte 0x93,0x2 + .4byte .LASF274 + .byte 0x5 + .byte 0x94,0x2 + .4byte .LASF275 + .byte 0x5 + .byte 0x95,0x2 + .4byte .LASF276 + .byte 0x5 + .byte 0x96,0x2 + .4byte .LASF277 + .byte 0x5 + .byte 0x97,0x2 + .4byte .LASF278 + .byte 0x5 + .byte 0x98,0x2 + .4byte .LASF279 + .byte 0x5 + .byte 0x99,0x2 + .4byte .LASF280 + .byte 0x5 + .byte 0x9a,0x2 + .4byte .LASF281 + .byte 0x5 + .byte 0x9b,0x2 + .4byte .LASF282 + .byte 0x5 + .byte 0x9c,0x2 + .4byte .LASF283 + .byte 0x5 + .byte 0x9d,0x2 + .4byte .LASF284 + .byte 0x5 + .byte 0x9e,0x2 + .4byte .LASF285 + .byte 0x5 + .byte 0x9f,0x2 + .4byte .LASF286 + .byte 0x5 + .byte 0xa0,0x2 + .4byte .LASF287 + .byte 0x5 + .byte 0xa1,0x2 + .4byte .LASF288 + .byte 0x5 + .byte 0xa2,0x2 + .4byte .LASF289 + .byte 0x5 + .byte 0xa3,0x2 + .4byte .LASF290 + .byte 0x5 + .byte 0xa4,0x2 + .4byte .LASF291 + .byte 0x5 + .byte 0xa5,0x2 + .4byte .LASF292 + .byte 0x5 + .byte 0xa6,0x2 + .4byte .LASF293 + .byte 0x5 + .byte 0xa7,0x2 + .4byte .LASF294 + .byte 0x5 + .byte 0xa8,0x2 + .4byte .LASF295 + .byte 0x5 + .byte 0xa9,0x2 + .4byte .LASF296 + .byte 0x5 + .byte 0xaa,0x2 + .4byte .LASF297 + .byte 0x5 + .byte 0xab,0x2 + .4byte .LASF298 + .byte 0x5 + .byte 0xac,0x2 + .4byte .LASF299 + .byte 0x5 + .byte 0xad,0x2 + .4byte .LASF300 + .byte 0x5 + .byte 0xae,0x2 + .4byte .LASF301 + .byte 0x5 + .byte 0xaf,0x2 + .4byte .LASF302 + .byte 0x5 + .byte 0xb0,0x2 + .4byte .LASF303 + .byte 0x5 + .byte 0xb1,0x2 + .4byte .LASF304 + .byte 0x5 + .byte 0xb2,0x2 + .4byte .LASF305 + .byte 0x5 + .byte 0xb3,0x2 + .4byte .LASF306 + .byte 0x5 + .byte 0xb4,0x2 + .4byte .LASF307 + .byte 0x5 + .byte 0xb5,0x2 + .4byte .LASF308 + .byte 0x5 + .byte 0xb6,0x2 + .4byte .LASF309 + .byte 0x5 + .byte 0xb7,0x2 + .4byte .LASF310 + .byte 0x5 + .byte 0xb8,0x2 + .4byte .LASF311 + .byte 0x5 + .byte 0x1 + .4byte .LASF312 + .byte 0x5 + .byte 0x2 + .4byte .LASF313 + .byte 0x5 + .byte 0x3 + .4byte .LASF314 + .byte 0x3 + .byte 0xb + .byte 0x11 + .byte 0x5 + .byte 0x12 + .4byte .LASF315 + .byte 0x3 + .byte 0x14 + .byte 0xb + .byte 0x5 + .byte 0x15 + .4byte .LASF316 + .file 18 "./rtconfig.h" + .byte 0x3 + .byte 0x17 + .byte 0x12 + .byte 0x7 + .4byte .Ldebug_macro2 + .byte 0x4 + .file 19 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/rtdebug.h" + .byte 0x3 + .byte 0x18 + .byte 0x13 + .byte 0x7 + .4byte .Ldebug_macro3 + .byte 0x4 + .byte 0x3 + .byte 0x19 + .byte 0x3 + .byte 0x7 + .4byte .Ldebug_macro4 + .file 20 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\lib\\gcc\\riscv-none-embed\\8.2.0\\include\\stdarg.h" + .byte 0x3 + .byte 0x95,0x1 + .byte 0x14 + .byte 0x7 + .4byte .Ldebug_macro5 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro6 + .file 21 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/rtlibc.h" + .byte 0x3 + .byte 0xff,0x8 + .byte 0x15 + .byte 0x5 + .byte 0xc + .4byte .LASF541 + .file 22 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/libc/libc_stat.h" + .byte 0x3 + .byte 0xf + .byte 0x16 + .byte 0x5 + .byte 0xb + .4byte .LASF542 + .file 23 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\stat.h" + .byte 0x3 + .byte 0x11 + .byte 0x17 + .byte 0x5 + .byte 0x2 + .4byte .LASF543 + .file 24 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\_ansi.h" + .byte 0x3 + .byte 0x8 + .byte 0x18 + .byte 0x5 + .byte 0x8 + .4byte .LASF544 + .file 25 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\newlib.h" + .byte 0x3 + .byte 0xa + .byte 0x19 + .byte 0x5 + .byte 0x8 + .4byte .LASF545 + .file 26 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\_newlib_version.h" + .byte 0x3 + .byte 0xe + .byte 0x1a + .byte 0x7 + .4byte .Ldebug_macro7 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro8 + .byte 0x4 + .file 27 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\config.h" + .byte 0x3 + .byte 0xb + .byte 0x1b + .byte 0x5 + .byte 0x2 + .4byte .LASF564 + .file 28 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\machine\\ieeefp.h" + .byte 0x3 + .byte 0x4 + .byte 0x1c + .byte 0x7 + .4byte .Ldebug_macro9 + .byte 0x4 + .file 29 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\features.h" + .byte 0x3 + .byte 0x5 + .byte 0x1d + .byte 0x7 + .4byte .Ldebug_macro10 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro11 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro12 + .byte 0x4 + .byte 0x3 + .byte 0x9 + .byte 0xa + .byte 0x5 + .byte 0x8 + .4byte .LASF604 + .byte 0x3 + .byte 0xa + .byte 0x18 + .byte 0x4 + .file 30 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\cdefs.h" + .byte 0x3 + .byte 0xb + .byte 0x1e + .byte 0x5 + .byte 0x29 + .4byte .LASF605 + .byte 0x3 + .byte 0x2b + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro13 + .byte 0x4 + .byte 0x3 + .byte 0x2d + .byte 0x7 + .byte 0x7 + .4byte .Ldebug_macro14 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro15 + .byte 0x4 + .byte 0x3 + .byte 0xc + .byte 0x8 + .byte 0x5 + .byte 0xb + .4byte .LASF792 + .byte 0x3 + .byte 0xe + .byte 0x7 + .byte 0x4 + .byte 0x3 + .byte 0xf + .byte 0x6 + .byte 0x5 + .byte 0x14 + .4byte .LASF793 + .file 31 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\machine\\_types.h" + .byte 0x3 + .byte 0x18 + .byte 0x1f + .byte 0x5 + .byte 0x6 + .4byte .LASF794 + .byte 0x4 + .byte 0x3 + .byte 0x19 + .byte 0x5 + .byte 0x7 + .4byte .Ldebug_macro16 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro17 + .byte 0x3 + .byte 0x9f,0x1 + .byte 0x7 + .byte 0x7 + .4byte .Ldebug_macro18 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro19 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro20 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro21 + .byte 0x3 + .byte 0x10 + .byte 0x7 + .byte 0x7 + .4byte .Ldebug_macro22 + .byte 0x4 + .file 32 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\components\\libc\\compilers\\newlib/machine/time.h" + .byte 0x3 + .byte 0x13 + .byte 0x20 + .byte 0x7 + .4byte .Ldebug_macro23 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro24 + .file 33 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\types.h" + .byte 0x3 + .byte 0x1c + .byte 0x21 + .byte 0x7 + .4byte .Ldebug_macro25 + .byte 0x3 + .byte 0x3e + .byte 0x7 + .byte 0x4 + .byte 0x3 + .byte 0x40 + .byte 0x9 + .byte 0x7 + .4byte .Ldebug_macro26 + .byte 0x4 + .file 34 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\machine\\endian.h" + .byte 0x3 + .byte 0x43 + .byte 0x22 + .byte 0x5 + .byte 0x2 + .4byte .LASF901 + .file 35 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\machine\\_endian.h" + .byte 0x3 + .byte 0x6 + .byte 0x23 + .byte 0x7 + .4byte .Ldebug_macro27 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro28 + .byte 0x4 + .file 36 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\components\\libc\\compilers\\common/sys/select.h" + .byte 0x3 + .byte 0x44 + .byte 0x24 + .byte 0x5 + .byte 0xc + .4byte .LASF919 + .byte 0x3 + .byte 0xf + .byte 0x21 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro29 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro30 + .file 37 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\_pthreadtypes.h" + .byte 0x3 + .byte 0xef,0x1 + .byte 0x25 + .byte 0x5 + .byte 0x13 + .4byte .LASF964 + .file 38 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\sched.h" + .byte 0x3 + .byte 0x17 + .byte 0x26 + .byte 0x5 + .byte 0x16 + .4byte .LASF965 + .file 39 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\_timespec.h" + .byte 0x3 + .byte 0x18 + .byte 0x27 + .byte 0x5 + .byte 0x23 + .4byte .LASF966 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro31 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro32 + .byte 0x4 + .file 40 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\machine\\types.h" + .byte 0x3 + .byte 0xf0,0x1 + .byte 0x28 + .byte 0x4 + .byte 0x6 + .byte 0xf4,0x1 + .4byte .LASF979 + .byte 0x4 + .file 41 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\timespec.h" + .byte 0x3 + .byte 0x1d + .byte 0x29 + .byte 0x7 + .4byte .Ldebug_macro33 + .byte 0x4 + .file 42 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\xlocale.h" + .byte 0x3 + .byte 0x20 + .byte 0x2a + .byte 0x5 + .byte 0x4 + .4byte .LASF983 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro34 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro35 + .byte 0x4 + .byte 0x4 + .file 43 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/libc/libc_fcntl.h" + .byte 0x3 + .byte 0x10 + .byte 0x2b + .byte 0x5 + .byte 0xd + .4byte .LASF1037 + .file 44 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\fcntl.h" + .byte 0x3 + .byte 0x10 + .byte 0x2c + .file 45 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\fcntl.h" + .byte 0x3 + .byte 0x1 + .byte 0x2d + .byte 0x5 + .byte 0x2 + .4byte .LASF1038 + .file 46 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\_default_fcntl.h" + .byte 0x3 + .byte 0x3 + .byte 0x2e + .byte 0x7 + .4byte .Ldebug_macro36 + .byte 0x4 + .byte 0x4 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro37 + .byte 0x4 + .file 47 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/libc/libc_dirent.h" + .byte 0x3 + .byte 0x11 + .byte 0x2f + .byte 0x7 + .4byte .Ldebug_macro38 + .byte 0x4 + .byte 0x4 + .byte 0x4 + .file 48 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/rtservice.h" + .byte 0x3 + .byte 0x1a + .byte 0x30 + .byte 0x7 + .4byte .Ldebug_macro39 + .byte 0x4 + .file 49 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\include/rtm.h" + .byte 0x3 + .byte 0x1b + .byte 0x31 + .byte 0x5 + .byte 0xb + .4byte .LASF1136 + .byte 0x3 + .byte 0xe + .byte 0xb + .byte 0x4 + .byte 0x5 + .byte 0x2b + .4byte .LASF1137 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro40 + .byte 0x3 + .byte 0xcc,0x4 + .byte 0xc + .byte 0x7 + .4byte .Ldebug_macro41 + .byte 0x4 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro42 + .byte 0x4 + .file 50 "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\libcpu\\risc-v\\ch32v103\\cpuport.h" + .byte 0x3 + .byte 0xe + .byte 0x32 + .byte 0x7 + .4byte .Ldebug_macro43 + .byte 0x4 + .byte 0x3 + .byte 0xf + .byte 0xd + .byte 0x7 + .4byte .Ldebug_macro44 + .file 51 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\stdint.h" + .byte 0x3 + .byte 0x52 + .byte 0x33 + .byte 0x5 + .byte 0xa + .4byte .LASF1170 + .file 52 "e:\\devboard\\artt\\env_riscv_1.1.3\\tools\\gnu_gcc\\risc-v\\riscv-none-embed\\include\\sys\\_intsup.h" + .byte 0x3 + .byte 0xd + .byte 0x34 + .byte 0x7 + .4byte .Ldebug_macro45 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro46 + .byte 0x4 + .byte 0x3 + .byte 0x53 + .byte 0x2 + .byte 0x7 + .4byte .Ldebug_macro47 + .byte 0x4 + .byte 0x3 + .byte 0x54 + .byte 0xe + .byte 0x5 + .byte 0x9 + .4byte .LASF1279 + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro48 + .file 53 "libraries\\WCH32V103_std_peripheral/ch32v10x_conf.h" + .byte 0x3 + .byte 0xa1,0x19 + .byte 0x35 + .byte 0x5 + .byte 0x9 + .4byte .LASF3221 + .file 54 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_adc.h" + .byte 0x3 + .byte 0xb + .byte 0x36 + .byte 0x5 + .byte 0xa + .4byte .LASF3222 + .byte 0x3 + .byte 0x10 + .byte 0xd + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro49 + .byte 0x4 + .file 55 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_bkp.h" + .byte 0x3 + .byte 0xc + .byte 0x37 + .byte 0x7 + .4byte .Ldebug_macro50 + .byte 0x4 + .file 56 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_crc.h" + .byte 0x3 + .byte 0xd + .byte 0x38 + .byte 0x5 + .byte 0xa + .4byte .LASF3347 + .byte 0x4 + .file 57 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_dbgmcu.h" + .byte 0x3 + .byte 0xe + .byte 0x39 + .byte 0x7 + .4byte .Ldebug_macro51 + .byte 0x4 + .file 58 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_dma.h" + .byte 0x3 + .byte 0xf + .byte 0x3a + .byte 0x7 + .4byte .Ldebug_macro52 + .byte 0x4 + .file 59 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_exti.h" + .byte 0x3 + .byte 0x10 + .byte 0x3b + .byte 0x7 + .4byte .Ldebug_macro53 + .byte 0x4 + .file 60 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_flash.h" + .byte 0x3 + .byte 0x11 + .byte 0x3c + .byte 0x7 + .4byte .Ldebug_macro54 + .byte 0x4 + .file 61 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_gpio.h" + .byte 0x3 + .byte 0x12 + .byte 0x3d + .byte 0x7 + .4byte .Ldebug_macro55 + .byte 0x4 + .file 62 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_i2c.h" + .byte 0x3 + .byte 0x13 + .byte 0x3e + .byte 0x7 + .4byte .Ldebug_macro56 + .byte 0x4 + .file 63 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_iwdg.h" + .byte 0x3 + .byte 0x14 + .byte 0x3f + .byte 0x7 + .4byte .Ldebug_macro57 + .byte 0x4 + .file 64 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_pwr.h" + .byte 0x3 + .byte 0x15 + .byte 0x40 + .byte 0x7 + .4byte .Ldebug_macro58 + .byte 0x4 + .file 65 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_rcc.h" + .byte 0x3 + .byte 0x16 + .byte 0x41 + .byte 0x7 + .4byte .Ldebug_macro59 + .byte 0x4 + .file 66 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_rtc.h" + .byte 0x3 + .byte 0x17 + .byte 0x42 + .byte 0x7 + .4byte .Ldebug_macro60 + .byte 0x4 + .file 67 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_spi.h" + .byte 0x3 + .byte 0x18 + .byte 0x43 + .byte 0x7 + .4byte .Ldebug_macro61 + .byte 0x4 + .file 68 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_tim.h" + .byte 0x3 + .byte 0x19 + .byte 0x44 + .byte 0x7 + .4byte .Ldebug_macro62 + .byte 0x4 + .file 69 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_usart.h" + .byte 0x3 + .byte 0x1a + .byte 0x45 + .byte 0x7 + .4byte .Ldebug_macro63 + .byte 0x4 + .file 70 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_wwdg.h" + .byte 0x3 + .byte 0x1b + .byte 0x46 + .byte 0x7 + .4byte .Ldebug_macro64 + .byte 0x4 + .byte 0x3 + .byte 0x1c + .byte 0xf + .byte 0x7 + .4byte .Ldebug_macro65 + .byte 0x4 + .byte 0x3 + .byte 0x1d + .byte 0x10 + .byte 0x5 + .byte 0xa + .4byte .LASF4520 + .byte 0x3 + .byte 0xc + .byte 0xf + .byte 0x4 + .byte 0x7 + .4byte .Ldebug_macro66 + .byte 0x4 + .file 71 "libraries\\WCH32V103_std_peripheral/ch32v10x_it.h" + .byte 0x3 + .byte 0x1e + .byte 0x47 + .byte 0x7 + .4byte .Ldebug_macro67 + .byte 0x4 + .file 72 "libraries\\WCH32V103_std_peripheral\\inc/ch32v10x_misc.h" + .byte 0x3 + .byte 0x1f + .byte 0x48 + .byte 0x7 + .4byte .Ldebug_macro68 + .byte 0x4 + .byte 0x4 + .byte 0x4 + .byte 0x4 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.rtconfig.h.2.4ee0d6304fd1fccb2e055814cdb6582f,comdat +.Ldebug_macro2: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x2 + .4byte .LASF317 + .byte 0x5 + .byte 0x9 + .4byte .LASF318 + .byte 0x5 + .byte 0xa + .4byte .LASF319 + .byte 0x5 + .byte 0xb + .4byte .LASF320 + .byte 0x5 + .byte 0xc + .4byte .LASF321 + .byte 0x5 + .byte 0xd + .4byte .LASF322 + .byte 0x5 + .byte 0xe + .4byte .LASF323 + .byte 0x5 + .byte 0xf + .4byte .LASF324 + .byte 0x5 + .byte 0x10 + .4byte .LASF325 + .byte 0x5 + .byte 0x11 + .4byte .LASF326 + .byte 0x5 + .byte 0x12 + .4byte .LASF327 + .byte 0x5 + .byte 0x13 + .4byte .LASF328 + .byte 0x5 + .byte 0x14 + .4byte .LASF329 + .byte 0x5 + .byte 0x15 + .4byte .LASF330 + .byte 0x5 + .byte 0x16 + .4byte .LASF331 + .byte 0x5 + .byte 0x1a + .4byte .LASF332 + .byte 0x5 + .byte 0x1b + .4byte .LASF333 + .byte 0x5 + .byte 0x1c + .4byte .LASF334 + .byte 0x5 + .byte 0x1d + .4byte .LASF335 + .byte 0x5 + .byte 0x1e + .4byte .LASF336 + .byte 0x5 + .byte 0x22 + .4byte .LASF337 + .byte 0x5 + .byte 0x23 + .4byte .LASF338 + .byte 0x5 + .byte 0x27 + .4byte .LASF339 + .byte 0x5 + .byte 0x28 + .4byte .LASF340 + .byte 0x5 + .byte 0x29 + .4byte .LASF341 + .byte 0x5 + .byte 0x2a + .4byte .LASF342 + .byte 0x5 + .byte 0x2b + .4byte .LASF343 + .byte 0x5 + .byte 0x2f + .4byte .LASF344 + .byte 0x5 + .byte 0x30 + .4byte .LASF345 + .byte 0x5 + .byte 0x31 + .4byte .LASF346 + .byte 0x5 + .byte 0x32 + .4byte .LASF347 + .byte 0x5 + .byte 0x39 + .4byte .LASF348 + .byte 0x5 + .byte 0x3a + .4byte .LASF349 + .byte 0x5 + .byte 0x3b + .4byte .LASF350 + .byte 0x5 + .byte 0x3c + .4byte .LASF351 + .byte 0x5 + .byte 0x3d + .4byte .LASF352 + .byte 0x5 + .byte 0x3e + .4byte .LASF353 + .byte 0x5 + .byte 0x3f + .4byte .LASF354 + .byte 0x5 + .byte 0x40 + .4byte .LASF355 + .byte 0x5 + .byte 0x41 + .4byte .LASF356 + .byte 0x5 + .byte 0x42 + .4byte .LASF357 + .byte 0x5 + .byte 0x43 + .4byte .LASF358 + .byte 0x5 + .byte 0x4a + .4byte .LASF359 + .byte 0x5 + .byte 0x4b + .4byte .LASF360 + .byte 0x5 + .byte 0x4c + .4byte .LASF361 + .byte 0x5 + .byte 0x4d + .4byte .LASF362 + .byte 0x5 + .byte 0x4e + .4byte .LASF363 + .byte 0x5 + .byte 0x55 + .4byte .LASF364 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF365 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF366 + .byte 0x5 + .byte 0x9a,0x1 + .4byte .LASF367 + .byte 0x5 + .byte 0x9e,0x1 + .4byte .LASF368 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF369 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.rtdebug.h.11.eda4ed7ed0fca3d47eddaca4760c7c57,comdat +.Ldebug_macro3: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xb + .4byte .LASF370 + .byte 0x5 + .byte 0x26 + .4byte .LASF371 + .byte 0x5 + .byte 0x2a + .4byte .LASF372 + .byte 0x5 + .byte 0x2e + .4byte .LASF373 + .byte 0x5 + .byte 0x32 + .4byte .LASF374 + .byte 0x5 + .byte 0x36 + .4byte .LASF375 + .byte 0x5 + .byte 0x3a + .4byte .LASF376 + .byte 0x5 + .byte 0x3e + .4byte .LASF377 + .byte 0x5 + .byte 0x42 + .4byte .LASF378 + .byte 0x5 + .byte 0x46 + .4byte .LASF379 + .byte 0x5 + .byte 0x4a + .4byte .LASF380 + .byte 0x5 + .byte 0x4f + .4byte .LASF381 + .byte 0x5 + .byte 0x52 + .4byte .LASF382 + .byte 0x5 + .byte 0x5a + .4byte .LASF383 + .byte 0x5 + .byte 0x62 + .4byte .LASF384 + .byte 0x5 + .byte 0x74 + .4byte .LASF385 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.rtdef.h.42.9080d5a95ebc9db19cb2eac5d667578a,comdat +.Ldebug_macro4: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x2a + .4byte .LASF386 + .byte 0x5 + .byte 0x3a + .4byte .LASF387 + .byte 0x5 + .byte 0x3b + .4byte .LASF388 + .byte 0x5 + .byte 0x3c + .4byte .LASF389 + .byte 0x5 + .byte 0x3f + .4byte .LASF390 + .byte 0x5 + .byte 0x61 + .4byte .LASF391 + .byte 0x5 + .byte 0x62 + .4byte .LASF392 + .byte 0x5 + .byte 0x67 + .4byte .LASF393 + .byte 0x5 + .byte 0x68 + .4byte .LASF394 + .byte 0x5 + .byte 0x69 + .4byte .LASF395 + .byte 0x5 + .byte 0x6a + .4byte .LASF396 + .byte 0x5 + .byte 0x6d + .4byte .LASF397 + .byte 0x5 + .byte 0x6e + .4byte .LASF398 + .byte 0x5 + .byte 0x6f + .4byte .LASF399 + .byte 0x5 + .byte 0x70 + .4byte .LASF400 + .byte 0x5 + .byte 0x71 + .4byte .LASF401 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.stdarg.h.31.b55da1089056868966f25de5dbfc7d3c,comdat +.Ldebug_macro5: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x1f + .4byte .LASF402 + .byte 0x5 + .byte 0x20 + .4byte .LASF403 + .byte 0x6 + .byte 0x22 + .4byte .LASF404 + .byte 0x5 + .byte 0x27 + .4byte .LASF405 + .byte 0x5 + .byte 0x2f + .4byte .LASF406 + .byte 0x5 + .byte 0x30 + .4byte .LASF407 + .byte 0x5 + .byte 0x31 + .4byte .LASF408 + .byte 0x5 + .byte 0x34 + .4byte .LASF409 + .byte 0x5 + .byte 0x36 + .4byte .LASF410 + .byte 0x5 + .byte 0x69 + .4byte .LASF411 + .byte 0x5 + .byte 0x6c + .4byte .LASF412 + .byte 0x5 + .byte 0x6f + .4byte .LASF413 + .byte 0x5 + .byte 0x72 + .4byte .LASF414 + .byte 0x5 + .byte 0x75 + .4byte .LASF415 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.rtdef.h.159.56f17c2ac63a4b6b24946aab4c0029d1,comdat +.Ldebug_macro6: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF416 + .byte 0x5 + .byte 0xa0,0x1 + .4byte .LASF417 + .byte 0x5 + .byte 0xa1,0x1 + .4byte .LASF418 + .byte 0x5 + .byte 0xa2,0x1 + .4byte .LASF419 + .byte 0x5 + .byte 0xa3,0x1 + .4byte .LASF420 + .byte 0x5 + .byte 0xa4,0x1 + .4byte .LASF421 + .byte 0x5 + .byte 0xa5,0x1 + .4byte .LASF422 + .byte 0x5 + .byte 0xfd,0x1 + .4byte .LASF423 + .byte 0x5 + .byte 0x86,0x2 + .4byte .LASF424 + .byte 0x5 + .byte 0x8a,0x2 + .4byte .LASF425 + .byte 0x5 + .byte 0x8c,0x2 + .4byte .LASF426 + .byte 0x5 + .byte 0x8e,0x2 + .4byte .LASF427 + .byte 0x5 + .byte 0x90,0x2 + .4byte .LASF428 + .byte 0x5 + .byte 0x92,0x2 + .4byte .LASF429 + .byte 0x5 + .byte 0xa1,0x2 + .4byte .LASF430 + .byte 0x5 + .byte 0xa4,0x2 + .4byte .LASF431 + .byte 0x5 + .byte 0xa5,0x2 + .4byte .LASF432 + .byte 0x5 + .byte 0xa6,0x2 + .4byte .LASF433 + .byte 0x5 + .byte 0xaa,0x2 + .4byte .LASF434 + .byte 0x5 + .byte 0xae,0x2 + .4byte .LASF435 + .byte 0x5 + .byte 0xb2,0x2 + .4byte .LASF436 + .byte 0x5 + .byte 0xbc,0x2 + .4byte .LASF437 + .byte 0x5 + .byte 0xbd,0x2 + .4byte .LASF438 + .byte 0x5 + .byte 0xbe,0x2 + .4byte .LASF439 + .byte 0x5 + .byte 0xbf,0x2 + .4byte .LASF440 + .byte 0x5 + .byte 0xc0,0x2 + .4byte .LASF441 + .byte 0x5 + .byte 0xc1,0x2 + .4byte .LASF442 + .byte 0x5 + .byte 0xc2,0x2 + .4byte .LASF443 + .byte 0x5 + .byte 0xc3,0x2 + .4byte .LASF444 + .byte 0x5 + .byte 0xc4,0x2 + .4byte .LASF445 + .byte 0x5 + .byte 0xc5,0x2 + .4byte .LASF446 + .byte 0x5 + .byte 0xc6,0x2 + .4byte .LASF447 + .byte 0x5 + .byte 0xd1,0x2 + .4byte .LASF448 + .byte 0x5 + .byte 0xda,0x2 + .4byte .LASF449 + .byte 0x5 + .byte 0xe2,0x2 + .4byte .LASF450 + .byte 0x5 + .byte 0x80,0x3 + .4byte .LASF451 + .byte 0x5 + .byte 0xc3,0x3 + .4byte .LASF452 + .byte 0x5 + .byte 0xd4,0x3 + .4byte .LASF453 + .byte 0x5 + .byte 0xd5,0x3 + .4byte .LASF454 + .byte 0x5 + .byte 0xd6,0x3 + .4byte .LASF455 + .byte 0x5 + .byte 0xd7,0x3 + .4byte .LASF456 + .byte 0x5 + .byte 0xd9,0x3 + .4byte .LASF457 + .byte 0x5 + .byte 0xda,0x3 + .4byte .LASF458 + .byte 0x5 + .byte 0xdc,0x3 + .4byte .LASF459 + .byte 0x5 + .byte 0xdd,0x3 + .4byte .LASF460 + .byte 0x5 + .byte 0xde,0x3 + .4byte .LASF461 + .byte 0x5 + .byte 0xdf,0x3 + .4byte .LASF462 + .byte 0x5 + .byte 0xe0,0x3 + .4byte .LASF463 + .byte 0x5 + .byte 0xe3,0x3 + .4byte .LASF464 + .byte 0x5 + .byte 0xe8,0x3 + .4byte .LASF465 + .byte 0x5 + .byte 0x98,0x4 + .4byte .LASF466 + .byte 0x5 + .byte 0x99,0x4 + .4byte .LASF467 + .byte 0x5 + .byte 0x9a,0x4 + .4byte .LASF468 + .byte 0x5 + .byte 0x9b,0x4 + .4byte .LASF469 + .byte 0x5 + .byte 0x9c,0x4 + .4byte .LASF470 + .byte 0x5 + .byte 0x9d,0x4 + .4byte .LASF471 + .byte 0x5 + .byte 0x9e,0x4 + .4byte .LASF472 + .byte 0x5 + .byte 0xa0,0x4 + .4byte .LASF473 + .byte 0x5 + .byte 0xa1,0x4 + .4byte .LASF474 + .byte 0x5 + .byte 0xa3,0x4 + .4byte .LASF475 + .byte 0x5 + .byte 0xa4,0x4 + .4byte .LASF476 + .byte 0x5 + .byte 0xa5,0x4 + .4byte .LASF477 + .byte 0x5 + .byte 0xa6,0x4 + .4byte .LASF478 + .byte 0x5 + .byte 0xa7,0x4 + .4byte .LASF479 + .byte 0x5 + .byte 0xac,0x4 + .4byte .LASF480 + .byte 0x5 + .byte 0xad,0x4 + .4byte .LASF481 + .byte 0x5 + .byte 0xae,0x4 + .4byte .LASF482 + .byte 0x5 + .byte 0xaf,0x4 + .4byte .LASF483 + .byte 0x5 + .byte 0xb0,0x4 + .4byte .LASF484 + .byte 0x5 + .byte 0xb7,0x5 + .4byte .LASF485 + .byte 0x5 + .byte 0xb8,0x5 + .4byte .LASF486 + .byte 0x5 + .byte 0xba,0x5 + .4byte .LASF487 + .byte 0x5 + .byte 0xbb,0x5 + .4byte .LASF488 + .byte 0x5 + .byte 0xbd,0x5 + .4byte .LASF489 + .byte 0x5 + .byte 0xbe,0x5 + .4byte .LASF490 + .byte 0x5 + .byte 0xee,0x5 + .4byte .LASF491 + .byte 0x5 + .byte 0xef,0x5 + .4byte .LASF492 + .byte 0x5 + .byte 0xf0,0x5 + .4byte .LASF493 + .byte 0x5 + .byte 0xa3,0x7 + .4byte .LASF494 + .byte 0x5 + .byte 0xa5,0x7 + .4byte .LASF495 + .byte 0x5 + .byte 0xa6,0x7 + .4byte .LASF496 + .byte 0x5 + .byte 0xa7,0x7 + .4byte .LASF497 + .byte 0x5 + .byte 0xa9,0x7 + .4byte .LASF498 + .byte 0x5 + .byte 0xaa,0x7 + .4byte .LASF499 + .byte 0x5 + .byte 0xab,0x7 + .4byte .LASF500 + .byte 0x5 + .byte 0xac,0x7 + .4byte .LASF501 + .byte 0x5 + .byte 0xad,0x7 + .4byte .LASF502 + .byte 0x5 + .byte 0xaf,0x7 + .4byte .LASF503 + .byte 0x5 + .byte 0xb0,0x7 + .4byte .LASF504 + .byte 0x5 + .byte 0xb1,0x7 + .4byte .LASF505 + .byte 0x5 + .byte 0xb2,0x7 + .4byte .LASF506 + .byte 0x5 + .byte 0xb4,0x7 + .4byte .LASF507 + .byte 0x5 + .byte 0xb5,0x7 + .4byte .LASF508 + .byte 0x5 + .byte 0xb6,0x7 + .4byte .LASF509 + .byte 0x5 + .byte 0xb7,0x7 + .4byte .LASF510 + .byte 0x5 + .byte 0xb8,0x7 + .4byte .LASF511 + .byte 0x5 + .byte 0xb9,0x7 + .4byte .LASF512 + .byte 0x5 + .byte 0xbe,0x7 + .4byte .LASF513 + .byte 0x5 + .byte 0xbf,0x7 + .4byte .LASF514 + .byte 0x5 + .byte 0xc0,0x7 + .4byte .LASF515 + .byte 0x5 + .byte 0xc1,0x7 + .4byte .LASF516 + .byte 0x5 + .byte 0xc3,0x7 + .4byte .LASF517 + .byte 0x5 + .byte 0xc4,0x7 + .4byte .LASF518 + .byte 0x5 + .byte 0xc5,0x7 + .4byte .LASF519 + .byte 0x5 + .byte 0xca,0x7 + .4byte .LASF520 + .byte 0x5 + .byte 0xcb,0x7 + .4byte .LASF521 + .byte 0x5 + .byte 0xcc,0x7 + .4byte .LASF522 + .byte 0x5 + .byte 0xcd,0x7 + .4byte .LASF523 + .byte 0x5 + .byte 0xce,0x7 + .4byte .LASF524 + .byte 0x5 + .byte 0xcf,0x7 + .4byte .LASF525 + .byte 0x5 + .byte 0xd0,0x7 + .4byte .LASF526 + .byte 0x5 + .byte 0xaa,0x8 + .4byte .LASF527 + .byte 0x5 + .byte 0xab,0x8 + .4byte .LASF528 + .byte 0x5 + .byte 0xb0,0x8 + .4byte .LASF529 + .byte 0x5 + .byte 0xb1,0x8 + .4byte .LASF530 + .byte 0x5 + .byte 0xb2,0x8 + .4byte .LASF531 + .byte 0x5 + .byte 0xb3,0x8 + .4byte .LASF532 + .byte 0x5 + .byte 0xb4,0x8 + .4byte .LASF533 + .byte 0x5 + .byte 0xb5,0x8 + .4byte .LASF534 + .byte 0x5 + .byte 0xb6,0x8 + .4byte .LASF535 + .byte 0x5 + .byte 0xb7,0x8 + .4byte .LASF536 + .byte 0x5 + .byte 0xb8,0x8 + .4byte .LASF537 + .byte 0x5 + .byte 0xb9,0x8 + .4byte .LASF538 + .byte 0x5 + .byte 0xd0,0x8 + .4byte .LASF539 + .byte 0x5 + .byte 0xf9,0x8 + .4byte .LASF540 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._newlib_version.h.4.875b979a44719054cd750d0952ad3fd6,comdat +.Ldebug_macro7: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x4 + .4byte .LASF546 + .byte 0x5 + .byte 0x6 + .4byte .LASF547 + .byte 0x5 + .byte 0x7 + .4byte .LASF548 + .byte 0x5 + .byte 0x8 + .4byte .LASF549 + .byte 0x5 + .byte 0x9 + .4byte .LASF550 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.newlib.h.18.cf6bb52154a7abac63b0afb962204a67,comdat +.Ldebug_macro8: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x12 + .4byte .LASF551 + .byte 0x5 + .byte 0x15 + .4byte .LASF552 + .byte 0x5 + .byte 0x18 + .4byte .LASF553 + .byte 0x5 + .byte 0x1b + .4byte .LASF554 + .byte 0x5 + .byte 0x28 + .4byte .LASF555 + .byte 0x5 + .byte 0x32 + .4byte .LASF556 + .byte 0x5 + .byte 0x39 + .4byte .LASF557 + .byte 0x5 + .byte 0x3c + .4byte .LASF558 + .byte 0x5 + .byte 0x42 + .4byte .LASF559 + .byte 0x5 + .byte 0x45 + .4byte .LASF560 + .byte 0x5 + .byte 0x48 + .4byte .LASF561 + .byte 0x5 + .byte 0x4b + .4byte .LASF562 + .byte 0x5 + .byte 0x5c + .4byte .LASF563 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ieeefp.h.193.a04996ad6548b0579a40a1f708027f95,comdat +.Ldebug_macro9: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xc1,0x1 + .4byte .LASF565 + .byte 0x5 + .byte 0xc3,0x3 + .4byte .LASF566 + .byte 0x5 + .byte 0xc6,0x3 + .4byte .LASF567 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.features.h.22.fad1cec3bc7ff06488171438dbdcfd02,comdat +.Ldebug_macro10: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x16 + .4byte .LASF568 + .byte 0x5 + .byte 0x21 + .4byte .LASF569 + .byte 0x5 + .byte 0x28 + .4byte .LASF570 + .byte 0x6 + .byte 0x83,0x1 + .4byte .LASF571 + .byte 0x5 + .byte 0x84,0x1 + .4byte .LASF572 + .byte 0x6 + .byte 0x88,0x1 + .4byte .LASF573 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF574 + .byte 0x6 + .byte 0x8a,0x1 + .4byte .LASF575 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF576 + .byte 0x6 + .byte 0x9e,0x1 + .4byte .LASF577 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF578 + .byte 0x5 + .byte 0xf7,0x1 + .4byte .LASF579 + .byte 0x5 + .byte 0xfd,0x1 + .4byte .LASF580 + .byte 0x5 + .byte 0x85,0x2 + .4byte .LASF581 + .byte 0x5 + .byte 0x8a,0x2 + .4byte .LASF582 + .byte 0x5 + .byte 0x95,0x2 + .4byte .LASF583 + .byte 0x5 + .byte 0x99,0x2 + .4byte .LASF584 + .byte 0x5 + .byte 0x9f,0x2 + .4byte .LASF585 + .byte 0x5 + .byte 0xaf,0x2 + .4byte .LASF586 + .byte 0x5 + .byte 0xbf,0x2 + .4byte .LASF587 + .byte 0x5 + .byte 0xca,0x2 + .4byte .LASF588 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.config.h.79.b548f69d9f69fceadec535dc005f68c6,comdat +.Ldebug_macro11: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x4f + .4byte .LASF589 + .byte 0x5 + .byte 0xdc,0x1 + .4byte .LASF590 + .byte 0x6 + .byte 0xe2,0x1 + .4byte .LASF591 + .byte 0x5 + .byte 0xe6,0x1 + .4byte .LASF592 + .byte 0x5 + .byte 0xf6,0x1 + .4byte .LASF593 + .byte 0x5 + .byte 0xfa,0x1 + .4byte .LASF594 + .byte 0x5 + .byte 0x87,0x2 + .4byte .LASF595 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._ansi.h.31.de524f58584151836e90d8620a16f8e8,comdat +.Ldebug_macro12: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x1f + .4byte .LASF596 + .byte 0x5 + .byte 0x20 + .4byte .LASF597 + .byte 0x5 + .byte 0x21 + .4byte .LASF598 + .byte 0x5 + .byte 0x25 + .4byte .LASF599 + .byte 0x5 + .byte 0x2b + .4byte .LASF600 + .byte 0x5 + .byte 0x45 + .4byte .LASF601 + .byte 0x5 + .byte 0x49 + .4byte .LASF602 + .byte 0x5 + .byte 0x4a + .4byte .LASF603 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._default_types.h.6.959254cf5f09734ea7516c89e8bb21bd,comdat +.Ldebug_macro13: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x6 + .4byte .LASF606 + .byte 0x5 + .byte 0xf + .4byte .LASF607 + .byte 0x5 + .byte 0x1a + .4byte .LASF608 + .byte 0x5 + .byte 0x21 + .4byte .LASF609 + .byte 0x5 + .byte 0x2f + .4byte .LASF610 + .byte 0x5 + .byte 0x3d + .4byte .LASF611 + .byte 0x5 + .byte 0x53 + .4byte .LASF612 + .byte 0x5 + .byte 0x6d + .4byte .LASF613 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF614 + .byte 0x5 + .byte 0xa6,0x1 + .4byte .LASF615 + .byte 0x5 + .byte 0xbc,0x1 + .4byte .LASF616 + .byte 0x5 + .byte 0xce,0x1 + .4byte .LASF617 + .byte 0x6 + .byte 0xf4,0x1 + .4byte .LASF618 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.stddef.h.39.a38874c8f8a57e66301090908ec2a69f,comdat +.Ldebug_macro14: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x27 + .4byte .LASF619 + .byte 0x5 + .byte 0x28 + .4byte .LASF620 + .byte 0x5 + .byte 0x2a + .4byte .LASF621 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF622 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF623 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF624 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF625 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF626 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF627 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF628 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF629 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF630 + .byte 0x6 + .byte 0xa1,0x1 + .4byte .LASF631 + .byte 0x5 + .byte 0xbb,0x1 + .4byte .LASF632 + .byte 0x5 + .byte 0xbc,0x1 + .4byte .LASF633 + .byte 0x5 + .byte 0xbd,0x1 + .4byte .LASF634 + .byte 0x5 + .byte 0xbe,0x1 + .4byte .LASF635 + .byte 0x5 + .byte 0xbf,0x1 + .4byte .LASF636 + .byte 0x5 + .byte 0xc0,0x1 + .4byte .LASF637 + .byte 0x5 + .byte 0xc1,0x1 + .4byte .LASF638 + .byte 0x5 + .byte 0xc2,0x1 + .4byte .LASF639 + .byte 0x5 + .byte 0xc3,0x1 + .4byte .LASF640 + .byte 0x5 + .byte 0xc4,0x1 + .4byte .LASF641 + .byte 0x5 + .byte 0xc5,0x1 + .4byte .LASF642 + .byte 0x5 + .byte 0xc6,0x1 + .4byte .LASF643 + .byte 0x5 + .byte 0xc7,0x1 + .4byte .LASF644 + .byte 0x5 + .byte 0xc8,0x1 + .4byte .LASF645 + .byte 0x5 + .byte 0xc9,0x1 + .4byte .LASF646 + .byte 0x5 + .byte 0xca,0x1 + .4byte .LASF647 + .byte 0x5 + .byte 0xd2,0x1 + .4byte .LASF648 + .byte 0x6 + .byte 0xee,0x1 + .4byte .LASF649 + .byte 0x5 + .byte 0x8b,0x2 + .4byte .LASF650 + .byte 0x5 + .byte 0x8c,0x2 + .4byte .LASF651 + .byte 0x5 + .byte 0x8d,0x2 + .4byte .LASF652 + .byte 0x5 + .byte 0x8e,0x2 + .4byte .LASF653 + .byte 0x5 + .byte 0x8f,0x2 + .4byte .LASF654 + .byte 0x5 + .byte 0x90,0x2 + .4byte .LASF655 + .byte 0x5 + .byte 0x91,0x2 + .4byte .LASF656 + .byte 0x5 + .byte 0x92,0x2 + .4byte .LASF657 + .byte 0x5 + .byte 0x93,0x2 + .4byte .LASF658 + .byte 0x5 + .byte 0x94,0x2 + .4byte .LASF659 + .byte 0x5 + .byte 0x95,0x2 + .4byte .LASF660 + .byte 0x5 + .byte 0x96,0x2 + .4byte .LASF661 + .byte 0x5 + .byte 0x97,0x2 + .4byte .LASF662 + .byte 0x5 + .byte 0x98,0x2 + .4byte .LASF663 + .byte 0x5 + .byte 0x99,0x2 + .4byte .LASF664 + .byte 0x6 + .byte 0xa6,0x2 + .4byte .LASF665 + .byte 0x6 + .byte 0xdb,0x2 + .4byte .LASF666 + .byte 0x6 + .byte 0x91,0x3 + .4byte .LASF667 + .byte 0x5 + .byte 0x96,0x3 + .4byte .LASF668 + .byte 0x6 + .byte 0x9c,0x3 + .4byte .LASF669 + .byte 0x5 + .byte 0xa1,0x3 + .4byte .LASF670 + .byte 0x5 + .byte 0xa6,0x3 + .4byte .LASF671 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.cdefs.h.47.9b1aff81ebf9fd459c1248694f70fc96,comdat +.Ldebug_macro15: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x2f + .4byte .LASF672 + .byte 0x5 + .byte 0x30 + .4byte .LASF673 + .byte 0x5 + .byte 0x31 + .4byte .LASF674 + .byte 0x5 + .byte 0x34 + .4byte .LASF675 + .byte 0x5 + .byte 0x37 + .4byte .LASF676 + .byte 0x5 + .byte 0x38 + .4byte .LASF677 + .byte 0x5 + .byte 0x3a + .4byte .LASF678 + .byte 0x5 + .byte 0x3b + .4byte .LASF679 + .byte 0x5 + .byte 0x3c + .4byte .LASF680 + .byte 0x5 + .byte 0x3d + .4byte .LASF681 + .byte 0x5 + .byte 0x40 + .4byte .LASF682 + .byte 0x5 + .byte 0x41 + .4byte .LASF683 + .byte 0x5 + .byte 0x42 + .4byte .LASF684 + .byte 0x5 + .byte 0x4c + .4byte .LASF685 + .byte 0x5 + .byte 0x4f + .4byte .LASF686 + .byte 0x5 + .byte 0x55 + .4byte .LASF687 + .byte 0x5 + .byte 0x5c + .4byte .LASF688 + .byte 0x5 + .byte 0x5d + .4byte .LASF689 + .byte 0x5 + .byte 0x69 + .4byte .LASF690 + .byte 0x5 + .byte 0x6a + .4byte .LASF691 + .byte 0x5 + .byte 0x6e + .4byte .LASF692 + .byte 0x5 + .byte 0x6f + .4byte .LASF693 + .byte 0x5 + .byte 0x70 + .4byte .LASF694 + .byte 0x5 + .byte 0x73 + .4byte .LASF695 + .byte 0x5 + .byte 0x76 + .4byte .LASF696 + .byte 0x5 + .byte 0x7d + .4byte .LASF697 + .byte 0x5 + .byte 0x7e + .4byte .LASF698 + .byte 0x5 + .byte 0x7f + .4byte .LASF699 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF700 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF701 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF702 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF703 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF704 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF705 + .byte 0x5 + .byte 0x96,0x1 + .4byte .LASF706 + .byte 0x5 + .byte 0x97,0x1 + .4byte .LASF707 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF708 + .byte 0x5 + .byte 0x9a,0x1 + .4byte .LASF709 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF710 + .byte 0x5 + .byte 0x9e,0x1 + .4byte .LASF711 + .byte 0x5 + .byte 0xaf,0x1 + .4byte .LASF712 + .byte 0x5 + .byte 0xb0,0x1 + .4byte .LASF713 + .byte 0x5 + .byte 0xb1,0x1 + .4byte .LASF714 + .byte 0x5 + .byte 0xb2,0x1 + .4byte .LASF715 + .byte 0x5 + .byte 0xb3,0x1 + .4byte .LASF716 + .byte 0x5 + .byte 0xb5,0x1 + .4byte .LASF717 + .byte 0x5 + .byte 0xb6,0x1 + .4byte .LASF718 + .byte 0x5 + .byte 0xb7,0x1 + .4byte .LASF719 + .byte 0x5 + .byte 0xef,0x1 + .4byte .LASF720 + .byte 0x5 + .byte 0xfc,0x1 + .4byte .LASF721 + .byte 0x5 + .byte 0xfd,0x1 + .4byte .LASF722 + .byte 0x5 + .byte 0xfe,0x1 + .4byte .LASF723 + .byte 0x5 + .byte 0xff,0x1 + .4byte .LASF724 + .byte 0x5 + .byte 0x80,0x2 + .4byte .LASF725 + .byte 0x5 + .byte 0x81,0x2 + .4byte .LASF726 + .byte 0x5 + .byte 0x82,0x2 + .4byte .LASF727 + .byte 0x5 + .byte 0x85,0x2 + .4byte .LASF728 + .byte 0x5 + .byte 0x8a,0x2 + .4byte .LASF729 + .byte 0x5 + .byte 0xe4,0x2 + .4byte .LASF730 + .byte 0x5 + .byte 0xf6,0x2 + .4byte .LASF731 + .byte 0x5 + .byte 0xfc,0x2 + .4byte .LASF732 + .byte 0x5 + .byte 0xfd,0x2 + .4byte .LASF733 + .byte 0x5 + .byte 0x84,0x3 + .4byte .LASF734 + .byte 0x5 + .byte 0x8a,0x3 + .4byte .LASF735 + .byte 0x5 + .byte 0x90,0x3 + .4byte .LASF736 + .byte 0x5 + .byte 0x91,0x3 + .4byte .LASF737 + .byte 0x5 + .byte 0x98,0x3 + .4byte .LASF738 + .byte 0x5 + .byte 0x99,0x3 + .4byte .LASF739 + .byte 0x5 + .byte 0xa0,0x3 + .4byte .LASF740 + .byte 0x5 + .byte 0xa6,0x3 + .4byte .LASF741 + .byte 0x5 + .byte 0xba,0x3 + .4byte .LASF742 + .byte 0x5 + .byte 0xdb,0x3 + .4byte .LASF743 + .byte 0x5 + .byte 0xdc,0x3 + .4byte .LASF744 + .byte 0x5 + .byte 0xe3,0x3 + .4byte .LASF745 + .byte 0x5 + .byte 0xe4,0x3 + .4byte .LASF746 + .byte 0x5 + .byte 0xe7,0x3 + .4byte .LASF747 + .byte 0x5 + .byte 0xf1,0x3 + .4byte .LASF748 + .byte 0x5 + .byte 0xf2,0x3 + .4byte .LASF749 + .byte 0x5 + .byte 0xfc,0x3 + .4byte .LASF750 + .byte 0x5 + .byte 0x92,0x4 + .4byte .LASF751 + .byte 0x5 + .byte 0x94,0x4 + .4byte .LASF752 + .byte 0x5 + .byte 0x96,0x4 + .4byte .LASF753 + .byte 0x5 + .byte 0x97,0x4 + .4byte .LASF754 + .byte 0x5 + .byte 0x99,0x4 + .4byte .LASF755 + .byte 0x5 + .byte 0xa3,0x4 + .4byte .LASF756 + .byte 0x5 + .byte 0xa8,0x4 + .4byte .LASF757 + .byte 0x5 + .byte 0xad,0x4 + .4byte .LASF758 + .byte 0x5 + .byte 0xb0,0x4 + .4byte .LASF759 + .byte 0x5 + .byte 0xb4,0x4 + .4byte .LASF760 + .byte 0x5 + .byte 0xb6,0x4 + .4byte .LASF761 + .byte 0x5 + .byte 0xd9,0x4 + .4byte .LASF762 + .byte 0x5 + .byte 0xdd,0x4 + .4byte .LASF763 + .byte 0x5 + .byte 0xe1,0x4 + .4byte .LASF764 + .byte 0x5 + .byte 0xe5,0x4 + .4byte .LASF765 + .byte 0x5 + .byte 0xe9,0x4 + .4byte .LASF766 + .byte 0x5 + .byte 0xed,0x4 + .4byte .LASF767 + .byte 0x5 + .byte 0xf1,0x4 + .4byte .LASF768 + .byte 0x5 + .byte 0xf5,0x4 + .4byte .LASF769 + .byte 0x5 + .byte 0xfc,0x4 + .4byte .LASF770 + .byte 0x5 + .byte 0xfd,0x4 + .4byte .LASF771 + .byte 0x5 + .byte 0xfe,0x4 + .4byte .LASF772 + .byte 0x5 + .byte 0xff,0x4 + .4byte .LASF773 + .byte 0x5 + .byte 0x80,0x5 + .4byte .LASF774 + .byte 0x5 + .byte 0x95,0x5 + .4byte .LASF775 + .byte 0x5 + .byte 0x96,0x5 + .4byte .LASF776 + .byte 0x5 + .byte 0xa8,0x5 + .4byte .LASF777 + .byte 0x5 + .byte 0xae,0x5 + .4byte .LASF778 + .byte 0x5 + .byte 0xb1,0x5 + .4byte .LASF779 + .byte 0x5 + .byte 0xb3,0x5 + .4byte .LASF780 + .byte 0x5 + .byte 0xb7,0x5 + .4byte .LASF781 + .byte 0x5 + .byte 0xb9,0x5 + .4byte .LASF782 + .byte 0x5 + .byte 0xbd,0x5 + .4byte .LASF783 + .byte 0x5 + .byte 0xc0,0x5 + .4byte .LASF784 + .byte 0x5 + .byte 0xc2,0x5 + .4byte .LASF785 + .byte 0x5 + .byte 0xc6,0x5 + .4byte .LASF786 + .byte 0x5 + .byte 0xc8,0x5 + .4byte .LASF787 + .byte 0x5 + .byte 0xca,0x5 + .4byte .LASF788 + .byte 0x5 + .byte 0xce,0x5 + .4byte .LASF789 + .byte 0x5 + .byte 0xd1,0x5 + .4byte .LASF790 + .byte 0x5 + .byte 0xd2,0x5 + .4byte .LASF791 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.lock.h.2.1461d1fff82dffe8bfddc23307f6484f,comdat +.Ldebug_macro16: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x2 + .4byte .LASF795 + .byte 0x5 + .byte 0x23 + .4byte .LASF796 + .byte 0x5 + .byte 0x25 + .4byte .LASF797 + .byte 0x5 + .byte 0x27 + .4byte .LASF798 + .byte 0x5 + .byte 0x2a + .4byte .LASF799 + .byte 0x5 + .byte 0x2c + .4byte .LASF800 + .byte 0x5 + .byte 0x2e + .4byte .LASF801 + .byte 0x5 + .byte 0x30 + .4byte .LASF802 + .byte 0x5 + .byte 0x32 + .4byte .LASF803 + .byte 0x5 + .byte 0x34 + .4byte .LASF804 + .byte 0x5 + .byte 0x36 + .4byte .LASF805 + .byte 0x5 + .byte 0x38 + .4byte .LASF806 + .byte 0x5 + .byte 0x3b + .4byte .LASF807 + .byte 0x5 + .byte 0x3d + .4byte .LASF808 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._types.h.125.5cf8a495f1f7ef36777ad868a1e32068,comdat +.Ldebug_macro17: + .2byte 0x4 + .byte 0 + .byte 0x6 + .byte 0x7d + .4byte .LASF809 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF810 + .byte 0x6 + .byte 0x92,0x1 + .4byte .LASF811 + .byte 0x5 + .byte 0x9e,0x1 + .4byte .LASF812 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.stddef.h.161.5349cb105733e8777bfb0cf53c4e3f34,comdat +.Ldebug_macro18: + .2byte 0x4 + .byte 0 + .byte 0x6 + .byte 0xa1,0x1 + .4byte .LASF631 + .byte 0x6 + .byte 0xee,0x1 + .4byte .LASF649 + .byte 0x6 + .byte 0xdb,0x2 + .4byte .LASF666 + .byte 0x5 + .byte 0xe0,0x2 + .4byte .LASF813 + .byte 0x6 + .byte 0xe7,0x2 + .4byte .LASF814 + .byte 0x6 + .byte 0x91,0x3 + .4byte .LASF667 + .byte 0x5 + .byte 0x96,0x3 + .4byte .LASF668 + .byte 0x6 + .byte 0x9c,0x3 + .4byte .LASF669 + .byte 0x5 + .byte 0xa1,0x3 + .4byte .LASF670 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._types.h.184.7120b8bb2e0149e2359704f4e2251b68,comdat +.Ldebug_macro19: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xb8,0x1 + .4byte .LASF815 + .byte 0x5 + .byte 0xc0,0x1 + .4byte .LASF816 + .byte 0x5 + .byte 0xc4,0x1 + .4byte .LASF817 + .byte 0x5 + .byte 0xc7,0x1 + .4byte .LASF818 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.reent.h.17.87376802c2b370b32a762f0a30482d9e,comdat +.Ldebug_macro20: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x11 + .4byte .LASF819 + .byte 0x5 + .byte 0x15 + .4byte .LASF820 + .byte 0x5 + .byte 0x48 + .4byte .LASF821 + .byte 0x5 + .byte 0x64 + .4byte .LASF822 + .byte 0x5 + .byte 0x6a + .4byte .LASF823 + .byte 0x5 + .byte 0xb2,0x1 + .4byte .LASF824 + .byte 0x5 + .byte 0xb8,0x2 + .4byte .LASF825 + .byte 0x5 + .byte 0xb9,0x2 + .4byte .LASF826 + .byte 0x5 + .byte 0xba,0x2 + .4byte .LASF827 + .byte 0x5 + .byte 0xbb,0x2 + .4byte .LASF828 + .byte 0x5 + .byte 0xbc,0x2 + .4byte .LASF829 + .byte 0x5 + .byte 0xbd,0x2 + .4byte .LASF830 + .byte 0x5 + .byte 0xbe,0x2 + .4byte .LASF831 + .byte 0x5 + .byte 0xca,0x2 + .4byte .LASF832 + .byte 0x5 + .byte 0xcb,0x2 + .4byte .LASF833 + .byte 0x5 + .byte 0xcc,0x2 + .4byte .LASF834 + .byte 0x5 + .byte 0xf4,0x4 + .4byte .LASF835 + .byte 0x5 + .byte 0x90,0x5 + .4byte .LASF836 + .byte 0x5 + .byte 0x93,0x5 + .4byte .LASF837 + .byte 0x5 + .byte 0xc3,0x5 + .4byte .LASF838 + .byte 0x5 + .byte 0xd1,0x5 + .4byte .LASF839 + .byte 0x5 + .byte 0xd2,0x5 + .4byte .LASF840 + .byte 0x5 + .byte 0xd3,0x5 + .4byte .LASF841 + .byte 0x5 + .byte 0xd4,0x5 + .4byte .LASF842 + .byte 0x5 + .byte 0xd5,0x5 + .4byte .LASF843 + .byte 0x5 + .byte 0xd6,0x5 + .4byte .LASF844 + .byte 0x5 + .byte 0xd7,0x5 + .4byte .LASF845 + .byte 0x5 + .byte 0xd9,0x5 + .4byte .LASF846 + .byte 0x5 + .byte 0xda,0x5 + .4byte .LASF847 + .byte 0x5 + .byte 0xdb,0x5 + .4byte .LASF848 + .byte 0x5 + .byte 0xdc,0x5 + .4byte .LASF849 + .byte 0x5 + .byte 0xdd,0x5 + .4byte .LASF850 + .byte 0x5 + .byte 0xde,0x5 + .4byte .LASF851 + .byte 0x5 + .byte 0xdf,0x5 + .4byte .LASF852 + .byte 0x5 + .byte 0xe0,0x5 + .4byte .LASF853 + .byte 0x5 + .byte 0xe1,0x5 + .4byte .LASF854 + .byte 0x5 + .byte 0xe2,0x5 + .4byte .LASF855 + .byte 0x5 + .byte 0xe3,0x5 + .4byte .LASF856 + .byte 0x5 + .byte 0xe4,0x5 + .4byte .LASF857 + .byte 0x5 + .byte 0xe5,0x5 + .4byte .LASF858 + .byte 0x5 + .byte 0xe6,0x5 + .4byte .LASF859 + .byte 0x5 + .byte 0xe7,0x5 + .4byte .LASF860 + .byte 0x5 + .byte 0xe8,0x5 + .4byte .LASF861 + .byte 0x5 + .byte 0xe9,0x5 + .4byte .LASF862 + .byte 0x5 + .byte 0xea,0x5 + .4byte .LASF863 + .byte 0x5 + .byte 0xeb,0x5 + .4byte .LASF864 + .byte 0x5 + .byte 0xec,0x5 + .4byte .LASF865 + .byte 0x5 + .byte 0xed,0x5 + .4byte .LASF866 + .byte 0x5 + .byte 0xee,0x5 + .4byte .LASF867 + .byte 0x5 + .byte 0xef,0x5 + .4byte .LASF868 + .byte 0x5 + .byte 0xf0,0x5 + .4byte .LASF869 + .byte 0x5 + .byte 0xf4,0x5 + .4byte .LASF870 + .byte 0x5 + .byte 0xfc,0x5 + .4byte .LASF871 + .byte 0x5 + .byte 0x84,0x6 + .4byte .LASF872 + .byte 0x5 + .byte 0x94,0x6 + .4byte .LASF873 + .byte 0x5 + .byte 0x97,0x6 + .4byte .LASF874 + .byte 0x5 + .byte 0x9d,0x6 + .4byte .LASF875 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.time.h.14.849270cc7997ccc4e05edd146e568a9f,comdat +.Ldebug_macro21: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xe + .4byte .LASF876 + .byte 0x5 + .byte 0xf + .4byte .LASF877 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.stddef.h.161.19e15733342b50ead2919490b095303e,comdat +.Ldebug_macro22: + .2byte 0x4 + .byte 0 + .byte 0x6 + .byte 0xa1,0x1 + .4byte .LASF631 + .byte 0x6 + .byte 0xee,0x1 + .4byte .LASF649 + .byte 0x6 + .byte 0xdb,0x2 + .4byte .LASF666 + .byte 0x6 + .byte 0x91,0x3 + .4byte .LASF667 + .byte 0x5 + .byte 0x96,0x3 + .4byte .LASF668 + .byte 0x6 + .byte 0x9c,0x3 + .4byte .LASF669 + .byte 0x5 + .byte 0xa1,0x3 + .4byte .LASF670 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.time.h.2.9d540cbcaa36ddf778595c54454700d0,comdat +.Ldebug_macro23: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x2 + .4byte .LASF878 + .byte 0x5 + .byte 0x5 + .4byte .LASF879 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.time.h.25.0e6a0fdbc9955f5707ed54246ed2e089,comdat +.Ldebug_macro24: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x19 + .4byte .LASF880 + .byte 0x5 + .byte 0x1a + .4byte .LASF881 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.types.h.40.e8c16e7ec36ba55f133d0616070e25fc,comdat +.Ldebug_macro25: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x28 + .4byte .LASF882 + .byte 0x5 + .byte 0x3c + .4byte .LASF883 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._stdint.h.10.c24fa3af3bc1706662bb5593a907e841,comdat +.Ldebug_macro26: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF884 + .byte 0x5 + .byte 0x15 + .4byte .LASF885 + .byte 0x5 + .byte 0x19 + .4byte .LASF886 + .byte 0x5 + .byte 0x1b + .4byte .LASF887 + .byte 0x5 + .byte 0x21 + .4byte .LASF888 + .byte 0x5 + .byte 0x25 + .4byte .LASF889 + .byte 0x5 + .byte 0x27 + .4byte .LASF890 + .byte 0x5 + .byte 0x2d + .4byte .LASF891 + .byte 0x5 + .byte 0x31 + .4byte .LASF892 + .byte 0x5 + .byte 0x33 + .4byte .LASF893 + .byte 0x5 + .byte 0x39 + .4byte .LASF894 + .byte 0x5 + .byte 0x3d + .4byte .LASF895 + .byte 0x5 + .byte 0x3f + .4byte .LASF896 + .byte 0x5 + .byte 0x44 + .4byte .LASF897 + .byte 0x5 + .byte 0x49 + .4byte .LASF898 + .byte 0x5 + .byte 0x4e + .4byte .LASF899 + .byte 0x5 + .byte 0x53 + .4byte .LASF900 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._endian.h.18.1bf9649e8e5bbc91042012680270b9ed,comdat +.Ldebug_macro27: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x12 + .4byte .LASF902 + .byte 0x5 + .byte 0x16 + .4byte .LASF903 + .byte 0x5 + .byte 0x1a + .4byte .LASF904 + .byte 0x5 + .byte 0x1f + .4byte .LASF905 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.endian.h.9.49f3a4695c1b61e8a0808de3c4a106cb,comdat +.Ldebug_macro28: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x9 + .4byte .LASF906 + .byte 0x5 + .byte 0xa + .4byte .LASF907 + .byte 0x5 + .byte 0x11 + .4byte .LASF908 + .byte 0x5 + .byte 0x12 + .4byte .LASF909 + .byte 0x5 + .byte 0x13 + .4byte .LASF910 + .byte 0x5 + .byte 0x14 + .4byte .LASF911 + .byte 0x5 + .byte 0x18 + .4byte .LASF912 + .byte 0x5 + .byte 0x19 + .4byte .LASF913 + .byte 0x5 + .byte 0x1a + .4byte .LASF914 + .byte 0x5 + .byte 0x39 + .4byte .LASF915 + .byte 0x5 + .byte 0x3a + .4byte .LASF916 + .byte 0x5 + .byte 0x3b + .4byte .LASF917 + .byte 0x5 + .byte 0x3c + .4byte .LASF918 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.select.h.18.89b21a74807f312d67c258937864b65e,comdat +.Ldebug_macro29: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x12 + .4byte .LASF920 + .byte 0x5 + .byte 0x1c + .4byte .LASF921 + .byte 0x5 + .byte 0x20 + .4byte .LASF922 + .byte 0x5 + .byte 0x22 + .4byte .LASF923 + .byte 0x5 + .byte 0x29 + .4byte .LASF924 + .byte 0x5 + .byte 0x2b + .4byte .LASF925 + .byte 0x5 + .byte 0x2c + .4byte .LASF926 + .byte 0x5 + .byte 0x2d + .4byte .LASF927 + .byte 0x5 + .byte 0x2e + .4byte .LASF928 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.types.h.69.d3b0cd6975c34dc3e23d2962530677c9,comdat +.Ldebug_macro30: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x45 + .4byte .LASF929 + .byte 0x5 + .byte 0x46 + .4byte .LASF930 + .byte 0x5 + .byte 0x4a + .4byte .LASF931 + .byte 0x5 + .byte 0x4f + .4byte .LASF932 + .byte 0x5 + .byte 0x58 + .4byte .LASF933 + .byte 0x5 + .byte 0x5c + .4byte .LASF934 + .byte 0x5 + .byte 0x60 + .4byte .LASF935 + .byte 0x5 + .byte 0x64 + .4byte .LASF936 + .byte 0x5 + .byte 0x66 + .4byte .LASF937 + .byte 0x5 + .byte 0x72 + .4byte .LASF938 + .byte 0x5 + .byte 0x77 + .4byte .LASF939 + .byte 0x5 + .byte 0x7c + .4byte .LASF940 + .byte 0x5 + .byte 0x7d + .4byte .LASF941 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF942 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF943 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF944 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF945 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF946 + .byte 0x5 + .byte 0x97,0x1 + .4byte .LASF947 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF948 + .byte 0x5 + .byte 0xae,0x1 + .4byte .LASF949 + .byte 0x5 + .byte 0xb2,0x1 + .4byte .LASF950 + .byte 0x5 + .byte 0xb6,0x1 + .4byte .LASF951 + .byte 0x5 + .byte 0xba,0x1 + .4byte .LASF952 + .byte 0x5 + .byte 0xbf,0x1 + .4byte .LASF953 + .byte 0x5 + .byte 0xc4,0x1 + .4byte .LASF954 + .byte 0x5 + .byte 0xc9,0x1 + .4byte .LASF955 + .byte 0x5 + .byte 0xce,0x1 + .4byte .LASF956 + .byte 0x5 + .byte 0xd3,0x1 + .4byte .LASF957 + .byte 0x5 + .byte 0xd8,0x1 + .4byte .LASF958 + .byte 0x5 + .byte 0xd9,0x1 + .4byte .LASF959 + .byte 0x5 + .byte 0xde,0x1 + .4byte .LASF960 + .byte 0x5 + .byte 0xdf,0x1 + .4byte .LASF961 + .byte 0x5 + .byte 0xe4,0x1 + .4byte .LASF962 + .byte 0x5 + .byte 0xe9,0x1 + .4byte .LASF963 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.sched.h.35.8f42b8357f4bf2835afd7fed4664ad96,comdat +.Ldebug_macro31: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x23 + .4byte .LASF967 + .byte 0x5 + .byte 0x26 + .4byte .LASF968 + .byte 0x5 + .byte 0x27 + .4byte .LASF969 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._pthreadtypes.h.36.fcee9961c35163dde6267ef772ad1972,comdat +.Ldebug_macro32: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x24 + .4byte .LASF970 + .byte 0x5 + .byte 0x25 + .4byte .LASF971 + .byte 0x5 + .byte 0x28 + .4byte .LASF972 + .byte 0x5 + .byte 0x2b + .4byte .LASF973 + .byte 0x5 + .byte 0x2e + .4byte .LASF974 + .byte 0x5 + .byte 0x2f + .4byte .LASF975 + .byte 0x5 + .byte 0xac,0x1 + .4byte .LASF976 + .byte 0x5 + .byte 0xb2,0x1 + .4byte .LASF977 + .byte 0x5 + .byte 0xc5,0x1 + .4byte .LASF978 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.timespec.h.35.9908f77afd502918e33d6f1534fa5ba4,comdat +.Ldebug_macro33: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x23 + .4byte .LASF980 + .byte 0x5 + .byte 0x29 + .4byte .LASF981 + .byte 0x5 + .byte 0x2e + .4byte .LASF982 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.time.h.162.117026b75cfaa0f83901a5f301a8b4f7,comdat +.Ldebug_macro34: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa2,0x1 + .4byte .LASF984 + .byte 0x5 + .byte 0xf0,0x1 + .4byte .LASF985 + .byte 0x5 + .byte 0xf1,0x1 + .4byte .LASF986 + .byte 0x5 + .byte 0xf5,0x1 + .4byte .LASF987 + .byte 0x5 + .byte 0xf8,0x1 + .4byte .LASF988 + .byte 0x5 + .byte 0xfe,0x1 + .4byte .LASF989 + .byte 0x5 + .byte 0x83,0x2 + .4byte .LASF990 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.stat.h.71.d65ac61ff88c651e198008cfb38bda9c,comdat +.Ldebug_macro35: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x47 + .4byte .LASF991 + .byte 0x5 + .byte 0x48 + .4byte .LASF992 + .byte 0x5 + .byte 0x49 + .4byte .LASF993 + .byte 0x5 + .byte 0x4a + .4byte .LASF994 + .byte 0x5 + .byte 0x4b + .4byte .LASF995 + .byte 0x5 + .byte 0x4c + .4byte .LASF996 + .byte 0x5 + .byte 0x4d + .4byte .LASF997 + .byte 0x5 + .byte 0x4e + .4byte .LASF998 + .byte 0x5 + .byte 0x50 + .4byte .LASF999 + .byte 0x5 + .byte 0x52 + .4byte .LASF1000 + .byte 0x5 + .byte 0x53 + .4byte .LASF1001 + .byte 0x5 + .byte 0x54 + .4byte .LASF1002 + .byte 0x5 + .byte 0x56 + .4byte .LASF1003 + .byte 0x5 + .byte 0x57 + .4byte .LASF1004 + .byte 0x5 + .byte 0x58 + .4byte .LASF1005 + .byte 0x5 + .byte 0x59 + .4byte .LASF1006 + .byte 0x5 + .byte 0x5c + .4byte .LASF1007 + .byte 0x5 + .byte 0x5d + .4byte .LASF1008 + .byte 0x5 + .byte 0x5e + .4byte .LASF1009 + .byte 0x5 + .byte 0x5f + .4byte .LASF1010 + .byte 0x5 + .byte 0x60 + .4byte .LASF1011 + .byte 0x5 + .byte 0x61 + .4byte .LASF1012 + .byte 0x5 + .byte 0x62 + .4byte .LASF1013 + .byte 0x5 + .byte 0x63 + .4byte .LASF1014 + .byte 0x5 + .byte 0x72 + .4byte .LASF1015 + .byte 0x5 + .byte 0x73 + .4byte .LASF1016 + .byte 0x5 + .byte 0x74 + .4byte .LASF1017 + .byte 0x5 + .byte 0x75 + .4byte .LASF1018 + .byte 0x5 + .byte 0x76 + .4byte .LASF1019 + .byte 0x5 + .byte 0x77 + .4byte .LASF1020 + .byte 0x5 + .byte 0x78 + .4byte .LASF1021 + .byte 0x5 + .byte 0x79 + .4byte .LASF1022 + .byte 0x5 + .byte 0x7a + .4byte .LASF1023 + .byte 0x5 + .byte 0x7b + .4byte .LASF1024 + .byte 0x5 + .byte 0x7c + .4byte .LASF1025 + .byte 0x5 + .byte 0x7d + .4byte .LASF1026 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF1027 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF1028 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF1029 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF1030 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF1031 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF1032 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF1033 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF1034 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF1035 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF1036 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._default_fcntl.h.6.6460bee906b14bf62388713178ece422,comdat +.Ldebug_macro36: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x6 + .4byte .LASF1039 + .byte 0x5 + .byte 0x9 + .4byte .LASF1040 + .byte 0x5 + .byte 0xa + .4byte .LASF1041 + .byte 0x5 + .byte 0xb + .4byte .LASF1042 + .byte 0x5 + .byte 0xc + .4byte .LASF1043 + .byte 0x5 + .byte 0xd + .4byte .LASF1044 + .byte 0x5 + .byte 0xe + .4byte .LASF1045 + .byte 0x5 + .byte 0xf + .4byte .LASF1046 + .byte 0x5 + .byte 0x10 + .4byte .LASF1047 + .byte 0x5 + .byte 0x11 + .4byte .LASF1048 + .byte 0x5 + .byte 0x12 + .4byte .LASF1049 + .byte 0x5 + .byte 0x13 + .4byte .LASF1050 + .byte 0x5 + .byte 0x14 + .4byte .LASF1051 + .byte 0x5 + .byte 0x15 + .4byte .LASF1052 + .byte 0x5 + .byte 0x16 + .4byte .LASF1053 + .byte 0x5 + .byte 0x17 + .4byte .LASF1054 + .byte 0x5 + .byte 0x18 + .4byte .LASF1055 + .byte 0x5 + .byte 0x19 + .4byte .LASF1056 + .byte 0x5 + .byte 0x1b + .4byte .LASF1057 + .byte 0x5 + .byte 0x22 + .4byte .LASF1058 + .byte 0x5 + .byte 0x23 + .4byte .LASF1059 + .byte 0x5 + .byte 0x24 + .4byte .LASF1060 + .byte 0x5 + .byte 0x25 + .4byte .LASF1061 + .byte 0x5 + .byte 0x26 + .4byte .LASF1062 + .byte 0x5 + .byte 0x27 + .4byte .LASF1063 + .byte 0x5 + .byte 0x28 + .4byte .LASF1064 + .byte 0x5 + .byte 0x29 + .4byte .LASF1065 + .byte 0x5 + .byte 0x2c + .4byte .LASF1066 + .byte 0x5 + .byte 0x2d + .4byte .LASF1067 + .byte 0x5 + .byte 0x55 + .4byte .LASF1068 + .byte 0x5 + .byte 0x56 + .4byte .LASF1069 + .byte 0x5 + .byte 0x57 + .4byte .LASF1070 + .byte 0x5 + .byte 0x58 + .4byte .LASF1071 + .byte 0x5 + .byte 0x59 + .4byte .LASF1072 + .byte 0x5 + .byte 0x5a + .4byte .LASF1073 + .byte 0x5 + .byte 0x60 + .4byte .LASF1074 + .byte 0x5 + .byte 0x61 + .4byte .LASF1075 + .byte 0x5 + .byte 0x62 + .4byte .LASF1076 + .byte 0x5 + .byte 0x63 + .4byte .LASF1077 + .byte 0x5 + .byte 0x64 + .4byte .LASF1078 + .byte 0x5 + .byte 0x65 + .4byte .LASF1079 + .byte 0x5 + .byte 0x6a + .4byte .LASF1080 + .byte 0x5 + .byte 0x6b + .4byte .LASF1081 + .byte 0x5 + .byte 0x6c + .4byte .LASF1082 + .byte 0x5 + .byte 0x6d + .4byte .LASF1083 + .byte 0x5 + .byte 0x6e + .4byte .LASF1084 + .byte 0x5 + .byte 0x73 + .4byte .LASF1085 + .byte 0x5 + .byte 0x77 + .4byte .LASF1086 + .byte 0x5 + .byte 0x7a + .4byte .LASF1087 + .byte 0x5 + .byte 0x7b + .4byte .LASF1088 + .byte 0x5 + .byte 0x7c + .4byte .LASF1089 + .byte 0x5 + .byte 0x7d + .4byte .LASF1090 + .byte 0x5 + .byte 0x7e + .4byte .LASF1091 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF1092 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF1093 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF1094 + .byte 0x5 + .byte 0x84,0x1 + .4byte .LASF1095 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF1096 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF1097 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF1098 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF1099 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF1100 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF1101 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF1102 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF1103 + .byte 0x5 + .byte 0x93,0x1 + .4byte .LASF1104 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF1105 + .byte 0x5 + .byte 0x9a,0x1 + .4byte .LASF1106 + .byte 0x5 + .byte 0x9d,0x1 + .4byte .LASF1107 + .byte 0x5 + .byte 0x9e,0x1 + .4byte .LASF1108 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF1109 + .byte 0x5 + .byte 0xa0,0x1 + .4byte .LASF1110 + .byte 0x5 + .byte 0xa5,0x1 + .4byte .LASF1111 + .byte 0x5 + .byte 0xa6,0x1 + .4byte .LASF1112 + .byte 0x5 + .byte 0xa7,0x1 + .4byte .LASF1113 + .byte 0x5 + .byte 0xa8,0x1 + .4byte .LASF1114 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.libc_fcntl.h.34.18223a593be305562b8722909621075c,comdat +.Ldebug_macro37: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x22 + .4byte .LASF1115 + .byte 0x5 + .byte 0x29 + .4byte .LASF1116 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.libc_dirent.h.11.9dbc08f41ca19a04da2a314311f8cc8a,comdat +.Ldebug_macro38: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xb + .4byte .LASF1117 + .byte 0x5 + .byte 0xd + .4byte .LASF1118 + .byte 0x5 + .byte 0xe + .4byte .LASF1119 + .byte 0x5 + .byte 0xf + .4byte .LASF1120 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.rtservice.h.17.23d37154bec68b3e84c125ac41e02a68,comdat +.Ldebug_macro39: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x11 + .4byte .LASF1121 + .byte 0x5 + .byte 0x21 + .4byte .LASF1122 + .byte 0x5 + .byte 0x28 + .4byte .LASF1123 + .byte 0x5 + .byte 0x7e + .4byte .LASF1124 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF1125 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF1126 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF1127 + .byte 0x5 + .byte 0xa5,0x1 + .4byte .LASF1128 + .byte 0x5 + .byte 0xb3,0x1 + .4byte .LASF1129 + .byte 0x5 + .byte 0xb6,0x1 + .4byte .LASF1130 + .byte 0x5 + .byte 0x89,0x2 + .4byte .LASF1131 + .byte 0x5 + .byte 0x91,0x2 + .4byte .LASF1132 + .byte 0x5 + .byte 0x9a,0x2 + .4byte .LASF1133 + .byte 0x5 + .byte 0xa7,0x2 + .4byte .LASF1134 + .byte 0x5 + .byte 0xb2,0x2 + .4byte .LASF1135 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.rtthread.h.416.d9a3aab12b6e209a996b297b6e4d6368,comdat +.Ldebug_macro40: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa0,0x3 + .4byte .LASF1138 + .byte 0x5 + .byte 0xa1,0x3 + .4byte .LASF1139 + .byte 0x5 + .byte 0xa2,0x3 + .4byte .LASF1140 + .byte 0x5 + .byte 0xa3,0x3 + .4byte .LASF1141 + .byte 0x5 + .byte 0xa4,0x3 + .4byte .LASF1142 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.finsh_api.h.11.dc04b4bb03a761b5358c3ecbeeaae9d0,comdat +.Ldebug_macro41: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xb + .4byte .LASF1143 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF1144 + .byte 0x5 + .byte 0xa4,0x1 + .4byte .LASF1145 + .byte 0x5 + .byte 0xb9,0x1 + .4byte .LASF1146 + .byte 0x5 + .byte 0xc5,0x1 + .4byte .LASF1147 + .byte 0x5 + .byte 0xd1,0x1 + .4byte .LASF1148 + .byte 0x5 + .byte 0xd3,0x1 + .4byte .LASF1149 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.rthw.h.30.3bd28c3a13f5a1ac35b73066b4b0fe68,comdat +.Ldebug_macro42: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x1e + .4byte .LASF1150 + .byte 0x5 + .byte 0x21 + .4byte .LASF1151 + .byte 0x5 + .byte 0x24 + .4byte .LASF1152 + .byte 0x5 + .byte 0x28 + .4byte .LASF1153 + .byte 0x5 + .byte 0xb8,0x1 + .4byte .LASF1154 + .byte 0x5 + .byte 0xb9,0x1 + .4byte .LASF1155 + .byte 0x5 + .byte 0xbb,0x1 + .4byte .LASF1156 + .byte 0x5 + .byte 0xbc,0x1 + .4byte .LASF1157 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.cpuport.h.12.4bb6d4411103d12353a8a8463a3af165,comdat +.Ldebug_macro43: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xc + .4byte .LASF1158 + .byte 0x5 + .byte 0x16 + .4byte .LASF1159 + .byte 0x5 + .byte 0x17 + .4byte .LASF1160 + .byte 0x5 + .byte 0x18 + .4byte .LASF1161 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x.h.9.f3610063a5ae00580679f03c4273d096,comdat +.Ldebug_macro44: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x9 + .4byte .LASF1162 + .byte 0x5 + .byte 0xf + .4byte .LASF1163 + .byte 0x5 + .byte 0x10 + .4byte .LASF1164 + .byte 0x5 + .byte 0x12 + .4byte .LASF1165 + .byte 0x5 + .byte 0x15 + .4byte .LASF1166 + .byte 0x5 + .byte 0x17 + .4byte .LASF1167 + .byte 0x5 + .byte 0x4e + .4byte .LASF1168 + .byte 0x5 + .byte 0x4f + .4byte .LASF1169 + .byte 0 + .section .debug_macro,"G",@progbits,wm4._intsup.h.10.cce27fed8484c08a33f522034c30d2b5,comdat +.Ldebug_macro45: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF1171 + .byte 0x5 + .byte 0x10 + .4byte .LASF1172 + .byte 0x6 + .byte 0x2a + .4byte .LASF1173 + .byte 0x6 + .byte 0x2b + .4byte .LASF811 + .byte 0x6 + .byte 0x2c + .4byte .LASF1174 + .byte 0x6 + .byte 0x2d + .4byte .LASF1175 + .byte 0x2 + .byte 0x2e + .string "int" + .byte 0x6 + .byte 0x2f + .4byte .LASF1176 + .byte 0x6 + .byte 0x30 + .4byte .LASF1177 + .byte 0x5 + .byte 0x31 + .4byte .LASF1178 + .byte 0x5 + .byte 0x32 + .4byte .LASF1179 + .byte 0x5 + .byte 0x33 + .4byte .LASF1180 + .byte 0x5 + .byte 0x34 + .4byte .LASF1181 + .byte 0x5 + .byte 0x35 + .4byte .LASF1182 + .byte 0x5 + .byte 0x36 + .4byte .LASF1183 + .byte 0x5 + .byte 0x37 + .4byte .LASF1184 + .byte 0x5 + .byte 0x40 + .4byte .LASF1185 + .byte 0x5 + .byte 0x47 + .4byte .LASF1186 + .byte 0x5 + .byte 0x4f + .4byte .LASF1187 + .byte 0x5 + .byte 0x5a + .4byte .LASF1188 + .byte 0x5 + .byte 0x65 + .4byte .LASF1189 + .byte 0x5 + .byte 0x6e + .4byte .LASF1190 + .byte 0x5 + .byte 0x75 + .4byte .LASF1191 + .byte 0x5 + .byte 0x7e + .4byte .LASF1192 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF1193 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF1194 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF1195 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF1196 + .byte 0x5 + .byte 0xaa,0x1 + .4byte .LASF1197 + .byte 0x5 + .byte 0xb3,0x1 + .4byte .LASF1198 + .byte 0x6 + .byte 0xb5,0x1 + .4byte .LASF1173 + .byte 0x6 + .byte 0xb6,0x1 + .4byte .LASF811 + .byte 0x6 + .byte 0xb7,0x1 + .4byte .LASF1174 + .byte 0x6 + .byte 0xb8,0x1 + .4byte .LASF1175 + .byte 0x2 + .byte 0xb9,0x1 + .string "int" + .byte 0x6 + .byte 0xba,0x1 + .4byte .LASF1177 + .byte 0x6 + .byte 0xbf,0x1 + .4byte .LASF1176 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.stdint.h.23.d53047a68f4a85177f80b422d52785ed,comdat +.Ldebug_macro46: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x17 + .4byte .LASF1199 + .byte 0x5 + .byte 0x1d + .4byte .LASF1200 + .byte 0x5 + .byte 0x23 + .4byte .LASF1201 + .byte 0x5 + .byte 0x29 + .4byte .LASF1202 + .byte 0x5 + .byte 0x35 + .4byte .LASF1203 + .byte 0x5 + .byte 0x3f + .4byte .LASF1204 + .byte 0x5 + .byte 0x49 + .4byte .LASF1205 + .byte 0x5 + .byte 0x53 + .4byte .LASF1206 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF1207 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF1208 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF1209 + .byte 0x5 + .byte 0x98,0x1 + .4byte .LASF1210 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF1211 + .byte 0x5 + .byte 0x9a,0x1 + .4byte .LASF1212 + .byte 0x5 + .byte 0xa2,0x1 + .4byte .LASF1213 + .byte 0x5 + .byte 0xa3,0x1 + .4byte .LASF1214 + .byte 0x5 + .byte 0xa4,0x1 + .4byte .LASF1215 + .byte 0x5 + .byte 0xae,0x1 + .4byte .LASF1216 + .byte 0x5 + .byte 0xaf,0x1 + .4byte .LASF1217 + .byte 0x5 + .byte 0xb0,0x1 + .4byte .LASF1218 + .byte 0x5 + .byte 0xb8,0x1 + .4byte .LASF1219 + .byte 0x5 + .byte 0xb9,0x1 + .4byte .LASF1220 + .byte 0x5 + .byte 0xba,0x1 + .4byte .LASF1221 + .byte 0x5 + .byte 0xc4,0x1 + .4byte .LASF1222 + .byte 0x5 + .byte 0xc5,0x1 + .4byte .LASF1223 + .byte 0x5 + .byte 0xc6,0x1 + .4byte .LASF1224 + .byte 0x5 + .byte 0xd4,0x1 + .4byte .LASF1225 + .byte 0x5 + .byte 0xd5,0x1 + .4byte .LASF1226 + .byte 0x5 + .byte 0xd6,0x1 + .4byte .LASF1227 + .byte 0x5 + .byte 0xe6,0x1 + .4byte .LASF1228 + .byte 0x5 + .byte 0xe7,0x1 + .4byte .LASF1229 + .byte 0x5 + .byte 0xe8,0x1 + .4byte .LASF1230 + .byte 0x5 + .byte 0xf6,0x1 + .4byte .LASF1231 + .byte 0x5 + .byte 0xf7,0x1 + .4byte .LASF1232 + .byte 0x5 + .byte 0xf8,0x1 + .4byte .LASF1233 + .byte 0x5 + .byte 0x86,0x2 + .4byte .LASF1234 + .byte 0x5 + .byte 0x87,0x2 + .4byte .LASF1235 + .byte 0x5 + .byte 0x88,0x2 + .4byte .LASF1236 + .byte 0x5 + .byte 0x96,0x2 + .4byte .LASF1237 + .byte 0x5 + .byte 0x97,0x2 + .4byte .LASF1238 + .byte 0x5 + .byte 0x98,0x2 + .4byte .LASF1239 + .byte 0x5 + .byte 0xa6,0x2 + .4byte .LASF1240 + .byte 0x5 + .byte 0xa7,0x2 + .4byte .LASF1241 + .byte 0x5 + .byte 0xa8,0x2 + .4byte .LASF1242 + .byte 0x5 + .byte 0xb6,0x2 + .4byte .LASF1243 + .byte 0x5 + .byte 0xb7,0x2 + .4byte .LASF1244 + .byte 0x5 + .byte 0xb8,0x2 + .4byte .LASF1245 + .byte 0x5 + .byte 0xc6,0x2 + .4byte .LASF1246 + .byte 0x5 + .byte 0xc7,0x2 + .4byte .LASF1247 + .byte 0x5 + .byte 0xcf,0x2 + .4byte .LASF1248 + .byte 0x5 + .byte 0xd7,0x2 + .4byte .LASF1249 + .byte 0x5 + .byte 0xdd,0x2 + .4byte .LASF1250 + .byte 0x5 + .byte 0xde,0x2 + .4byte .LASF1251 + .byte 0x5 + .byte 0xe2,0x2 + .4byte .LASF1252 + .byte 0x5 + .byte 0xe6,0x2 + .4byte .LASF1253 + .byte 0x5 + .byte 0xeb,0x2 + .4byte .LASF1254 + .byte 0x5 + .byte 0xf6,0x2 + .4byte .LASF1255 + .byte 0x5 + .byte 0x80,0x3 + .4byte .LASF1256 + .byte 0x5 + .byte 0x85,0x3 + .4byte .LASF1257 + .byte 0x5 + .byte 0x8c,0x3 + .4byte .LASF1258 + .byte 0x5 + .byte 0x8d,0x3 + .4byte .LASF1259 + .byte 0x5 + .byte 0x98,0x3 + .4byte .LASF1260 + .byte 0x5 + .byte 0x99,0x3 + .4byte .LASF1261 + .byte 0x5 + .byte 0xa4,0x3 + .4byte .LASF1262 + .byte 0x5 + .byte 0xa5,0x3 + .4byte .LASF1263 + .byte 0x5 + .byte 0xb1,0x3 + .4byte .LASF1264 + .byte 0x5 + .byte 0xb2,0x3 + .4byte .LASF1265 + .byte 0x5 + .byte 0xc1,0x3 + .4byte .LASF1266 + .byte 0x5 + .byte 0xc2,0x3 + .4byte .LASF1267 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.core_riscv.h.9.05dc68763b7326cae146147fbd4ce6a8,comdat +.Ldebug_macro47: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x9 + .4byte .LASF1268 + .byte 0x5 + .byte 0xf + .4byte .LASF1269 + .byte 0x5 + .byte 0x11 + .4byte .LASF1270 + .byte 0x5 + .byte 0x12 + .4byte .LASF1271 + .byte 0x5 + .byte 0x3b + .4byte .LASF1272 + .byte 0x5 + .byte 0x6e + .4byte .LASF1273 + .byte 0x5 + .byte 0x6f + .4byte .LASF1274 + .byte 0x5 + .byte 0x70 + .4byte .LASF1275 + .byte 0x5 + .byte 0x71 + .4byte .LASF1276 + .byte 0x5 + .byte 0x72 + .4byte .LASF1277 + .byte 0x5 + .byte 0x74 + .4byte .LASF1278 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x.h.88.ab40d4a513beb5e14ede771b5e661d32,comdat +.Ldebug_macro48: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x58 + .4byte .LASF1280 + .byte 0x5 + .byte 0x59 + .4byte .LASF1281 + .byte 0x5 + .byte 0x5a + .4byte .LASF1282 + .byte 0x5 + .byte 0xfa,0x3 + .4byte .LASF1283 + .byte 0x5 + .byte 0xfb,0x3 + .4byte .LASF1284 + .byte 0x5 + .byte 0xfc,0x3 + .4byte .LASF1285 + .byte 0x5 + .byte 0xff,0x3 + .4byte .LASF1286 + .byte 0x5 + .byte 0x80,0x4 + .4byte .LASF1287 + .byte 0x5 + .byte 0x81,0x4 + .4byte .LASF1288 + .byte 0x5 + .byte 0x83,0x4 + .4byte .LASF1289 + .byte 0x5 + .byte 0x84,0x4 + .4byte .LASF1290 + .byte 0x5 + .byte 0x85,0x4 + .4byte .LASF1291 + .byte 0x5 + .byte 0x86,0x4 + .4byte .LASF1292 + .byte 0x5 + .byte 0x87,0x4 + .4byte .LASF1293 + .byte 0x5 + .byte 0x88,0x4 + .4byte .LASF1294 + .byte 0x5 + .byte 0x89,0x4 + .4byte .LASF1295 + .byte 0x5 + .byte 0x8a,0x4 + .4byte .LASF1296 + .byte 0x5 + .byte 0x8b,0x4 + .4byte .LASF1297 + .byte 0x5 + .byte 0x8c,0x4 + .4byte .LASF1298 + .byte 0x5 + .byte 0x8d,0x4 + .4byte .LASF1299 + .byte 0x5 + .byte 0x8e,0x4 + .4byte .LASF1300 + .byte 0x5 + .byte 0x8f,0x4 + .4byte .LASF1301 + .byte 0x5 + .byte 0x90,0x4 + .4byte .LASF1302 + .byte 0x5 + .byte 0x91,0x4 + .4byte .LASF1303 + .byte 0x5 + .byte 0x92,0x4 + .4byte .LASF1304 + .byte 0x5 + .byte 0x93,0x4 + .4byte .LASF1305 + .byte 0x5 + .byte 0x94,0x4 + .4byte .LASF1306 + .byte 0x5 + .byte 0x95,0x4 + .4byte .LASF1307 + .byte 0x5 + .byte 0x96,0x4 + .4byte .LASF1308 + .byte 0x5 + .byte 0x97,0x4 + .4byte .LASF1309 + .byte 0x5 + .byte 0x98,0x4 + .4byte .LASF1310 + .byte 0x5 + .byte 0x99,0x4 + .4byte .LASF1311 + .byte 0x5 + .byte 0x9b,0x4 + .4byte .LASF1312 + .byte 0x5 + .byte 0x9c,0x4 + .4byte .LASF1313 + .byte 0x5 + .byte 0x9d,0x4 + .4byte .LASF1314 + .byte 0x5 + .byte 0x9e,0x4 + .4byte .LASF1315 + .byte 0x5 + .byte 0x9f,0x4 + .4byte .LASF1316 + .byte 0x5 + .byte 0xa0,0x4 + .4byte .LASF1317 + .byte 0x5 + .byte 0xa1,0x4 + .4byte .LASF1318 + .byte 0x5 + .byte 0xa2,0x4 + .4byte .LASF1319 + .byte 0x5 + .byte 0xa3,0x4 + .4byte .LASF1320 + .byte 0x5 + .byte 0xa4,0x4 + .4byte .LASF1321 + .byte 0x5 + .byte 0xa5,0x4 + .4byte .LASF1322 + .byte 0x5 + .byte 0xa6,0x4 + .4byte .LASF1323 + .byte 0x5 + .byte 0xa7,0x4 + .4byte .LASF1324 + .byte 0x5 + .byte 0xa8,0x4 + .4byte .LASF1325 + .byte 0x5 + .byte 0xa9,0x4 + .4byte .LASF1326 + .byte 0x5 + .byte 0xaa,0x4 + .4byte .LASF1327 + .byte 0x5 + .byte 0xab,0x4 + .4byte .LASF1328 + .byte 0x5 + .byte 0xac,0x4 + .4byte .LASF1329 + .byte 0x5 + .byte 0xad,0x4 + .4byte .LASF1330 + .byte 0x5 + .byte 0xae,0x4 + .4byte .LASF1331 + .byte 0x5 + .byte 0xaf,0x4 + .4byte .LASF1332 + .byte 0x5 + .byte 0xb0,0x4 + .4byte .LASF1333 + .byte 0x5 + .byte 0xb2,0x4 + .4byte .LASF1334 + .byte 0x5 + .byte 0xb3,0x4 + .4byte .LASF1335 + .byte 0x5 + .byte 0xb4,0x4 + .4byte .LASF1336 + .byte 0x5 + .byte 0xb5,0x4 + .4byte .LASF1337 + .byte 0x5 + .byte 0xb6,0x4 + .4byte .LASF1338 + .byte 0x5 + .byte 0xb7,0x4 + .4byte .LASF1339 + .byte 0x5 + .byte 0xb8,0x4 + .4byte .LASF1340 + .byte 0x5 + .byte 0xb9,0x4 + .4byte .LASF1341 + .byte 0x5 + .byte 0xba,0x4 + .4byte .LASF1342 + .byte 0x5 + .byte 0xbb,0x4 + .4byte .LASF1343 + .byte 0x5 + .byte 0xbc,0x4 + .4byte .LASF1344 + .byte 0x5 + .byte 0xbd,0x4 + .4byte .LASF1345 + .byte 0x5 + .byte 0xbe,0x4 + .4byte .LASF1346 + .byte 0x5 + .byte 0xbf,0x4 + .4byte .LASF1347 + .byte 0x5 + .byte 0xc0,0x4 + .4byte .LASF1348 + .byte 0x5 + .byte 0xc1,0x4 + .4byte .LASF1349 + .byte 0x5 + .byte 0xc3,0x4 + .4byte .LASF1350 + .byte 0x5 + .byte 0xc4,0x4 + .4byte .LASF1351 + .byte 0x5 + .byte 0xc5,0x4 + .4byte .LASF1352 + .byte 0x5 + .byte 0xc6,0x4 + .4byte .LASF1353 + .byte 0x5 + .byte 0xc9,0x4 + .4byte .LASF1354 + .byte 0x5 + .byte 0xca,0x4 + .4byte .LASF1355 + .byte 0x5 + .byte 0xcb,0x4 + .4byte .LASF1356 + .byte 0x5 + .byte 0xcc,0x4 + .4byte .LASF1357 + .byte 0x5 + .byte 0xcd,0x4 + .4byte .LASF1358 + .byte 0x5 + .byte 0xce,0x4 + .4byte .LASF1359 + .byte 0x5 + .byte 0xcf,0x4 + .4byte .LASF1360 + .byte 0x5 + .byte 0xd0,0x4 + .4byte .LASF1361 + .byte 0x5 + .byte 0xd1,0x4 + .4byte .LASF1362 + .byte 0x5 + .byte 0xd2,0x4 + .4byte .LASF1363 + .byte 0x5 + .byte 0xd3,0x4 + .4byte .LASF1364 + .byte 0x5 + .byte 0xd4,0x4 + .4byte .LASF1365 + .byte 0x5 + .byte 0xd5,0x4 + .4byte .LASF1366 + .byte 0x5 + .byte 0xd6,0x4 + .4byte .LASF1367 + .byte 0x5 + .byte 0xd7,0x4 + .4byte .LASF1368 + .byte 0x5 + .byte 0xd8,0x4 + .4byte .LASF1369 + .byte 0x5 + .byte 0xd9,0x4 + .4byte .LASF1370 + .byte 0x5 + .byte 0xda,0x4 + .4byte .LASF1371 + .byte 0x5 + .byte 0xdb,0x4 + .4byte .LASF1372 + .byte 0x5 + .byte 0xdc,0x4 + .4byte .LASF1373 + .byte 0x5 + .byte 0xdd,0x4 + .4byte .LASF1374 + .byte 0x5 + .byte 0xde,0x4 + .4byte .LASF1375 + .byte 0x5 + .byte 0xdf,0x4 + .4byte .LASF1376 + .byte 0x5 + .byte 0xe0,0x4 + .4byte .LASF1377 + .byte 0x5 + .byte 0xe1,0x4 + .4byte .LASF1378 + .byte 0x5 + .byte 0xe2,0x4 + .4byte .LASF1379 + .byte 0x5 + .byte 0xe3,0x4 + .4byte .LASF1380 + .byte 0x5 + .byte 0xe4,0x4 + .4byte .LASF1381 + .byte 0x5 + .byte 0xe5,0x4 + .4byte .LASF1382 + .byte 0x5 + .byte 0xe6,0x4 + .4byte .LASF1383 + .byte 0x5 + .byte 0xe7,0x4 + .4byte .LASF1384 + .byte 0x5 + .byte 0xe8,0x4 + .4byte .LASF1385 + .byte 0x5 + .byte 0xe9,0x4 + .4byte .LASF1386 + .byte 0x5 + .byte 0xea,0x4 + .4byte .LASF1387 + .byte 0x5 + .byte 0xeb,0x4 + .4byte .LASF1388 + .byte 0x5 + .byte 0xec,0x4 + .4byte .LASF1389 + .byte 0x5 + .byte 0xed,0x4 + .4byte .LASF1390 + .byte 0x5 + .byte 0xee,0x4 + .4byte .LASF1391 + .byte 0x5 + .byte 0xef,0x4 + .4byte .LASF1392 + .byte 0x5 + .byte 0xf0,0x4 + .4byte .LASF1393 + .byte 0x5 + .byte 0xf1,0x4 + .4byte .LASF1394 + .byte 0x5 + .byte 0xf2,0x4 + .4byte .LASF1395 + .byte 0x5 + .byte 0xf3,0x4 + .4byte .LASF1396 + .byte 0x5 + .byte 0xf4,0x4 + .4byte .LASF1397 + .byte 0x5 + .byte 0xf5,0x4 + .4byte .LASF1398 + .byte 0x5 + .byte 0xf6,0x4 + .4byte .LASF1399 + .byte 0x5 + .byte 0xf7,0x4 + .4byte .LASF1400 + .byte 0x5 + .byte 0xf8,0x4 + .4byte .LASF1401 + .byte 0x5 + .byte 0xf9,0x4 + .4byte .LASF1402 + .byte 0x5 + .byte 0xfa,0x4 + .4byte .LASF1403 + .byte 0x5 + .byte 0xfb,0x4 + .4byte .LASF1404 + .byte 0x5 + .byte 0xfc,0x4 + .4byte .LASF1405 + .byte 0x5 + .byte 0xfd,0x4 + .4byte .LASF1406 + .byte 0x5 + .byte 0xfe,0x4 + .4byte .LASF1407 + .byte 0x5 + .byte 0xff,0x4 + .4byte .LASF1408 + .byte 0x5 + .byte 0x80,0x5 + .4byte .LASF1409 + .byte 0x5 + .byte 0x81,0x5 + .4byte .LASF1410 + .byte 0x5 + .byte 0x82,0x5 + .4byte .LASF1411 + .byte 0x5 + .byte 0x83,0x5 + .4byte .LASF1412 + .byte 0x5 + .byte 0x84,0x5 + .4byte .LASF1413 + .byte 0x5 + .byte 0x85,0x5 + .4byte .LASF1414 + .byte 0x5 + .byte 0x86,0x5 + .4byte .LASF1415 + .byte 0x5 + .byte 0x87,0x5 + .4byte .LASF1416 + .byte 0x5 + .byte 0x88,0x5 + .4byte .LASF1417 + .byte 0x5 + .byte 0x89,0x5 + .4byte .LASF1418 + .byte 0x5 + .byte 0x95,0x5 + .4byte .LASF1419 + .byte 0x5 + .byte 0x96,0x5 + .4byte .LASF1420 + .byte 0x5 + .byte 0x97,0x5 + .4byte .LASF1421 + .byte 0x5 + .byte 0x98,0x5 + .4byte .LASF1422 + .byte 0x5 + .byte 0x99,0x5 + .4byte .LASF1423 + .byte 0x5 + .byte 0x9c,0x5 + .4byte .LASF1424 + .byte 0x5 + .byte 0x9d,0x5 + .4byte .LASF1425 + .byte 0x5 + .byte 0x9e,0x5 + .4byte .LASF1426 + .byte 0x5 + .byte 0x9f,0x5 + .4byte .LASF1427 + .byte 0x5 + .byte 0xa0,0x5 + .4byte .LASF1428 + .byte 0x5 + .byte 0xa1,0x5 + .4byte .LASF1429 + .byte 0x5 + .byte 0xa3,0x5 + .4byte .LASF1430 + .byte 0x5 + .byte 0xa4,0x5 + .4byte .LASF1431 + .byte 0x5 + .byte 0xa5,0x5 + .4byte .LASF1432 + .byte 0x5 + .byte 0xa6,0x5 + .4byte .LASF1433 + .byte 0x5 + .byte 0xa7,0x5 + .4byte .LASF1434 + .byte 0x5 + .byte 0xa8,0x5 + .4byte .LASF1435 + .byte 0x5 + .byte 0xa9,0x5 + .4byte .LASF1436 + .byte 0x5 + .byte 0xaa,0x5 + .4byte .LASF1437 + .byte 0x5 + .byte 0xac,0x5 + .4byte .LASF1438 + .byte 0x5 + .byte 0xad,0x5 + .4byte .LASF1439 + .byte 0x5 + .byte 0xae,0x5 + .4byte .LASF1440 + .byte 0x5 + .byte 0xaf,0x5 + .4byte .LASF1441 + .byte 0x5 + .byte 0xb1,0x5 + .4byte .LASF1442 + .byte 0x5 + .byte 0xb2,0x5 + .4byte .LASF1443 + .byte 0x5 + .byte 0xb3,0x5 + .4byte .LASF1444 + .byte 0x5 + .byte 0xb4,0x5 + .4byte .LASF1445 + .byte 0x5 + .byte 0xb5,0x5 + .4byte .LASF1446 + .byte 0x5 + .byte 0xb7,0x5 + .4byte .LASF1447 + .byte 0x5 + .byte 0xb8,0x5 + .4byte .LASF1448 + .byte 0x5 + .byte 0xbb,0x5 + .4byte .LASF1449 + .byte 0x5 + .byte 0xbc,0x5 + .4byte .LASF1450 + .byte 0x5 + .byte 0xbd,0x5 + .4byte .LASF1451 + .byte 0x5 + .byte 0xbe,0x5 + .4byte .LASF1452 + .byte 0x5 + .byte 0xbf,0x5 + .4byte .LASF1453 + .byte 0x5 + .byte 0xc0,0x5 + .4byte .LASF1454 + .byte 0x5 + .byte 0xc2,0x5 + .4byte .LASF1455 + .byte 0x5 + .byte 0xc3,0x5 + .4byte .LASF1456 + .byte 0x5 + .byte 0xc4,0x5 + .4byte .LASF1457 + .byte 0x5 + .byte 0xc5,0x5 + .4byte .LASF1458 + .byte 0x5 + .byte 0xc7,0x5 + .4byte .LASF1459 + .byte 0x5 + .byte 0xc9,0x5 + .4byte .LASF1460 + .byte 0x5 + .byte 0xca,0x5 + .4byte .LASF1461 + .byte 0x5 + .byte 0xcb,0x5 + .4byte .LASF1462 + .byte 0x5 + .byte 0xcc,0x5 + .4byte .LASF1463 + .byte 0x5 + .byte 0xce,0x5 + .4byte .LASF1464 + .byte 0x5 + .byte 0xcf,0x5 + .4byte .LASF1465 + .byte 0x5 + .byte 0xd0,0x5 + .4byte .LASF1466 + .byte 0x5 + .byte 0xd1,0x5 + .4byte .LASF1467 + .byte 0x5 + .byte 0xd4,0x5 + .4byte .LASF1468 + .byte 0x5 + .byte 0xd5,0x5 + .4byte .LASF1469 + .byte 0x5 + .byte 0xd6,0x5 + .4byte .LASF1470 + .byte 0x5 + .byte 0xd7,0x5 + .4byte .LASF1471 + .byte 0x5 + .byte 0xd9,0x5 + .4byte .LASF1472 + .byte 0x5 + .byte 0xda,0x5 + .4byte .LASF1473 + .byte 0x5 + .byte 0xdb,0x5 + .4byte .LASF1474 + .byte 0x5 + .byte 0xdc,0x5 + .4byte .LASF1475 + .byte 0x5 + .byte 0xde,0x5 + .4byte .LASF1476 + .byte 0x5 + .byte 0xdf,0x5 + .4byte .LASF1477 + .byte 0x5 + .byte 0xe0,0x5 + .4byte .LASF1478 + .byte 0x5 + .byte 0xe1,0x5 + .4byte .LASF1479 + .byte 0x5 + .byte 0xe3,0x5 + .4byte .LASF1480 + .byte 0x5 + .byte 0xe4,0x5 + .4byte .LASF1481 + .byte 0x5 + .byte 0xe5,0x5 + .4byte .LASF1482 + .byte 0x5 + .byte 0xe6,0x5 + .4byte .LASF1483 + .byte 0x5 + .byte 0xe8,0x5 + .4byte .LASF1484 + .byte 0x5 + .byte 0xe9,0x5 + .4byte .LASF1485 + .byte 0x5 + .byte 0xea,0x5 + .4byte .LASF1486 + .byte 0x5 + .byte 0xeb,0x5 + .4byte .LASF1487 + .byte 0x5 + .byte 0xed,0x5 + .4byte .LASF1488 + .byte 0x5 + .byte 0xee,0x5 + .4byte .LASF1489 + .byte 0x5 + .byte 0xef,0x5 + .4byte .LASF1490 + .byte 0x5 + .byte 0xf0,0x5 + .4byte .LASF1491 + .byte 0x5 + .byte 0xf2,0x5 + .4byte .LASF1492 + .byte 0x5 + .byte 0xf3,0x5 + .4byte .LASF1493 + .byte 0x5 + .byte 0xf4,0x5 + .4byte .LASF1494 + .byte 0x5 + .byte 0xf5,0x5 + .4byte .LASF1495 + .byte 0x5 + .byte 0xf7,0x5 + .4byte .LASF1496 + .byte 0x5 + .byte 0xf8,0x5 + .4byte .LASF1497 + .byte 0x5 + .byte 0xf9,0x5 + .4byte .LASF1498 + .byte 0x5 + .byte 0xfa,0x5 + .4byte .LASF1499 + .byte 0x5 + .byte 0xfd,0x5 + .4byte .LASF1500 + .byte 0x5 + .byte 0xfe,0x5 + .4byte .LASF1501 + .byte 0x5 + .byte 0xff,0x5 + .4byte .LASF1502 + .byte 0x5 + .byte 0x80,0x6 + .4byte .LASF1503 + .byte 0x5 + .byte 0x82,0x6 + .4byte .LASF1504 + .byte 0x5 + .byte 0x83,0x6 + .4byte .LASF1505 + .byte 0x5 + .byte 0x84,0x6 + .4byte .LASF1506 + .byte 0x5 + .byte 0x85,0x6 + .4byte .LASF1507 + .byte 0x5 + .byte 0x87,0x6 + .4byte .LASF1508 + .byte 0x5 + .byte 0x88,0x6 + .4byte .LASF1509 + .byte 0x5 + .byte 0x89,0x6 + .4byte .LASF1510 + .byte 0x5 + .byte 0x8a,0x6 + .4byte .LASF1511 + .byte 0x5 + .byte 0x8c,0x6 + .4byte .LASF1512 + .byte 0x5 + .byte 0x8d,0x6 + .4byte .LASF1513 + .byte 0x5 + .byte 0x8e,0x6 + .4byte .LASF1514 + .byte 0x5 + .byte 0x8f,0x6 + .4byte .LASF1515 + .byte 0x5 + .byte 0x91,0x6 + .4byte .LASF1516 + .byte 0x5 + .byte 0x92,0x6 + .4byte .LASF1517 + .byte 0x5 + .byte 0x93,0x6 + .4byte .LASF1518 + .byte 0x5 + .byte 0x94,0x6 + .4byte .LASF1519 + .byte 0x5 + .byte 0x96,0x6 + .4byte .LASF1520 + .byte 0x5 + .byte 0x97,0x6 + .4byte .LASF1521 + .byte 0x5 + .byte 0x98,0x6 + .4byte .LASF1522 + .byte 0x5 + .byte 0x99,0x6 + .4byte .LASF1523 + .byte 0x5 + .byte 0x9b,0x6 + .4byte .LASF1524 + .byte 0x5 + .byte 0x9c,0x6 + .4byte .LASF1525 + .byte 0x5 + .byte 0x9d,0x6 + .4byte .LASF1526 + .byte 0x5 + .byte 0x9e,0x6 + .4byte .LASF1527 + .byte 0x5 + .byte 0xa0,0x6 + .4byte .LASF1528 + .byte 0x5 + .byte 0xa1,0x6 + .4byte .LASF1529 + .byte 0x5 + .byte 0xa2,0x6 + .4byte .LASF1530 + .byte 0x5 + .byte 0xa3,0x6 + .4byte .LASF1531 + .byte 0x5 + .byte 0xa5,0x6 + .4byte .LASF1532 + .byte 0x5 + .byte 0xa6,0x6 + .4byte .LASF1533 + .byte 0x5 + .byte 0xa7,0x6 + .4byte .LASF1534 + .byte 0x5 + .byte 0xa8,0x6 + .4byte .LASF1535 + .byte 0x5 + .byte 0xaa,0x6 + .4byte .LASF1536 + .byte 0x5 + .byte 0xab,0x6 + .4byte .LASF1537 + .byte 0x5 + .byte 0xac,0x6 + .4byte .LASF1538 + .byte 0x5 + .byte 0xad,0x6 + .4byte .LASF1539 + .byte 0x5 + .byte 0xb0,0x6 + .4byte .LASF1540 + .byte 0x5 + .byte 0xb3,0x6 + .4byte .LASF1541 + .byte 0x5 + .byte 0xb6,0x6 + .4byte .LASF1542 + .byte 0x5 + .byte 0xb9,0x6 + .4byte .LASF1543 + .byte 0x5 + .byte 0xbc,0x6 + .4byte .LASF1544 + .byte 0x5 + .byte 0xbf,0x6 + .4byte .LASF1545 + .byte 0x5 + .byte 0xc2,0x6 + .4byte .LASF1546 + .byte 0x5 + .byte 0xc3,0x6 + .4byte .LASF1547 + .byte 0x5 + .byte 0xc4,0x6 + .4byte .LASF1548 + .byte 0x5 + .byte 0xc5,0x6 + .4byte .LASF1549 + .byte 0x5 + .byte 0xc6,0x6 + .4byte .LASF1550 + .byte 0x5 + .byte 0xc7,0x6 + .4byte .LASF1551 + .byte 0x5 + .byte 0xc9,0x6 + .4byte .LASF1552 + .byte 0x5 + .byte 0xca,0x6 + .4byte .LASF1553 + .byte 0x5 + .byte 0xcb,0x6 + .4byte .LASF1554 + .byte 0x5 + .byte 0xcc,0x6 + .4byte .LASF1555 + .byte 0x5 + .byte 0xcd,0x6 + .4byte .LASF1556 + .byte 0x5 + .byte 0xce,0x6 + .4byte .LASF1557 + .byte 0x5 + .byte 0xd0,0x6 + .4byte .LASF1558 + .byte 0x5 + .byte 0xd1,0x6 + .4byte .LASF1559 + .byte 0x5 + .byte 0xd2,0x6 + .4byte .LASF1560 + .byte 0x5 + .byte 0xd3,0x6 + .4byte .LASF1561 + .byte 0x5 + .byte 0xd4,0x6 + .4byte .LASF1562 + .byte 0x5 + .byte 0xd5,0x6 + .4byte .LASF1563 + .byte 0x5 + .byte 0xd7,0x6 + .4byte .LASF1564 + .byte 0x5 + .byte 0xd8,0x6 + .4byte .LASF1565 + .byte 0x5 + .byte 0xd9,0x6 + .4byte .LASF1566 + .byte 0x5 + .byte 0xda,0x6 + .4byte .LASF1567 + .byte 0x5 + .byte 0xdb,0x6 + .4byte .LASF1568 + .byte 0x5 + .byte 0xdc,0x6 + .4byte .LASF1569 + .byte 0x5 + .byte 0xde,0x6 + .4byte .LASF1570 + .byte 0x5 + .byte 0xdf,0x6 + .4byte .LASF1571 + .byte 0x5 + .byte 0xe0,0x6 + .4byte .LASF1572 + .byte 0x5 + .byte 0xe1,0x6 + .4byte .LASF1573 + .byte 0x5 + .byte 0xe2,0x6 + .4byte .LASF1574 + .byte 0x5 + .byte 0xe5,0x6 + .4byte .LASF1575 + .byte 0x5 + .byte 0xe6,0x6 + .4byte .LASF1576 + .byte 0x5 + .byte 0xe7,0x6 + .4byte .LASF1577 + .byte 0x5 + .byte 0xe8,0x6 + .4byte .LASF1578 + .byte 0x5 + .byte 0xe9,0x6 + .4byte .LASF1579 + .byte 0x5 + .byte 0xea,0x6 + .4byte .LASF1580 + .byte 0x5 + .byte 0xec,0x6 + .4byte .LASF1581 + .byte 0x5 + .byte 0xed,0x6 + .4byte .LASF1582 + .byte 0x5 + .byte 0xee,0x6 + .4byte .LASF1583 + .byte 0x5 + .byte 0xef,0x6 + .4byte .LASF1584 + .byte 0x5 + .byte 0xf0,0x6 + .4byte .LASF1585 + .byte 0x5 + .byte 0xf1,0x6 + .4byte .LASF1586 + .byte 0x5 + .byte 0xf3,0x6 + .4byte .LASF1587 + .byte 0x5 + .byte 0xf4,0x6 + .4byte .LASF1588 + .byte 0x5 + .byte 0xf5,0x6 + .4byte .LASF1589 + .byte 0x5 + .byte 0xf6,0x6 + .4byte .LASF1590 + .byte 0x5 + .byte 0xf7,0x6 + .4byte .LASF1591 + .byte 0x5 + .byte 0xf8,0x6 + .4byte .LASF1592 + .byte 0x5 + .byte 0xfa,0x6 + .4byte .LASF1593 + .byte 0x5 + .byte 0xfb,0x6 + .4byte .LASF1594 + .byte 0x5 + .byte 0xfc,0x6 + .4byte .LASF1595 + .byte 0x5 + .byte 0xfd,0x6 + .4byte .LASF1596 + .byte 0x5 + .byte 0xfe,0x6 + .4byte .LASF1597 + .byte 0x5 + .byte 0xff,0x6 + .4byte .LASF1598 + .byte 0x5 + .byte 0x81,0x7 + .4byte .LASF1599 + .byte 0x5 + .byte 0x82,0x7 + .4byte .LASF1600 + .byte 0x5 + .byte 0x83,0x7 + .4byte .LASF1601 + .byte 0x5 + .byte 0x84,0x7 + .4byte .LASF1602 + .byte 0x5 + .byte 0x85,0x7 + .4byte .LASF1603 + .byte 0x5 + .byte 0x86,0x7 + .4byte .LASF1604 + .byte 0x5 + .byte 0x88,0x7 + .4byte .LASF1605 + .byte 0x5 + .byte 0x89,0x7 + .4byte .LASF1606 + .byte 0x5 + .byte 0x8a,0x7 + .4byte .LASF1607 + .byte 0x5 + .byte 0x8b,0x7 + .4byte .LASF1608 + .byte 0x5 + .byte 0x8c,0x7 + .4byte .LASF1609 + .byte 0x5 + .byte 0x8d,0x7 + .4byte .LASF1610 + .byte 0x5 + .byte 0x90,0x7 + .4byte .LASF1611 + .byte 0x5 + .byte 0x91,0x7 + .4byte .LASF1612 + .byte 0x5 + .byte 0x92,0x7 + .4byte .LASF1613 + .byte 0x5 + .byte 0x93,0x7 + .4byte .LASF1614 + .byte 0x5 + .byte 0x94,0x7 + .4byte .LASF1615 + .byte 0x5 + .byte 0x95,0x7 + .4byte .LASF1616 + .byte 0x5 + .byte 0x97,0x7 + .4byte .LASF1617 + .byte 0x5 + .byte 0x98,0x7 + .4byte .LASF1618 + .byte 0x5 + .byte 0x99,0x7 + .4byte .LASF1619 + .byte 0x5 + .byte 0x9a,0x7 + .4byte .LASF1620 + .byte 0x5 + .byte 0x9b,0x7 + .4byte .LASF1621 + .byte 0x5 + .byte 0x9c,0x7 + .4byte .LASF1622 + .byte 0x5 + .byte 0x9e,0x7 + .4byte .LASF1623 + .byte 0x5 + .byte 0x9f,0x7 + .4byte .LASF1624 + .byte 0x5 + .byte 0xa0,0x7 + .4byte .LASF1625 + .byte 0x5 + .byte 0xa1,0x7 + .4byte .LASF1626 + .byte 0x5 + .byte 0xa2,0x7 + .4byte .LASF1627 + .byte 0x5 + .byte 0xa3,0x7 + .4byte .LASF1628 + .byte 0x5 + .byte 0xa5,0x7 + .4byte .LASF1629 + .byte 0x5 + .byte 0xa6,0x7 + .4byte .LASF1630 + .byte 0x5 + .byte 0xa7,0x7 + .4byte .LASF1631 + .byte 0x5 + .byte 0xa8,0x7 + .4byte .LASF1632 + .byte 0x5 + .byte 0xa9,0x7 + .4byte .LASF1633 + .byte 0x5 + .byte 0xaa,0x7 + .4byte .LASF1634 + .byte 0x5 + .byte 0xac,0x7 + .4byte .LASF1635 + .byte 0x5 + .byte 0xad,0x7 + .4byte .LASF1636 + .byte 0x5 + .byte 0xae,0x7 + .4byte .LASF1637 + .byte 0x5 + .byte 0xaf,0x7 + .4byte .LASF1638 + .byte 0x5 + .byte 0xb0,0x7 + .4byte .LASF1639 + .byte 0x5 + .byte 0xb1,0x7 + .4byte .LASF1640 + .byte 0x5 + .byte 0xb3,0x7 + .4byte .LASF1641 + .byte 0x5 + .byte 0xb4,0x7 + .4byte .LASF1642 + .byte 0x5 + .byte 0xb5,0x7 + .4byte .LASF1643 + .byte 0x5 + .byte 0xb6,0x7 + .4byte .LASF1644 + .byte 0x5 + .byte 0xb7,0x7 + .4byte .LASF1645 + .byte 0x5 + .byte 0xb8,0x7 + .4byte .LASF1646 + .byte 0x5 + .byte 0xbb,0x7 + .4byte .LASF1647 + .byte 0x5 + .byte 0xbc,0x7 + .4byte .LASF1648 + .byte 0x5 + .byte 0xbd,0x7 + .4byte .LASF1649 + .byte 0x5 + .byte 0xbe,0x7 + .4byte .LASF1650 + .byte 0x5 + .byte 0xbf,0x7 + .4byte .LASF1651 + .byte 0x5 + .byte 0xc0,0x7 + .4byte .LASF1652 + .byte 0x5 + .byte 0xc2,0x7 + .4byte .LASF1653 + .byte 0x5 + .byte 0xc3,0x7 + .4byte .LASF1654 + .byte 0x5 + .byte 0xc4,0x7 + .4byte .LASF1655 + .byte 0x5 + .byte 0xc5,0x7 + .4byte .LASF1656 + .byte 0x5 + .byte 0xc6,0x7 + .4byte .LASF1657 + .byte 0x5 + .byte 0xc7,0x7 + .4byte .LASF1658 + .byte 0x5 + .byte 0xc9,0x7 + .4byte .LASF1659 + .byte 0x5 + .byte 0xca,0x7 + .4byte .LASF1660 + .byte 0x5 + .byte 0xcb,0x7 + .4byte .LASF1661 + .byte 0x5 + .byte 0xcc,0x7 + .4byte .LASF1662 + .byte 0x5 + .byte 0xcd,0x7 + .4byte .LASF1663 + .byte 0x5 + .byte 0xce,0x7 + .4byte .LASF1664 + .byte 0x5 + .byte 0xd0,0x7 + .4byte .LASF1665 + .byte 0x5 + .byte 0xd1,0x7 + .4byte .LASF1666 + .byte 0x5 + .byte 0xd2,0x7 + .4byte .LASF1667 + .byte 0x5 + .byte 0xd3,0x7 + .4byte .LASF1668 + .byte 0x5 + .byte 0xd4,0x7 + .4byte .LASF1669 + .byte 0x5 + .byte 0xd5,0x7 + .4byte .LASF1670 + .byte 0x5 + .byte 0xd7,0x7 + .4byte .LASF1671 + .byte 0x5 + .byte 0xd8,0x7 + .4byte .LASF1672 + .byte 0x5 + .byte 0xd9,0x7 + .4byte .LASF1673 + .byte 0x5 + .byte 0xdc,0x7 + .4byte .LASF1674 + .byte 0x5 + .byte 0xdf,0x7 + .4byte .LASF1675 + .byte 0x5 + .byte 0xe2,0x7 + .4byte .LASF1676 + .byte 0x5 + .byte 0xe5,0x7 + .4byte .LASF1677 + .byte 0x5 + .byte 0xe8,0x7 + .4byte .LASF1678 + .byte 0x5 + .byte 0xe9,0x7 + .4byte .LASF1679 + .byte 0x5 + .byte 0xf0,0x7 + .4byte .LASF1680 + .byte 0x5 + .byte 0xf3,0x7 + .4byte .LASF1681 + .byte 0x5 + .byte 0xf6,0x7 + .4byte .LASF1682 + .byte 0x5 + .byte 0xf9,0x7 + .4byte .LASF1683 + .byte 0x5 + .byte 0xfc,0x7 + .4byte .LASF1684 + .byte 0x5 + .byte 0xff,0x7 + .4byte .LASF1685 + .byte 0x5 + .byte 0x82,0x8 + .4byte .LASF1686 + .byte 0x5 + .byte 0x85,0x8 + .4byte .LASF1687 + .byte 0x5 + .byte 0x88,0x8 + .4byte .LASF1688 + .byte 0x5 + .byte 0x8b,0x8 + .4byte .LASF1689 + .byte 0x5 + .byte 0x8e,0x8 + .4byte .LASF1690 + .byte 0x5 + .byte 0x91,0x8 + .4byte .LASF1691 + .byte 0x5 + .byte 0x94,0x8 + .4byte .LASF1692 + .byte 0x5 + .byte 0x97,0x8 + .4byte .LASF1693 + .byte 0x5 + .byte 0x9a,0x8 + .4byte .LASF1694 + .byte 0x5 + .byte 0x9d,0x8 + .4byte .LASF1695 + .byte 0x5 + .byte 0xa0,0x8 + .4byte .LASF1696 + .byte 0x5 + .byte 0xa3,0x8 + .4byte .LASF1697 + .byte 0x5 + .byte 0xa6,0x8 + .4byte .LASF1698 + .byte 0x5 + .byte 0xa9,0x8 + .4byte .LASF1699 + .byte 0x5 + .byte 0xac,0x8 + .4byte .LASF1700 + .byte 0x5 + .byte 0xaf,0x8 + .4byte .LASF1701 + .byte 0x5 + .byte 0xb2,0x8 + .4byte .LASF1702 + .byte 0x5 + .byte 0xb5,0x8 + .4byte .LASF1703 + .byte 0x5 + .byte 0xb8,0x8 + .4byte .LASF1704 + .byte 0x5 + .byte 0xbb,0x8 + .4byte .LASF1705 + .byte 0x5 + .byte 0xbe,0x8 + .4byte .LASF1706 + .byte 0x5 + .byte 0xc1,0x8 + .4byte .LASF1707 + .byte 0x5 + .byte 0xc4,0x8 + .4byte .LASF1708 + .byte 0x5 + .byte 0xc7,0x8 + .4byte .LASF1709 + .byte 0x5 + .byte 0xca,0x8 + .4byte .LASF1710 + .byte 0x5 + .byte 0xcd,0x8 + .4byte .LASF1711 + .byte 0x5 + .byte 0xd0,0x8 + .4byte .LASF1712 + .byte 0x5 + .byte 0xd3,0x8 + .4byte .LASF1713 + .byte 0x5 + .byte 0xd6,0x8 + .4byte .LASF1714 + .byte 0x5 + .byte 0xd9,0x8 + .4byte .LASF1715 + .byte 0x5 + .byte 0xdc,0x8 + .4byte .LASF1716 + .byte 0x5 + .byte 0xdf,0x8 + .4byte .LASF1717 + .byte 0x5 + .byte 0xe2,0x8 + .4byte .LASF1718 + .byte 0x5 + .byte 0xe5,0x8 + .4byte .LASF1719 + .byte 0x5 + .byte 0xe8,0x8 + .4byte .LASF1720 + .byte 0x5 + .byte 0xeb,0x8 + .4byte .LASF1721 + .byte 0x5 + .byte 0xee,0x8 + .4byte .LASF1722 + .byte 0x5 + .byte 0xef,0x8 + .4byte .LASF1723 + .byte 0x5 + .byte 0xf0,0x8 + .4byte .LASF1724 + .byte 0x5 + .byte 0xf1,0x8 + .4byte .LASF1725 + .byte 0x5 + .byte 0xf4,0x8 + .4byte .LASF1726 + .byte 0x5 + .byte 0xf5,0x8 + .4byte .LASF1727 + .byte 0x5 + .byte 0xf8,0x8 + .4byte .LASF1728 + .byte 0x5 + .byte 0xf9,0x8 + .4byte .LASF1729 + .byte 0x5 + .byte 0xfa,0x8 + .4byte .LASF1730 + .byte 0x5 + .byte 0xfb,0x8 + .4byte .LASF1731 + .byte 0x5 + .byte 0xfc,0x8 + .4byte .LASF1732 + .byte 0x5 + .byte 0x83,0x9 + .4byte .LASF1733 + .byte 0x5 + .byte 0x87,0x9 + .4byte .LASF1734 + .byte 0x5 + .byte 0x8b,0x9 + .4byte .LASF1735 + .byte 0x5 + .byte 0x92,0x9 + .4byte .LASF1736 + .byte 0x5 + .byte 0x93,0x9 + .4byte .LASF1737 + .byte 0x5 + .byte 0x94,0x9 + .4byte .LASF1738 + .byte 0x5 + .byte 0x96,0x9 + .4byte .LASF1739 + .byte 0x5 + .byte 0x97,0x9 + .4byte .LASF1740 + .byte 0x5 + .byte 0x98,0x9 + .4byte .LASF1741 + .byte 0x5 + .byte 0x99,0x9 + .4byte .LASF1742 + .byte 0x5 + .byte 0x9b,0x9 + .4byte .LASF1743 + .byte 0x5 + .byte 0x9c,0x9 + .4byte .LASF1744 + .byte 0x5 + .byte 0x9d,0x9 + .4byte .LASF1745 + .byte 0x5 + .byte 0x9f,0x9 + .4byte .LASF1746 + .byte 0x5 + .byte 0xa0,0x9 + .4byte .LASF1747 + .byte 0x5 + .byte 0xa1,0x9 + .4byte .LASF1748 + .byte 0x5 + .byte 0xa2,0x9 + .4byte .LASF1749 + .byte 0x5 + .byte 0xa3,0x9 + .4byte .LASF1750 + .byte 0x5 + .byte 0xa5,0x9 + .4byte .LASF1751 + .byte 0x5 + .byte 0xa6,0x9 + .4byte .LASF1752 + .byte 0x5 + .byte 0xa7,0x9 + .4byte .LASF1753 + .byte 0x5 + .byte 0xa8,0x9 + .4byte .LASF1754 + .byte 0x5 + .byte 0xaa,0x9 + .4byte .LASF1755 + .byte 0x5 + .byte 0xab,0x9 + .4byte .LASF1756 + .byte 0x5 + .byte 0xac,0x9 + .4byte .LASF1757 + .byte 0x5 + .byte 0xad,0x9 + .4byte .LASF1758 + .byte 0x5 + .byte 0xaf,0x9 + .4byte .LASF1759 + .byte 0x5 + .byte 0xb0,0x9 + .4byte .LASF1760 + .byte 0x5 + .byte 0xb1,0x9 + .4byte .LASF1761 + .byte 0x5 + .byte 0xb3,0x9 + .4byte .LASF1762 + .byte 0x5 + .byte 0xb4,0x9 + .4byte .LASF1763 + .byte 0x5 + .byte 0xb5,0x9 + .4byte .LASF1764 + .byte 0x5 + .byte 0xb6,0x9 + .4byte .LASF1765 + .byte 0x5 + .byte 0xb7,0x9 + .4byte .LASF1766 + .byte 0x5 + .byte 0xb9,0x9 + .4byte .LASF1767 + .byte 0x5 + .byte 0xbc,0x9 + .4byte .LASF1768 + .byte 0x5 + .byte 0xbd,0x9 + .4byte .LASF1769 + .byte 0x5 + .byte 0xc0,0x9 + .4byte .LASF1770 + .byte 0x5 + .byte 0xc3,0x9 + .4byte .LASF1771 + .byte 0x5 + .byte 0xc6,0x9 + .4byte .LASF1772 + .byte 0x5 + .byte 0xc9,0x9 + .4byte .LASF1773 + .byte 0x5 + .byte 0xcc,0x9 + .4byte .LASF1774 + .byte 0x5 + .byte 0xcf,0x9 + .4byte .LASF1775 + .byte 0x5 + .byte 0xd2,0x9 + .4byte .LASF1776 + .byte 0x5 + .byte 0xd3,0x9 + .4byte .LASF1777 + .byte 0x5 + .byte 0xd6,0x9 + .4byte .LASF1778 + .byte 0x5 + .byte 0xd7,0x9 + .4byte .LASF1779 + .byte 0x5 + .byte 0xda,0x9 + .4byte .LASF1780 + .byte 0x5 + .byte 0xdb,0x9 + .4byte .LASF1781 + .byte 0x5 + .byte 0xde,0x9 + .4byte .LASF1782 + .byte 0x5 + .byte 0xe1,0x9 + .4byte .LASF1783 + .byte 0x5 + .byte 0xe8,0x9 + .4byte .LASF1784 + .byte 0x5 + .byte 0xe9,0x9 + .4byte .LASF1785 + .byte 0x5 + .byte 0xea,0x9 + .4byte .LASF1786 + .byte 0x5 + .byte 0xeb,0x9 + .4byte .LASF1787 + .byte 0x5 + .byte 0xec,0x9 + .4byte .LASF1788 + .byte 0x5 + .byte 0xed,0x9 + .4byte .LASF1789 + .byte 0x5 + .byte 0xee,0x9 + .4byte .LASF1790 + .byte 0x5 + .byte 0xef,0x9 + .4byte .LASF1791 + .byte 0x5 + .byte 0xf0,0x9 + .4byte .LASF1792 + .byte 0x5 + .byte 0xf1,0x9 + .4byte .LASF1793 + .byte 0x5 + .byte 0xf2,0x9 + .4byte .LASF1794 + .byte 0x5 + .byte 0xf3,0x9 + .4byte .LASF1795 + .byte 0x5 + .byte 0xf4,0x9 + .4byte .LASF1796 + .byte 0x5 + .byte 0xf5,0x9 + .4byte .LASF1797 + .byte 0x5 + .byte 0xf6,0x9 + .4byte .LASF1798 + .byte 0x5 + .byte 0xf7,0x9 + .4byte .LASF1799 + .byte 0x5 + .byte 0xf8,0x9 + .4byte .LASF1800 + .byte 0x5 + .byte 0xf9,0x9 + .4byte .LASF1801 + .byte 0x5 + .byte 0xfa,0x9 + .4byte .LASF1802 + .byte 0x5 + .byte 0xfb,0x9 + .4byte .LASF1803 + .byte 0x5 + .byte 0xfc,0x9 + .4byte .LASF1804 + .byte 0x5 + .byte 0xfd,0x9 + .4byte .LASF1805 + .byte 0x5 + .byte 0xfe,0x9 + .4byte .LASF1806 + .byte 0x5 + .byte 0xff,0x9 + .4byte .LASF1807 + .byte 0x5 + .byte 0x80,0xa + .4byte .LASF1808 + .byte 0x5 + .byte 0x81,0xa + .4byte .LASF1809 + .byte 0x5 + .byte 0x82,0xa + .4byte .LASF1810 + .byte 0x5 + .byte 0x83,0xa + .4byte .LASF1811 + .byte 0x5 + .byte 0x86,0xa + .4byte .LASF1812 + .byte 0x5 + .byte 0x87,0xa + .4byte .LASF1813 + .byte 0x5 + .byte 0x88,0xa + .4byte .LASF1814 + .byte 0x5 + .byte 0x89,0xa + .4byte .LASF1815 + .byte 0x5 + .byte 0x8a,0xa + .4byte .LASF1816 + .byte 0x5 + .byte 0x8b,0xa + .4byte .LASF1817 + .byte 0x5 + .byte 0x8c,0xa + .4byte .LASF1818 + .byte 0x5 + .byte 0x8d,0xa + .4byte .LASF1819 + .byte 0x5 + .byte 0x8e,0xa + .4byte .LASF1820 + .byte 0x5 + .byte 0x8f,0xa + .4byte .LASF1821 + .byte 0x5 + .byte 0x90,0xa + .4byte .LASF1822 + .byte 0x5 + .byte 0x91,0xa + .4byte .LASF1823 + .byte 0x5 + .byte 0x92,0xa + .4byte .LASF1824 + .byte 0x5 + .byte 0x93,0xa + .4byte .LASF1825 + .byte 0x5 + .byte 0x94,0xa + .4byte .LASF1826 + .byte 0x5 + .byte 0x95,0xa + .4byte .LASF1827 + .byte 0x5 + .byte 0x96,0xa + .4byte .LASF1828 + .byte 0x5 + .byte 0x97,0xa + .4byte .LASF1829 + .byte 0x5 + .byte 0x98,0xa + .4byte .LASF1830 + .byte 0x5 + .byte 0x99,0xa + .4byte .LASF1831 + .byte 0x5 + .byte 0x9a,0xa + .4byte .LASF1832 + .byte 0x5 + .byte 0x9b,0xa + .4byte .LASF1833 + .byte 0x5 + .byte 0x9c,0xa + .4byte .LASF1834 + .byte 0x5 + .byte 0x9d,0xa + .4byte .LASF1835 + .byte 0x5 + .byte 0x9e,0xa + .4byte .LASF1836 + .byte 0x5 + .byte 0x9f,0xa + .4byte .LASF1837 + .byte 0x5 + .byte 0xa0,0xa + .4byte .LASF1838 + .byte 0x5 + .byte 0xa1,0xa + .4byte .LASF1839 + .byte 0x5 + .byte 0xa4,0xa + .4byte .LASF1840 + .byte 0x5 + .byte 0xa5,0xa + .4byte .LASF1841 + .byte 0x5 + .byte 0xa6,0xa + .4byte .LASF1842 + .byte 0x5 + .byte 0xa7,0xa + .4byte .LASF1843 + .byte 0x5 + .byte 0xa8,0xa + .4byte .LASF1844 + .byte 0x5 + .byte 0xa9,0xa + .4byte .LASF1845 + .byte 0x5 + .byte 0xaa,0xa + .4byte .LASF1846 + .byte 0x5 + .byte 0xab,0xa + .4byte .LASF1847 + .byte 0x5 + .byte 0xad,0xa + .4byte .LASF1848 + .byte 0x5 + .byte 0xae,0xa + .4byte .LASF1849 + .byte 0x5 + .byte 0xaf,0xa + .4byte .LASF1850 + .byte 0x5 + .byte 0xb1,0xa + .4byte .LASF1851 + .byte 0x5 + .byte 0xb2,0xa + .4byte .LASF1852 + .byte 0x5 + .byte 0xb3,0xa + .4byte .LASF1853 + .byte 0x5 + .byte 0xb5,0xa + .4byte .LASF1854 + .byte 0x5 + .byte 0xb6,0xa + .4byte .LASF1855 + .byte 0x5 + .byte 0xb7,0xa + .4byte .LASF1856 + .byte 0x5 + .byte 0xb9,0xa + .4byte .LASF1857 + .byte 0x5 + .byte 0xbc,0xa + .4byte .LASF1858 + .byte 0x5 + .byte 0xbd,0xa + .4byte .LASF1859 + .byte 0x5 + .byte 0xbe,0xa + .4byte .LASF1860 + .byte 0x5 + .byte 0xbf,0xa + .4byte .LASF1861 + .byte 0x5 + .byte 0xc0,0xa + .4byte .LASF1862 + .byte 0x5 + .byte 0xc1,0xa + .4byte .LASF1863 + .byte 0x5 + .byte 0xc2,0xa + .4byte .LASF1864 + .byte 0x5 + .byte 0xc3,0xa + .4byte .LASF1865 + .byte 0x5 + .byte 0xc5,0xa + .4byte .LASF1866 + .byte 0x5 + .byte 0xc6,0xa + .4byte .LASF1867 + .byte 0x5 + .byte 0xc7,0xa + .4byte .LASF1868 + .byte 0x5 + .byte 0xc9,0xa + .4byte .LASF1869 + .byte 0x5 + .byte 0xca,0xa + .4byte .LASF1870 + .byte 0x5 + .byte 0xcb,0xa + .4byte .LASF1871 + .byte 0x5 + .byte 0xcd,0xa + .4byte .LASF1872 + .byte 0x5 + .byte 0xce,0xa + .4byte .LASF1873 + .byte 0x5 + .byte 0xcf,0xa + .4byte .LASF1874 + .byte 0x5 + .byte 0xd1,0xa + .4byte .LASF1875 + .byte 0x5 + .byte 0xd4,0xa + .4byte .LASF1876 + .byte 0x5 + .byte 0xd5,0xa + .4byte .LASF1877 + .byte 0x5 + .byte 0xd6,0xa + .4byte .LASF1878 + .byte 0x5 + .byte 0xd7,0xa + .4byte .LASF1879 + .byte 0x5 + .byte 0xd8,0xa + .4byte .LASF1880 + .byte 0x5 + .byte 0xd9,0xa + .4byte .LASF1881 + .byte 0x5 + .byte 0xda,0xa + .4byte .LASF1882 + .byte 0x5 + .byte 0xdb,0xa + .4byte .LASF1883 + .byte 0x5 + .byte 0xdd,0xa + .4byte .LASF1884 + .byte 0x5 + .byte 0xde,0xa + .4byte .LASF1885 + .byte 0x5 + .byte 0xdf,0xa + .4byte .LASF1886 + .byte 0x5 + .byte 0xe1,0xa + .4byte .LASF1887 + .byte 0x5 + .byte 0xe2,0xa + .4byte .LASF1888 + .byte 0x5 + .byte 0xe3,0xa + .4byte .LASF1889 + .byte 0x5 + .byte 0xe5,0xa + .4byte .LASF1890 + .byte 0x5 + .byte 0xe6,0xa + .4byte .LASF1891 + .byte 0x5 + .byte 0xe7,0xa + .4byte .LASF1892 + .byte 0x5 + .byte 0xe9,0xa + .4byte .LASF1893 + .byte 0x5 + .byte 0xec,0xa + .4byte .LASF1894 + .byte 0x5 + .byte 0xed,0xa + .4byte .LASF1895 + .byte 0x5 + .byte 0xee,0xa + .4byte .LASF1896 + .byte 0x5 + .byte 0xef,0xa + .4byte .LASF1897 + .byte 0x5 + .byte 0xf0,0xa + .4byte .LASF1898 + .byte 0x5 + .byte 0xf1,0xa + .4byte .LASF1899 + .byte 0x5 + .byte 0xf2,0xa + .4byte .LASF1900 + .byte 0x5 + .byte 0xf3,0xa + .4byte .LASF1901 + .byte 0x5 + .byte 0xf5,0xa + .4byte .LASF1902 + .byte 0x5 + .byte 0xf6,0xa + .4byte .LASF1903 + .byte 0x5 + .byte 0xf7,0xa + .4byte .LASF1904 + .byte 0x5 + .byte 0xf9,0xa + .4byte .LASF1905 + .byte 0x5 + .byte 0xfa,0xa + .4byte .LASF1906 + .byte 0x5 + .byte 0xfb,0xa + .4byte .LASF1907 + .byte 0x5 + .byte 0xfd,0xa + .4byte .LASF1908 + .byte 0x5 + .byte 0xfe,0xa + .4byte .LASF1909 + .byte 0x5 + .byte 0xff,0xa + .4byte .LASF1910 + .byte 0x5 + .byte 0x81,0xb + .4byte .LASF1911 + .byte 0x5 + .byte 0x84,0xb + .4byte .LASF1912 + .byte 0x5 + .byte 0x85,0xb + .4byte .LASF1913 + .byte 0x5 + .byte 0x86,0xb + .4byte .LASF1914 + .byte 0x5 + .byte 0x87,0xb + .4byte .LASF1915 + .byte 0x5 + .byte 0x88,0xb + .4byte .LASF1916 + .byte 0x5 + .byte 0x89,0xb + .4byte .LASF1917 + .byte 0x5 + .byte 0x8a,0xb + .4byte .LASF1918 + .byte 0x5 + .byte 0x8b,0xb + .4byte .LASF1919 + .byte 0x5 + .byte 0x8d,0xb + .4byte .LASF1920 + .byte 0x5 + .byte 0x8e,0xb + .4byte .LASF1921 + .byte 0x5 + .byte 0x8f,0xb + .4byte .LASF1922 + .byte 0x5 + .byte 0x91,0xb + .4byte .LASF1923 + .byte 0x5 + .byte 0x92,0xb + .4byte .LASF1924 + .byte 0x5 + .byte 0x93,0xb + .4byte .LASF1925 + .byte 0x5 + .byte 0x95,0xb + .4byte .LASF1926 + .byte 0x5 + .byte 0x96,0xb + .4byte .LASF1927 + .byte 0x5 + .byte 0x97,0xb + .4byte .LASF1928 + .byte 0x5 + .byte 0x99,0xb + .4byte .LASF1929 + .byte 0x5 + .byte 0x9c,0xb + .4byte .LASF1930 + .byte 0x5 + .byte 0x9d,0xb + .4byte .LASF1931 + .byte 0x5 + .byte 0x9e,0xb + .4byte .LASF1932 + .byte 0x5 + .byte 0x9f,0xb + .4byte .LASF1933 + .byte 0x5 + .byte 0xa0,0xb + .4byte .LASF1934 + .byte 0x5 + .byte 0xa1,0xb + .4byte .LASF1935 + .byte 0x5 + .byte 0xa2,0xb + .4byte .LASF1936 + .byte 0x5 + .byte 0xa3,0xb + .4byte .LASF1937 + .byte 0x5 + .byte 0xa5,0xb + .4byte .LASF1938 + .byte 0x5 + .byte 0xa6,0xb + .4byte .LASF1939 + .byte 0x5 + .byte 0xa7,0xb + .4byte .LASF1940 + .byte 0x5 + .byte 0xa9,0xb + .4byte .LASF1941 + .byte 0x5 + .byte 0xaa,0xb + .4byte .LASF1942 + .byte 0x5 + .byte 0xab,0xb + .4byte .LASF1943 + .byte 0x5 + .byte 0xad,0xb + .4byte .LASF1944 + .byte 0x5 + .byte 0xae,0xb + .4byte .LASF1945 + .byte 0x5 + .byte 0xaf,0xb + .4byte .LASF1946 + .byte 0x5 + .byte 0xb1,0xb + .4byte .LASF1947 + .byte 0x5 + .byte 0xb4,0xb + .4byte .LASF1948 + .byte 0x5 + .byte 0xb5,0xb + .4byte .LASF1949 + .byte 0x5 + .byte 0xb6,0xb + .4byte .LASF1950 + .byte 0x5 + .byte 0xb7,0xb + .4byte .LASF1951 + .byte 0x5 + .byte 0xb8,0xb + .4byte .LASF1952 + .byte 0x5 + .byte 0xb9,0xb + .4byte .LASF1953 + .byte 0x5 + .byte 0xba,0xb + .4byte .LASF1954 + .byte 0x5 + .byte 0xbb,0xb + .4byte .LASF1955 + .byte 0x5 + .byte 0xbd,0xb + .4byte .LASF1956 + .byte 0x5 + .byte 0xbe,0xb + .4byte .LASF1957 + .byte 0x5 + .byte 0xbf,0xb + .4byte .LASF1958 + .byte 0x5 + .byte 0xc1,0xb + .4byte .LASF1959 + .byte 0x5 + .byte 0xc2,0xb + .4byte .LASF1960 + .byte 0x5 + .byte 0xc3,0xb + .4byte .LASF1961 + .byte 0x5 + .byte 0xc5,0xb + .4byte .LASF1962 + .byte 0x5 + .byte 0xc6,0xb + .4byte .LASF1963 + .byte 0x5 + .byte 0xc7,0xb + .4byte .LASF1964 + .byte 0x5 + .byte 0xc9,0xb + .4byte .LASF1965 + .byte 0x5 + .byte 0xcc,0xb + .4byte .LASF1966 + .byte 0x5 + .byte 0xcf,0xb + .4byte .LASF1967 + .byte 0x5 + .byte 0xd2,0xb + .4byte .LASF1968 + .byte 0x5 + .byte 0xd5,0xb + .4byte .LASF1969 + .byte 0x5 + .byte 0xd8,0xb + .4byte .LASF1970 + .byte 0x5 + .byte 0xdb,0xb + .4byte .LASF1971 + .byte 0x5 + .byte 0xde,0xb + .4byte .LASF1972 + .byte 0x5 + .byte 0xe1,0xb + .4byte .LASF1973 + .byte 0x5 + .byte 0xe4,0xb + .4byte .LASF1974 + .byte 0x5 + .byte 0xe7,0xb + .4byte .LASF1975 + .byte 0x5 + .byte 0xea,0xb + .4byte .LASF1976 + .byte 0x5 + .byte 0xed,0xb + .4byte .LASF1977 + .byte 0x5 + .byte 0xf0,0xb + .4byte .LASF1978 + .byte 0x5 + .byte 0xf3,0xb + .4byte .LASF1979 + .byte 0x5 + .byte 0xf6,0xb + .4byte .LASF1980 + .byte 0x5 + .byte 0xf9,0xb + .4byte .LASF1981 + .byte 0x5 + .byte 0xfc,0xb + .4byte .LASF1982 + .byte 0x5 + .byte 0xff,0xb + .4byte .LASF1983 + .byte 0x5 + .byte 0x82,0xc + .4byte .LASF1984 + .byte 0x5 + .byte 0x85,0xc + .4byte .LASF1985 + .byte 0x5 + .byte 0x88,0xc + .4byte .LASF1986 + .byte 0x5 + .byte 0x90,0xc + .4byte .LASF1987 + .byte 0x5 + .byte 0x91,0xc + .4byte .LASF1988 + .byte 0x5 + .byte 0x92,0xc + .4byte .LASF1989 + .byte 0x5 + .byte 0x93,0xc + .4byte .LASF1990 + .byte 0x5 + .byte 0x94,0xc + .4byte .LASF1991 + .byte 0x5 + .byte 0x95,0xc + .4byte .LASF1992 + .byte 0x5 + .byte 0x96,0xc + .4byte .LASF1993 + .byte 0x5 + .byte 0x97,0xc + .4byte .LASF1994 + .byte 0x5 + .byte 0x98,0xc + .4byte .LASF1995 + .byte 0x5 + .byte 0x99,0xc + .4byte .LASF1996 + .byte 0x5 + .byte 0x9a,0xc + .4byte .LASF1997 + .byte 0x5 + .byte 0x9b,0xc + .4byte .LASF1998 + .byte 0x5 + .byte 0x9c,0xc + .4byte .LASF1999 + .byte 0x5 + .byte 0x9d,0xc + .4byte .LASF2000 + .byte 0x5 + .byte 0x9e,0xc + .4byte .LASF2001 + .byte 0x5 + .byte 0x9f,0xc + .4byte .LASF2002 + .byte 0x5 + .byte 0xa0,0xc + .4byte .LASF2003 + .byte 0x5 + .byte 0xa1,0xc + .4byte .LASF2004 + .byte 0x5 + .byte 0xa2,0xc + .4byte .LASF2005 + .byte 0x5 + .byte 0xa3,0xc + .4byte .LASF2006 + .byte 0x5 + .byte 0xa6,0xc + .4byte .LASF2007 + .byte 0x5 + .byte 0xa7,0xc + .4byte .LASF2008 + .byte 0x5 + .byte 0xa8,0xc + .4byte .LASF2009 + .byte 0x5 + .byte 0xa9,0xc + .4byte .LASF2010 + .byte 0x5 + .byte 0xaa,0xc + .4byte .LASF2011 + .byte 0x5 + .byte 0xab,0xc + .4byte .LASF2012 + .byte 0x5 + .byte 0xac,0xc + .4byte .LASF2013 + .byte 0x5 + .byte 0xad,0xc + .4byte .LASF2014 + .byte 0x5 + .byte 0xae,0xc + .4byte .LASF2015 + .byte 0x5 + .byte 0xaf,0xc + .4byte .LASF2016 + .byte 0x5 + .byte 0xb0,0xc + .4byte .LASF2017 + .byte 0x5 + .byte 0xb1,0xc + .4byte .LASF2018 + .byte 0x5 + .byte 0xb2,0xc + .4byte .LASF2019 + .byte 0x5 + .byte 0xb3,0xc + .4byte .LASF2020 + .byte 0x5 + .byte 0xb4,0xc + .4byte .LASF2021 + .byte 0x5 + .byte 0xb5,0xc + .4byte .LASF2022 + .byte 0x5 + .byte 0xb6,0xc + .4byte .LASF2023 + .byte 0x5 + .byte 0xb7,0xc + .4byte .LASF2024 + .byte 0x5 + .byte 0xb8,0xc + .4byte .LASF2025 + .byte 0x5 + .byte 0xb9,0xc + .4byte .LASF2026 + .byte 0x5 + .byte 0xbc,0xc + .4byte .LASF2027 + .byte 0x5 + .byte 0xbd,0xc + .4byte .LASF2028 + .byte 0x5 + .byte 0xbe,0xc + .4byte .LASF2029 + .byte 0x5 + .byte 0xbf,0xc + .4byte .LASF2030 + .byte 0x5 + .byte 0xc0,0xc + .4byte .LASF2031 + .byte 0x5 + .byte 0xc1,0xc + .4byte .LASF2032 + .byte 0x5 + .byte 0xc2,0xc + .4byte .LASF2033 + .byte 0x5 + .byte 0xc3,0xc + .4byte .LASF2034 + .byte 0x5 + .byte 0xc4,0xc + .4byte .LASF2035 + .byte 0x5 + .byte 0xc5,0xc + .4byte .LASF2036 + .byte 0x5 + .byte 0xc6,0xc + .4byte .LASF2037 + .byte 0x5 + .byte 0xc7,0xc + .4byte .LASF2038 + .byte 0x5 + .byte 0xc8,0xc + .4byte .LASF2039 + .byte 0x5 + .byte 0xc9,0xc + .4byte .LASF2040 + .byte 0x5 + .byte 0xca,0xc + .4byte .LASF2041 + .byte 0x5 + .byte 0xcb,0xc + .4byte .LASF2042 + .byte 0x5 + .byte 0xcc,0xc + .4byte .LASF2043 + .byte 0x5 + .byte 0xcd,0xc + .4byte .LASF2044 + .byte 0x5 + .byte 0xce,0xc + .4byte .LASF2045 + .byte 0x5 + .byte 0xcf,0xc + .4byte .LASF2046 + .byte 0x5 + .byte 0xd2,0xc + .4byte .LASF2047 + .byte 0x5 + .byte 0xd3,0xc + .4byte .LASF2048 + .byte 0x5 + .byte 0xd4,0xc + .4byte .LASF2049 + .byte 0x5 + .byte 0xd5,0xc + .4byte .LASF2050 + .byte 0x5 + .byte 0xd6,0xc + .4byte .LASF2051 + .byte 0x5 + .byte 0xd7,0xc + .4byte .LASF2052 + .byte 0x5 + .byte 0xd8,0xc + .4byte .LASF2053 + .byte 0x5 + .byte 0xd9,0xc + .4byte .LASF2054 + .byte 0x5 + .byte 0xda,0xc + .4byte .LASF2055 + .byte 0x5 + .byte 0xdb,0xc + .4byte .LASF2056 + .byte 0x5 + .byte 0xdc,0xc + .4byte .LASF2057 + .byte 0x5 + .byte 0xdd,0xc + .4byte .LASF2058 + .byte 0x5 + .byte 0xde,0xc + .4byte .LASF2059 + .byte 0x5 + .byte 0xdf,0xc + .4byte .LASF2060 + .byte 0x5 + .byte 0xe0,0xc + .4byte .LASF2061 + .byte 0x5 + .byte 0xe1,0xc + .4byte .LASF2062 + .byte 0x5 + .byte 0xe2,0xc + .4byte .LASF2063 + .byte 0x5 + .byte 0xe3,0xc + .4byte .LASF2064 + .byte 0x5 + .byte 0xe4,0xc + .4byte .LASF2065 + .byte 0x5 + .byte 0xe5,0xc + .4byte .LASF2066 + .byte 0x5 + .byte 0xe8,0xc + .4byte .LASF2067 + .byte 0x5 + .byte 0xe9,0xc + .4byte .LASF2068 + .byte 0x5 + .byte 0xea,0xc + .4byte .LASF2069 + .byte 0x5 + .byte 0xeb,0xc + .4byte .LASF2070 + .byte 0x5 + .byte 0xec,0xc + .4byte .LASF2071 + .byte 0x5 + .byte 0xed,0xc + .4byte .LASF2072 + .byte 0x5 + .byte 0xee,0xc + .4byte .LASF2073 + .byte 0x5 + .byte 0xef,0xc + .4byte .LASF2074 + .byte 0x5 + .byte 0xf0,0xc + .4byte .LASF2075 + .byte 0x5 + .byte 0xf1,0xc + .4byte .LASF2076 + .byte 0x5 + .byte 0xf2,0xc + .4byte .LASF2077 + .byte 0x5 + .byte 0xf3,0xc + .4byte .LASF2078 + .byte 0x5 + .byte 0xf4,0xc + .4byte .LASF2079 + .byte 0x5 + .byte 0xf5,0xc + .4byte .LASF2080 + .byte 0x5 + .byte 0xf6,0xc + .4byte .LASF2081 + .byte 0x5 + .byte 0xf7,0xc + .4byte .LASF2082 + .byte 0x5 + .byte 0xf8,0xc + .4byte .LASF2083 + .byte 0x5 + .byte 0xf9,0xc + .4byte .LASF2084 + .byte 0x5 + .byte 0xfa,0xc + .4byte .LASF2085 + .byte 0x5 + .byte 0xfb,0xc + .4byte .LASF2086 + .byte 0x5 + .byte 0xfe,0xc + .4byte .LASF2087 + .byte 0x5 + .byte 0xff,0xc + .4byte .LASF2088 + .byte 0x5 + .byte 0x80,0xd + .4byte .LASF2089 + .byte 0x5 + .byte 0x81,0xd + .4byte .LASF2090 + .byte 0x5 + .byte 0x82,0xd + .4byte .LASF2091 + .byte 0x5 + .byte 0x83,0xd + .4byte .LASF2092 + .byte 0x5 + .byte 0x84,0xd + .4byte .LASF2093 + .byte 0x5 + .byte 0x85,0xd + .4byte .LASF2094 + .byte 0x5 + .byte 0x86,0xd + .4byte .LASF2095 + .byte 0x5 + .byte 0x87,0xd + .4byte .LASF2096 + .byte 0x5 + .byte 0x88,0xd + .4byte .LASF2097 + .byte 0x5 + .byte 0x89,0xd + .4byte .LASF2098 + .byte 0x5 + .byte 0x8a,0xd + .4byte .LASF2099 + .byte 0x5 + .byte 0x8b,0xd + .4byte .LASF2100 + .byte 0x5 + .byte 0x8c,0xd + .4byte .LASF2101 + .byte 0x5 + .byte 0x8d,0xd + .4byte .LASF2102 + .byte 0x5 + .byte 0x8e,0xd + .4byte .LASF2103 + .byte 0x5 + .byte 0x8f,0xd + .4byte .LASF2104 + .byte 0x5 + .byte 0x90,0xd + .4byte .LASF2105 + .byte 0x5 + .byte 0x91,0xd + .4byte .LASF2106 + .byte 0x5 + .byte 0x99,0xd + .4byte .LASF2107 + .byte 0x5 + .byte 0x9a,0xd + .4byte .LASF2108 + .byte 0x5 + .byte 0x9b,0xd + .4byte .LASF2109 + .byte 0x5 + .byte 0x9c,0xd + .4byte .LASF2110 + .byte 0x5 + .byte 0x9e,0xd + .4byte .LASF2111 + .byte 0x5 + .byte 0x9f,0xd + .4byte .LASF2112 + .byte 0x5 + .byte 0xa0,0xd + .4byte .LASF2113 + .byte 0x5 + .byte 0xa3,0xd + .4byte .LASF2114 + .byte 0x5 + .byte 0xa6,0xd + .4byte .LASF2115 + .byte 0x5 + .byte 0xa9,0xd + .4byte .LASF2116 + .byte 0x5 + .byte 0xaa,0xd + .4byte .LASF2117 + .byte 0x5 + .byte 0xab,0xd + .4byte .LASF2118 + .byte 0x5 + .byte 0xac,0xd + .4byte .LASF2119 + .byte 0x5 + .byte 0xaf,0xd + .4byte .LASF2120 + .byte 0x5 + .byte 0xb0,0xd + .4byte .LASF2121 + .byte 0x5 + .byte 0xb1,0xd + .4byte .LASF2122 + .byte 0x5 + .byte 0xb2,0xd + .4byte .LASF2123 + .byte 0x5 + .byte 0xb3,0xd + .4byte .LASF2124 + .byte 0x5 + .byte 0xb4,0xd + .4byte .LASF2125 + .byte 0x5 + .byte 0xb5,0xd + .4byte .LASF2126 + .byte 0x5 + .byte 0xb6,0xd + .4byte .LASF2127 + .byte 0x5 + .byte 0xb7,0xd + .4byte .LASF2128 + .byte 0x5 + .byte 0xb8,0xd + .4byte .LASF2129 + .byte 0x5 + .byte 0xb9,0xd + .4byte .LASF2130 + .byte 0x5 + .byte 0xba,0xd + .4byte .LASF2131 + .byte 0x5 + .byte 0xbb,0xd + .4byte .LASF2132 + .byte 0x5 + .byte 0xbc,0xd + .4byte .LASF2133 + .byte 0x5 + .byte 0xbf,0xd + .4byte .LASF2134 + .byte 0x5 + .byte 0xc2,0xd + .4byte .LASF2135 + .byte 0x5 + .byte 0xc3,0xd + .4byte .LASF2136 + .byte 0x5 + .byte 0xc5,0xd + .4byte .LASF2137 + .byte 0x5 + .byte 0xc6,0xd + .4byte .LASF2138 + .byte 0x5 + .byte 0xc7,0xd + .4byte .LASF2139 + .byte 0x5 + .byte 0xc8,0xd + .4byte .LASF2140 + .byte 0x5 + .byte 0xc9,0xd + .4byte .LASF2141 + .byte 0x5 + .byte 0xcc,0xd + .4byte .LASF2142 + .byte 0x5 + .byte 0xcf,0xd + .4byte .LASF2143 + .byte 0x5 + .byte 0xd0,0xd + .4byte .LASF2144 + .byte 0x5 + .byte 0xd3,0xd + .4byte .LASF2145 + .byte 0x5 + .byte 0xd4,0xd + .4byte .LASF2146 + .byte 0x5 + .byte 0xd7,0xd + .4byte .LASF2147 + .byte 0x5 + .byte 0xd8,0xd + .4byte .LASF2148 + .byte 0x5 + .byte 0xdb,0xd + .4byte .LASF2149 + .byte 0x5 + .byte 0xdc,0xd + .4byte .LASF2150 + .byte 0x5 + .byte 0xdf,0xd + .4byte .LASF2151 + .byte 0x5 + .byte 0xe0,0xd + .4byte .LASF2152 + .byte 0x5 + .byte 0xe3,0xd + .4byte .LASF2153 + .byte 0x5 + .byte 0xe4,0xd + .4byte .LASF2154 + .byte 0x5 + .byte 0xe7,0xd + .4byte .LASF2155 + .byte 0x5 + .byte 0xe8,0xd + .4byte .LASF2156 + .byte 0x5 + .byte 0xeb,0xd + .4byte .LASF2157 + .byte 0x5 + .byte 0xec,0xd + .4byte .LASF2158 + .byte 0x5 + .byte 0xf3,0xd + .4byte .LASF2159 + .byte 0x5 + .byte 0xf5,0xd + .4byte .LASF2160 + .byte 0x5 + .byte 0xf6,0xd + .4byte .LASF2161 + .byte 0x5 + .byte 0xf7,0xd + .4byte .LASF2162 + .byte 0x5 + .byte 0xf9,0xd + .4byte .LASF2163 + .byte 0x5 + .byte 0xfa,0xd + .4byte .LASF2164 + .byte 0x5 + .byte 0xfb,0xd + .4byte .LASF2165 + .byte 0x5 + .byte 0xfd,0xd + .4byte .LASF2166 + .byte 0x5 + .byte 0xfe,0xd + .4byte .LASF2167 + .byte 0x5 + .byte 0xff,0xd + .4byte .LASF2168 + .byte 0x5 + .byte 0x81,0xe + .4byte .LASF2169 + .byte 0x5 + .byte 0x82,0xe + .4byte .LASF2170 + .byte 0x5 + .byte 0x83,0xe + .4byte .LASF2171 + .byte 0x5 + .byte 0x85,0xe + .4byte .LASF2172 + .byte 0x5 + .byte 0x86,0xe + .4byte .LASF2173 + .byte 0x5 + .byte 0x87,0xe + .4byte .LASF2174 + .byte 0x5 + .byte 0x89,0xe + .4byte .LASF2175 + .byte 0x5 + .byte 0x8a,0xe + .4byte .LASF2176 + .byte 0x5 + .byte 0x8b,0xe + .4byte .LASF2177 + .byte 0x5 + .byte 0x8d,0xe + .4byte .LASF2178 + .byte 0x5 + .byte 0x8e,0xe + .4byte .LASF2179 + .byte 0x5 + .byte 0x8f,0xe + .4byte .LASF2180 + .byte 0x5 + .byte 0x91,0xe + .4byte .LASF2181 + .byte 0x5 + .byte 0x92,0xe + .4byte .LASF2182 + .byte 0x5 + .byte 0x93,0xe + .4byte .LASF2183 + .byte 0x5 + .byte 0x95,0xe + .4byte .LASF2184 + .byte 0x5 + .byte 0x97,0xe + .4byte .LASF2185 + .byte 0x5 + .byte 0x98,0xe + .4byte .LASF2186 + .byte 0x5 + .byte 0x99,0xe + .4byte .LASF2187 + .byte 0x5 + .byte 0x9b,0xe + .4byte .LASF2188 + .byte 0x5 + .byte 0x9c,0xe + .4byte .LASF2189 + .byte 0x5 + .byte 0x9d,0xe + .4byte .LASF2190 + .byte 0x5 + .byte 0x9f,0xe + .4byte .LASF2191 + .byte 0x5 + .byte 0xa0,0xe + .4byte .LASF2192 + .byte 0x5 + .byte 0xa1,0xe + .4byte .LASF2193 + .byte 0x5 + .byte 0xa3,0xe + .4byte .LASF2194 + .byte 0x5 + .byte 0xa4,0xe + .4byte .LASF2195 + .byte 0x5 + .byte 0xa5,0xe + .4byte .LASF2196 + .byte 0x5 + .byte 0xa7,0xe + .4byte .LASF2197 + .byte 0x5 + .byte 0xa8,0xe + .4byte .LASF2198 + .byte 0x5 + .byte 0xa9,0xe + .4byte .LASF2199 + .byte 0x5 + .byte 0xab,0xe + .4byte .LASF2200 + .byte 0x5 + .byte 0xac,0xe + .4byte .LASF2201 + .byte 0x5 + .byte 0xad,0xe + .4byte .LASF2202 + .byte 0x5 + .byte 0xaf,0xe + .4byte .LASF2203 + .byte 0x5 + .byte 0xb0,0xe + .4byte .LASF2204 + .byte 0x5 + .byte 0xb1,0xe + .4byte .LASF2205 + .byte 0x5 + .byte 0xb3,0xe + .4byte .LASF2206 + .byte 0x5 + .byte 0xb4,0xe + .4byte .LASF2207 + .byte 0x5 + .byte 0xb5,0xe + .4byte .LASF2208 + .byte 0x5 + .byte 0xb8,0xe + .4byte .LASF2209 + .byte 0x5 + .byte 0xba,0xe + .4byte .LASF2210 + .byte 0x5 + .byte 0xbb,0xe + .4byte .LASF2211 + .byte 0x5 + .byte 0xbc,0xe + .4byte .LASF2212 + .byte 0x5 + .byte 0xbe,0xe + .4byte .LASF2213 + .byte 0x5 + .byte 0xbf,0xe + .4byte .LASF2214 + .byte 0x5 + .byte 0xc0,0xe + .4byte .LASF2215 + .byte 0x5 + .byte 0xc2,0xe + .4byte .LASF2216 + .byte 0x5 + .byte 0xc3,0xe + .4byte .LASF2217 + .byte 0x5 + .byte 0xc4,0xe + .4byte .LASF2218 + .byte 0x5 + .byte 0xc6,0xe + .4byte .LASF2219 + .byte 0x5 + .byte 0xc7,0xe + .4byte .LASF2220 + .byte 0x5 + .byte 0xc8,0xe + .4byte .LASF2221 + .byte 0x5 + .byte 0xca,0xe + .4byte .LASF2222 + .byte 0x5 + .byte 0xcb,0xe + .4byte .LASF2223 + .byte 0x5 + .byte 0xcc,0xe + .4byte .LASF2224 + .byte 0x5 + .byte 0xce,0xe + .4byte .LASF2225 + .byte 0x5 + .byte 0xcf,0xe + .4byte .LASF2226 + .byte 0x5 + .byte 0xd0,0xe + .4byte .LASF2227 + .byte 0x5 + .byte 0xd2,0xe + .4byte .LASF2228 + .byte 0x5 + .byte 0xd3,0xe + .4byte .LASF2229 + .byte 0x5 + .byte 0xd4,0xe + .4byte .LASF2230 + .byte 0x5 + .byte 0xd6,0xe + .4byte .LASF2231 + .byte 0x5 + .byte 0xd7,0xe + .4byte .LASF2232 + .byte 0x5 + .byte 0xd8,0xe + .4byte .LASF2233 + .byte 0x5 + .byte 0xda,0xe + .4byte .LASF2234 + .byte 0x5 + .byte 0xdc,0xe + .4byte .LASF2235 + .byte 0x5 + .byte 0xdd,0xe + .4byte .LASF2236 + .byte 0x5 + .byte 0xde,0xe + .4byte .LASF2237 + .byte 0x5 + .byte 0xe0,0xe + .4byte .LASF2238 + .byte 0x5 + .byte 0xe1,0xe + .4byte .LASF2239 + .byte 0x5 + .byte 0xe2,0xe + .4byte .LASF2240 + .byte 0x5 + .byte 0xe4,0xe + .4byte .LASF2241 + .byte 0x5 + .byte 0xe5,0xe + .4byte .LASF2242 + .byte 0x5 + .byte 0xe6,0xe + .4byte .LASF2243 + .byte 0x5 + .byte 0xe8,0xe + .4byte .LASF2244 + .byte 0x5 + .byte 0xe9,0xe + .4byte .LASF2245 + .byte 0x5 + .byte 0xea,0xe + .4byte .LASF2246 + .byte 0x5 + .byte 0xec,0xe + .4byte .LASF2247 + .byte 0x5 + .byte 0xed,0xe + .4byte .LASF2248 + .byte 0x5 + .byte 0xee,0xe + .4byte .LASF2249 + .byte 0x5 + .byte 0xf0,0xe + .4byte .LASF2250 + .byte 0x5 + .byte 0xf1,0xe + .4byte .LASF2251 + .byte 0x5 + .byte 0xf2,0xe + .4byte .LASF2252 + .byte 0x5 + .byte 0xf4,0xe + .4byte .LASF2253 + .byte 0x5 + .byte 0xf5,0xe + .4byte .LASF2254 + .byte 0x5 + .byte 0xf6,0xe + .4byte .LASF2255 + .byte 0x5 + .byte 0xf8,0xe + .4byte .LASF2256 + .byte 0x5 + .byte 0xf9,0xe + .4byte .LASF2257 + .byte 0x5 + .byte 0xfa,0xe + .4byte .LASF2258 + .byte 0x5 + .byte 0xfd,0xe + .4byte .LASF2259 + .byte 0x5 + .byte 0xfe,0xe + .4byte .LASF2260 + .byte 0x5 + .byte 0xff,0xe + .4byte .LASF2261 + .byte 0x5 + .byte 0x80,0xf + .4byte .LASF2262 + .byte 0x5 + .byte 0x81,0xf + .4byte .LASF2263 + .byte 0x5 + .byte 0x82,0xf + .4byte .LASF2264 + .byte 0x5 + .byte 0x83,0xf + .4byte .LASF2265 + .byte 0x5 + .byte 0x84,0xf + .4byte .LASF2266 + .byte 0x5 + .byte 0x85,0xf + .4byte .LASF2267 + .byte 0x5 + .byte 0x86,0xf + .4byte .LASF2268 + .byte 0x5 + .byte 0x87,0xf + .4byte .LASF2269 + .byte 0x5 + .byte 0x88,0xf + .4byte .LASF2270 + .byte 0x5 + .byte 0x89,0xf + .4byte .LASF2271 + .byte 0x5 + .byte 0x8a,0xf + .4byte .LASF2272 + .byte 0x5 + .byte 0x8b,0xf + .4byte .LASF2273 + .byte 0x5 + .byte 0x8c,0xf + .4byte .LASF2274 + .byte 0x5 + .byte 0x8f,0xf + .4byte .LASF2275 + .byte 0x5 + .byte 0x90,0xf + .4byte .LASF2276 + .byte 0x5 + .byte 0x91,0xf + .4byte .LASF2277 + .byte 0x5 + .byte 0x92,0xf + .4byte .LASF2278 + .byte 0x5 + .byte 0x93,0xf + .4byte .LASF2279 + .byte 0x5 + .byte 0x94,0xf + .4byte .LASF2280 + .byte 0x5 + .byte 0x95,0xf + .4byte .LASF2281 + .byte 0x5 + .byte 0x96,0xf + .4byte .LASF2282 + .byte 0x5 + .byte 0x97,0xf + .4byte .LASF2283 + .byte 0x5 + .byte 0x98,0xf + .4byte .LASF2284 + .byte 0x5 + .byte 0x99,0xf + .4byte .LASF2285 + .byte 0x5 + .byte 0x9a,0xf + .4byte .LASF2286 + .byte 0x5 + .byte 0x9b,0xf + .4byte .LASF2287 + .byte 0x5 + .byte 0x9c,0xf + .4byte .LASF2288 + .byte 0x5 + .byte 0x9d,0xf + .4byte .LASF2289 + .byte 0x5 + .byte 0x9e,0xf + .4byte .LASF2290 + .byte 0x5 + .byte 0xa1,0xf + .4byte .LASF2291 + .byte 0x5 + .byte 0xa2,0xf + .4byte .LASF2292 + .byte 0x5 + .byte 0xa3,0xf + .4byte .LASF2293 + .byte 0x5 + .byte 0xa4,0xf + .4byte .LASF2294 + .byte 0x5 + .byte 0xa5,0xf + .4byte .LASF2295 + .byte 0x5 + .byte 0xa6,0xf + .4byte .LASF2296 + .byte 0x5 + .byte 0xa7,0xf + .4byte .LASF2297 + .byte 0x5 + .byte 0xa8,0xf + .4byte .LASF2298 + .byte 0x5 + .byte 0xa9,0xf + .4byte .LASF2299 + .byte 0x5 + .byte 0xaa,0xf + .4byte .LASF2300 + .byte 0x5 + .byte 0xab,0xf + .4byte .LASF2301 + .byte 0x5 + .byte 0xac,0xf + .4byte .LASF2302 + .byte 0x5 + .byte 0xad,0xf + .4byte .LASF2303 + .byte 0x5 + .byte 0xae,0xf + .4byte .LASF2304 + .byte 0x5 + .byte 0xaf,0xf + .4byte .LASF2305 + .byte 0x5 + .byte 0xb0,0xf + .4byte .LASF2306 + .byte 0x5 + .byte 0xb2,0xf + .4byte .LASF2307 + .byte 0x5 + .byte 0xb3,0xf + .4byte .LASF2308 + .byte 0x5 + .byte 0xb4,0xf + .4byte .LASF2309 + .byte 0x5 + .byte 0xb5,0xf + .4byte .LASF2310 + .byte 0x5 + .byte 0xb6,0xf + .4byte .LASF2311 + .byte 0x5 + .byte 0xb7,0xf + .4byte .LASF2312 + .byte 0x5 + .byte 0xb8,0xf + .4byte .LASF2313 + .byte 0x5 + .byte 0xb9,0xf + .4byte .LASF2314 + .byte 0x5 + .byte 0xba,0xf + .4byte .LASF2315 + .byte 0x5 + .byte 0xbb,0xf + .4byte .LASF2316 + .byte 0x5 + .byte 0xbc,0xf + .4byte .LASF2317 + .byte 0x5 + .byte 0xbd,0xf + .4byte .LASF2318 + .byte 0x5 + .byte 0xbe,0xf + .4byte .LASF2319 + .byte 0x5 + .byte 0xbf,0xf + .4byte .LASF2320 + .byte 0x5 + .byte 0xc0,0xf + .4byte .LASF2321 + .byte 0x5 + .byte 0xc1,0xf + .4byte .LASF2322 + .byte 0x5 + .byte 0xc4,0xf + .4byte .LASF2323 + .byte 0x5 + .byte 0xc5,0xf + .4byte .LASF2324 + .byte 0x5 + .byte 0xc6,0xf + .4byte .LASF2325 + .byte 0x5 + .byte 0xc7,0xf + .4byte .LASF2326 + .byte 0x5 + .byte 0xc8,0xf + .4byte .LASF2327 + .byte 0x5 + .byte 0xc9,0xf + .4byte .LASF2328 + .byte 0x5 + .byte 0xca,0xf + .4byte .LASF2329 + .byte 0x5 + .byte 0xcb,0xf + .4byte .LASF2330 + .byte 0x5 + .byte 0xcc,0xf + .4byte .LASF2331 + .byte 0x5 + .byte 0xcd,0xf + .4byte .LASF2332 + .byte 0x5 + .byte 0xce,0xf + .4byte .LASF2333 + .byte 0x5 + .byte 0xcf,0xf + .4byte .LASF2334 + .byte 0x5 + .byte 0xd0,0xf + .4byte .LASF2335 + .byte 0x5 + .byte 0xd1,0xf + .4byte .LASF2336 + .byte 0x5 + .byte 0xd2,0xf + .4byte .LASF2337 + .byte 0x5 + .byte 0xd3,0xf + .4byte .LASF2338 + .byte 0x5 + .byte 0xd6,0xf + .4byte .LASF2339 + .byte 0x5 + .byte 0xd7,0xf + .4byte .LASF2340 + .byte 0x5 + .byte 0xd8,0xf + .4byte .LASF2341 + .byte 0x5 + .byte 0xd9,0xf + .4byte .LASF2342 + .byte 0x5 + .byte 0xda,0xf + .4byte .LASF2343 + .byte 0x5 + .byte 0xdb,0xf + .4byte .LASF2344 + .byte 0x5 + .byte 0xdc,0xf + .4byte .LASF2345 + .byte 0x5 + .byte 0xdd,0xf + .4byte .LASF2346 + .byte 0x5 + .byte 0xde,0xf + .4byte .LASF2347 + .byte 0x5 + .byte 0xdf,0xf + .4byte .LASF2348 + .byte 0x5 + .byte 0xe0,0xf + .4byte .LASF2349 + .byte 0x5 + .byte 0xe1,0xf + .4byte .LASF2350 + .byte 0x5 + .byte 0xe2,0xf + .4byte .LASF2351 + .byte 0x5 + .byte 0xe3,0xf + .4byte .LASF2352 + .byte 0x5 + .byte 0xe4,0xf + .4byte .LASF2353 + .byte 0x5 + .byte 0xe5,0xf + .4byte .LASF2354 + .byte 0x5 + .byte 0xe6,0xf + .4byte .LASF2355 + .byte 0x5 + .byte 0xea,0xf + .4byte .LASF2356 + .byte 0x5 + .byte 0xeb,0xf + .4byte .LASF2357 + .byte 0x5 + .byte 0xec,0xf + .4byte .LASF2358 + .byte 0x5 + .byte 0xed,0xf + .4byte .LASF2359 + .byte 0x5 + .byte 0xee,0xf + .4byte .LASF2360 + .byte 0x5 + .byte 0xf0,0xf + .4byte .LASF2361 + .byte 0x5 + .byte 0xf1,0xf + .4byte .LASF2362 + .byte 0x5 + .byte 0xf2,0xf + .4byte .LASF2363 + .byte 0x5 + .byte 0xf3,0xf + .4byte .LASF2364 + .byte 0x5 + .byte 0xf4,0xf + .4byte .LASF2365 + .byte 0x5 + .byte 0xf5,0xf + .4byte .LASF2366 + .byte 0x5 + .byte 0xf6,0xf + .4byte .LASF2367 + .byte 0x5 + .byte 0xf7,0xf + .4byte .LASF2368 + .byte 0x5 + .byte 0xf8,0xf + .4byte .LASF2369 + .byte 0x5 + .byte 0xf9,0xf + .4byte .LASF2370 + .byte 0x5 + .byte 0xfa,0xf + .4byte .LASF2371 + .byte 0x5 + .byte 0xfb,0xf + .4byte .LASF2372 + .byte 0x5 + .byte 0xfc,0xf + .4byte .LASF2373 + .byte 0x5 + .byte 0xfd,0xf + .4byte .LASF2374 + .byte 0x5 + .byte 0xfe,0xf + .4byte .LASF2375 + .byte 0x5 + .byte 0xff,0xf + .4byte .LASF2376 + .byte 0x5 + .byte 0x81,0x10 + .4byte .LASF2377 + .byte 0x5 + .byte 0x82,0x10 + .4byte .LASF2378 + .byte 0x5 + .byte 0x83,0x10 + .4byte .LASF2379 + .byte 0x5 + .byte 0x84,0x10 + .4byte .LASF2380 + .byte 0x5 + .byte 0x86,0x10 + .4byte .LASF2381 + .byte 0x5 + .byte 0x87,0x10 + .4byte .LASF2382 + .byte 0x5 + .byte 0x88,0x10 + .4byte .LASF2383 + .byte 0x5 + .byte 0x89,0x10 + .4byte .LASF2384 + .byte 0x5 + .byte 0x8a,0x10 + .4byte .LASF2385 + .byte 0x5 + .byte 0x8c,0x10 + .4byte .LASF2386 + .byte 0x5 + .byte 0x8f,0x10 + .4byte .LASF2387 + .byte 0x5 + .byte 0x90,0x10 + .4byte .LASF2388 + .byte 0x5 + .byte 0x91,0x10 + .4byte .LASF2389 + .byte 0x5 + .byte 0x92,0x10 + .4byte .LASF2390 + .byte 0x5 + .byte 0x94,0x10 + .4byte .LASF2391 + .byte 0x5 + .byte 0x95,0x10 + .4byte .LASF2392 + .byte 0x5 + .byte 0x96,0x10 + .4byte .LASF2393 + .byte 0x5 + .byte 0x98,0x10 + .4byte .LASF2394 + .byte 0x5 + .byte 0x99,0x10 + .4byte .LASF2395 + .byte 0x5 + .byte 0x9a,0x10 + .4byte .LASF2396 + .byte 0x5 + .byte 0x9c,0x10 + .4byte .LASF2397 + .byte 0x5 + .byte 0x9d,0x10 + .4byte .LASF2398 + .byte 0x5 + .byte 0x9e,0x10 + .4byte .LASF2399 + .byte 0x5 + .byte 0xa0,0x10 + .4byte .LASF2400 + .byte 0x5 + .byte 0xa1,0x10 + .4byte .LASF2401 + .byte 0x5 + .byte 0xa2,0x10 + .4byte .LASF2402 + .byte 0x5 + .byte 0xa4,0x10 + .4byte .LASF2403 + .byte 0x5 + .byte 0xa5,0x10 + .4byte .LASF2404 + .byte 0x5 + .byte 0xa6,0x10 + .4byte .LASF2405 + .byte 0x5 + .byte 0xa8,0x10 + .4byte .LASF2406 + .byte 0x5 + .byte 0xa9,0x10 + .4byte .LASF2407 + .byte 0x5 + .byte 0xaa,0x10 + .4byte .LASF2408 + .byte 0x5 + .byte 0xab,0x10 + .4byte .LASF2409 + .byte 0x5 + .byte 0xad,0x10 + .4byte .LASF2410 + .byte 0x5 + .byte 0xae,0x10 + .4byte .LASF2411 + .byte 0x5 + .byte 0xaf,0x10 + .4byte .LASF2412 + .byte 0x5 + .byte 0xb1,0x10 + .4byte .LASF2413 + .byte 0x5 + .byte 0xb2,0x10 + .4byte .LASF2414 + .byte 0x5 + .byte 0xb3,0x10 + .4byte .LASF2415 + .byte 0x5 + .byte 0xb5,0x10 + .4byte .LASF2416 + .byte 0x5 + .byte 0xb7,0x10 + .4byte .LASF2417 + .byte 0x5 + .byte 0xb8,0x10 + .4byte .LASF2418 + .byte 0x5 + .byte 0xb9,0x10 + .4byte .LASF2419 + .byte 0x5 + .byte 0xbb,0x10 + .4byte .LASF2420 + .byte 0x5 + .byte 0xbc,0x10 + .4byte .LASF2421 + .byte 0x5 + .byte 0xbd,0x10 + .4byte .LASF2422 + .byte 0x5 + .byte 0xbf,0x10 + .4byte .LASF2423 + .byte 0x5 + .byte 0xc0,0x10 + .4byte .LASF2424 + .byte 0x5 + .byte 0xc1,0x10 + .4byte .LASF2425 + .byte 0x5 + .byte 0xc2,0x10 + .4byte .LASF2426 + .byte 0x5 + .byte 0xc3,0x10 + .4byte .LASF2427 + .byte 0x5 + .byte 0xc4,0x10 + .4byte .LASF2428 + .byte 0x5 + .byte 0xc6,0x10 + .4byte .LASF2429 + .byte 0x5 + .byte 0xc7,0x10 + .4byte .LASF2430 + .byte 0x5 + .byte 0xc8,0x10 + .4byte .LASF2431 + .byte 0x5 + .byte 0xc9,0x10 + .4byte .LASF2432 + .byte 0x5 + .byte 0xcb,0x10 + .4byte .LASF2433 + .byte 0x5 + .byte 0xcc,0x10 + .4byte .LASF2434 + .byte 0x5 + .byte 0xcd,0x10 + .4byte .LASF2435 + .byte 0x5 + .byte 0xce,0x10 + .4byte .LASF2436 + .byte 0x5 + .byte 0xd1,0x10 + .4byte .LASF2437 + .byte 0x5 + .byte 0xd2,0x10 + .4byte .LASF2438 + .byte 0x5 + .byte 0xd3,0x10 + .4byte .LASF2439 + .byte 0x5 + .byte 0xd4,0x10 + .4byte .LASF2440 + .byte 0x5 + .byte 0xd6,0x10 + .4byte .LASF2441 + .byte 0x5 + .byte 0xd7,0x10 + .4byte .LASF2442 + .byte 0x5 + .byte 0xd8,0x10 + .4byte .LASF2443 + .byte 0x5 + .byte 0xd9,0x10 + .4byte .LASF2444 + .byte 0x5 + .byte 0xda,0x10 + .4byte .LASF2445 + .byte 0x5 + .byte 0xdb,0x10 + .4byte .LASF2446 + .byte 0x5 + .byte 0xdc,0x10 + .4byte .LASF2447 + .byte 0x5 + .byte 0xde,0x10 + .4byte .LASF2448 + .byte 0x5 + .byte 0xdf,0x10 + .4byte .LASF2449 + .byte 0x5 + .byte 0xe0,0x10 + .4byte .LASF2450 + .byte 0x5 + .byte 0xe1,0x10 + .4byte .LASF2451 + .byte 0x5 + .byte 0xe2,0x10 + .4byte .LASF2452 + .byte 0x5 + .byte 0xe3,0x10 + .4byte .LASF2453 + .byte 0x5 + .byte 0xe4,0x10 + .4byte .LASF2454 + .byte 0x5 + .byte 0xe6,0x10 + .4byte .LASF2455 + .byte 0x5 + .byte 0xe7,0x10 + .4byte .LASF2456 + .byte 0x5 + .byte 0xe8,0x10 + .4byte .LASF2457 + .byte 0x5 + .byte 0xe9,0x10 + .4byte .LASF2458 + .byte 0x5 + .byte 0xea,0x10 + .4byte .LASF2459 + .byte 0x5 + .byte 0xeb,0x10 + .4byte .LASF2460 + .byte 0x5 + .byte 0xec,0x10 + .4byte .LASF2461 + .byte 0x5 + .byte 0xee,0x10 + .4byte .LASF2462 + .byte 0x5 + .byte 0xef,0x10 + .4byte .LASF2463 + .byte 0x5 + .byte 0xf0,0x10 + .4byte .LASF2464 + .byte 0x5 + .byte 0xf1,0x10 + .4byte .LASF2465 + .byte 0x5 + .byte 0xf2,0x10 + .4byte .LASF2466 + .byte 0x5 + .byte 0xf3,0x10 + .4byte .LASF2467 + .byte 0x5 + .byte 0xf4,0x10 + .4byte .LASF2468 + .byte 0x5 + .byte 0xf7,0x10 + .4byte .LASF2469 + .byte 0x5 + .byte 0xf8,0x10 + .4byte .LASF2470 + .byte 0x5 + .byte 0xf9,0x10 + .4byte .LASF2471 + .byte 0x5 + .byte 0xfa,0x10 + .4byte .LASF2472 + .byte 0x5 + .byte 0xfc,0x10 + .4byte .LASF2473 + .byte 0x5 + .byte 0xfd,0x10 + .4byte .LASF2474 + .byte 0x5 + .byte 0xfe,0x10 + .4byte .LASF2475 + .byte 0x5 + .byte 0xff,0x10 + .4byte .LASF2476 + .byte 0x5 + .byte 0x80,0x11 + .4byte .LASF2477 + .byte 0x5 + .byte 0x81,0x11 + .4byte .LASF2478 + .byte 0x5 + .byte 0x82,0x11 + .4byte .LASF2479 + .byte 0x5 + .byte 0x84,0x11 + .4byte .LASF2480 + .byte 0x5 + .byte 0x85,0x11 + .4byte .LASF2481 + .byte 0x5 + .byte 0x86,0x11 + .4byte .LASF2482 + .byte 0x5 + .byte 0x87,0x11 + .4byte .LASF2483 + .byte 0x5 + .byte 0x88,0x11 + .4byte .LASF2484 + .byte 0x5 + .byte 0x89,0x11 + .4byte .LASF2485 + .byte 0x5 + .byte 0x8a,0x11 + .4byte .LASF2486 + .byte 0x5 + .byte 0x8c,0x11 + .4byte .LASF2487 + .byte 0x5 + .byte 0x8d,0x11 + .4byte .LASF2488 + .byte 0x5 + .byte 0x8e,0x11 + .4byte .LASF2489 + .byte 0x5 + .byte 0x8f,0x11 + .4byte .LASF2490 + .byte 0x5 + .byte 0x90,0x11 + .4byte .LASF2491 + .byte 0x5 + .byte 0x91,0x11 + .4byte .LASF2492 + .byte 0x5 + .byte 0x92,0x11 + .4byte .LASF2493 + .byte 0x5 + .byte 0x94,0x11 + .4byte .LASF2494 + .byte 0x5 + .byte 0x95,0x11 + .4byte .LASF2495 + .byte 0x5 + .byte 0x96,0x11 + .4byte .LASF2496 + .byte 0x5 + .byte 0x97,0x11 + .4byte .LASF2497 + .byte 0x5 + .byte 0x98,0x11 + .4byte .LASF2498 + .byte 0x5 + .byte 0x99,0x11 + .4byte .LASF2499 + .byte 0x5 + .byte 0x9a,0x11 + .4byte .LASF2500 + .byte 0x5 + .byte 0x9d,0x11 + .4byte .LASF2501 + .byte 0x5 + .byte 0x9e,0x11 + .4byte .LASF2502 + .byte 0x5 + .byte 0x9f,0x11 + .4byte .LASF2503 + .byte 0x5 + .byte 0xa0,0x11 + .4byte .LASF2504 + .byte 0x5 + .byte 0xa2,0x11 + .4byte .LASF2505 + .byte 0x5 + .byte 0xa3,0x11 + .4byte .LASF2506 + .byte 0x5 + .byte 0xa4,0x11 + .4byte .LASF2507 + .byte 0x5 + .byte 0xa5,0x11 + .4byte .LASF2508 + .byte 0x5 + .byte 0xa6,0x11 + .4byte .LASF2509 + .byte 0x5 + .byte 0xa7,0x11 + .4byte .LASF2510 + .byte 0x5 + .byte 0xa8,0x11 + .4byte .LASF2511 + .byte 0x5 + .byte 0xaa,0x11 + .4byte .LASF2512 + .byte 0x5 + .byte 0xab,0x11 + .4byte .LASF2513 + .byte 0x5 + .byte 0xac,0x11 + .4byte .LASF2514 + .byte 0x5 + .byte 0xad,0x11 + .4byte .LASF2515 + .byte 0x5 + .byte 0xae,0x11 + .4byte .LASF2516 + .byte 0x5 + .byte 0xaf,0x11 + .4byte .LASF2517 + .byte 0x5 + .byte 0xb0,0x11 + .4byte .LASF2518 + .byte 0x5 + .byte 0xb2,0x11 + .4byte .LASF2519 + .byte 0x5 + .byte 0xb3,0x11 + .4byte .LASF2520 + .byte 0x5 + .byte 0xb4,0x11 + .4byte .LASF2521 + .byte 0x5 + .byte 0xb5,0x11 + .4byte .LASF2522 + .byte 0x5 + .byte 0xb6,0x11 + .4byte .LASF2523 + .byte 0x5 + .byte 0xb7,0x11 + .4byte .LASF2524 + .byte 0x5 + .byte 0xb8,0x11 + .4byte .LASF2525 + .byte 0x5 + .byte 0xba,0x11 + .4byte .LASF2526 + .byte 0x5 + .byte 0xbb,0x11 + .4byte .LASF2527 + .byte 0x5 + .byte 0xbc,0x11 + .4byte .LASF2528 + .byte 0x5 + .byte 0xbd,0x11 + .4byte .LASF2529 + .byte 0x5 + .byte 0xbe,0x11 + .4byte .LASF2530 + .byte 0x5 + .byte 0xbf,0x11 + .4byte .LASF2531 + .byte 0x5 + .byte 0xc0,0x11 + .4byte .LASF2532 + .byte 0x5 + .byte 0xc3,0x11 + .4byte .LASF2533 + .byte 0x5 + .byte 0xc4,0x11 + .4byte .LASF2534 + .byte 0x5 + .byte 0xc5,0x11 + .4byte .LASF2535 + .byte 0x5 + .byte 0xc6,0x11 + .4byte .LASF2536 + .byte 0x5 + .byte 0xc8,0x11 + .4byte .LASF2537 + .byte 0x5 + .byte 0xc9,0x11 + .4byte .LASF2538 + .byte 0x5 + .byte 0xca,0x11 + .4byte .LASF2539 + .byte 0x5 + .byte 0xcb,0x11 + .4byte .LASF2540 + .byte 0x5 + .byte 0xcc,0x11 + .4byte .LASF2541 + .byte 0x5 + .byte 0xcd,0x11 + .4byte .LASF2542 + .byte 0x5 + .byte 0xce,0x11 + .4byte .LASF2543 + .byte 0x5 + .byte 0xd0,0x11 + .4byte .LASF2544 + .byte 0x5 + .byte 0xd1,0x11 + .4byte .LASF2545 + .byte 0x5 + .byte 0xd2,0x11 + .4byte .LASF2546 + .byte 0x5 + .byte 0xd3,0x11 + .4byte .LASF2547 + .byte 0x5 + .byte 0xd4,0x11 + .4byte .LASF2548 + .byte 0x5 + .byte 0xd5,0x11 + .4byte .LASF2549 + .byte 0x5 + .byte 0xd6,0x11 + .4byte .LASF2550 + .byte 0x5 + .byte 0xd8,0x11 + .4byte .LASF2551 + .byte 0x5 + .byte 0xd9,0x11 + .4byte .LASF2552 + .byte 0x5 + .byte 0xda,0x11 + .4byte .LASF2553 + .byte 0x5 + .byte 0xdb,0x11 + .4byte .LASF2554 + .byte 0x5 + .byte 0xdc,0x11 + .4byte .LASF2555 + .byte 0x5 + .byte 0xdd,0x11 + .4byte .LASF2556 + .byte 0x5 + .byte 0xde,0x11 + .4byte .LASF2557 + .byte 0x5 + .byte 0xe0,0x11 + .4byte .LASF2558 + .byte 0x5 + .byte 0xe1,0x11 + .4byte .LASF2559 + .byte 0x5 + .byte 0xe2,0x11 + .4byte .LASF2560 + .byte 0x5 + .byte 0xe3,0x11 + .4byte .LASF2561 + .byte 0x5 + .byte 0xe4,0x11 + .4byte .LASF2562 + .byte 0x5 + .byte 0xe5,0x11 + .4byte .LASF2563 + .byte 0x5 + .byte 0xe6,0x11 + .4byte .LASF2564 + .byte 0x5 + .byte 0xed,0x11 + .4byte .LASF2565 + .byte 0x5 + .byte 0xf0,0x11 + .4byte .LASF2566 + .byte 0x5 + .byte 0xf1,0x11 + .4byte .LASF2567 + .byte 0x5 + .byte 0xf2,0x11 + .4byte .LASF2568 + .byte 0x5 + .byte 0xf3,0x11 + .4byte .LASF2569 + .byte 0x5 + .byte 0xf6,0x11 + .4byte .LASF2570 + .byte 0x5 + .byte 0xf9,0x11 + .4byte .LASF2571 + .byte 0x5 + .byte 0xfa,0x11 + .4byte .LASF2572 + .byte 0x5 + .byte 0x81,0x12 + .4byte .LASF2573 + .byte 0x5 + .byte 0x82,0x12 + .4byte .LASF2574 + .byte 0x5 + .byte 0x83,0x12 + .4byte .LASF2575 + .byte 0x5 + .byte 0x84,0x12 + .4byte .LASF2576 + .byte 0x5 + .byte 0x85,0x12 + .4byte .LASF2577 + .byte 0x5 + .byte 0x86,0x12 + .4byte .LASF2578 + .byte 0x5 + .byte 0x87,0x12 + .4byte .LASF2579 + .byte 0x5 + .byte 0x88,0x12 + .4byte .LASF2580 + .byte 0x5 + .byte 0x89,0x12 + .4byte .LASF2581 + .byte 0x5 + .byte 0x8a,0x12 + .4byte .LASF2582 + .byte 0x5 + .byte 0x8b,0x12 + .4byte .LASF2583 + .byte 0x5 + .byte 0x8c,0x12 + .4byte .LASF2584 + .byte 0x5 + .byte 0x8d,0x12 + .4byte .LASF2585 + .byte 0x5 + .byte 0x8e,0x12 + .4byte .LASF2586 + .byte 0x5 + .byte 0x91,0x12 + .4byte .LASF2587 + .byte 0x5 + .byte 0x92,0x12 + .4byte .LASF2588 + .byte 0x5 + .byte 0x93,0x12 + .4byte .LASF2589 + .byte 0x5 + .byte 0x94,0x12 + .4byte .LASF2590 + .byte 0x5 + .byte 0x95,0x12 + .4byte .LASF2591 + .byte 0x5 + .byte 0x96,0x12 + .4byte .LASF2592 + .byte 0x5 + .byte 0x97,0x12 + .4byte .LASF2593 + .byte 0x5 + .byte 0x99,0x12 + .4byte .LASF2594 + .byte 0x5 + .byte 0x9a,0x12 + .4byte .LASF2595 + .byte 0x5 + .byte 0x9b,0x12 + .4byte .LASF2596 + .byte 0x5 + .byte 0x9c,0x12 + .4byte .LASF2597 + .byte 0x5 + .byte 0x9d,0x12 + .4byte .LASF2598 + .byte 0x5 + .byte 0xa0,0x12 + .4byte .LASF2599 + .byte 0x5 + .byte 0xa1,0x12 + .4byte .LASF2600 + .byte 0x5 + .byte 0xa3,0x12 + .4byte .LASF2601 + .byte 0x5 + .byte 0xa4,0x12 + .4byte .LASF2602 + .byte 0x5 + .byte 0xa5,0x12 + .4byte .LASF2603 + .byte 0x5 + .byte 0xa6,0x12 + .4byte .LASF2604 + .byte 0x5 + .byte 0xa7,0x12 + .4byte .LASF2605 + .byte 0x5 + .byte 0xa8,0x12 + .4byte .LASF2606 + .byte 0x5 + .byte 0xa9,0x12 + .4byte .LASF2607 + .byte 0x5 + .byte 0xaa,0x12 + .4byte .LASF2608 + .byte 0x5 + .byte 0xab,0x12 + .4byte .LASF2609 + .byte 0x5 + .byte 0xac,0x12 + .4byte .LASF2610 + .byte 0x5 + .byte 0xae,0x12 + .4byte .LASF2611 + .byte 0x5 + .byte 0xb1,0x12 + .4byte .LASF2612 + .byte 0x5 + .byte 0xb2,0x12 + .4byte .LASF2613 + .byte 0x5 + .byte 0xb5,0x12 + .4byte .LASF2614 + .byte 0x5 + .byte 0xb8,0x12 + .4byte .LASF2615 + .byte 0x5 + .byte 0xb9,0x12 + .4byte .LASF2616 + .byte 0x5 + .byte 0xba,0x12 + .4byte .LASF2617 + .byte 0x5 + .byte 0xbb,0x12 + .4byte .LASF2618 + .byte 0x5 + .byte 0xbc,0x12 + .4byte .LASF2619 + .byte 0x5 + .byte 0xbd,0x12 + .4byte .LASF2620 + .byte 0x5 + .byte 0xbe,0x12 + .4byte .LASF2621 + .byte 0x5 + .byte 0xbf,0x12 + .4byte .LASF2622 + .byte 0x5 + .byte 0xc0,0x12 + .4byte .LASF2623 + .byte 0x5 + .byte 0xc1,0x12 + .4byte .LASF2624 + .byte 0x5 + .byte 0xc2,0x12 + .4byte .LASF2625 + .byte 0x5 + .byte 0xc3,0x12 + .4byte .LASF2626 + .byte 0x5 + .byte 0xc4,0x12 + .4byte .LASF2627 + .byte 0x5 + .byte 0xc5,0x12 + .4byte .LASF2628 + .byte 0x5 + .byte 0xc8,0x12 + .4byte .LASF2629 + .byte 0x5 + .byte 0xc9,0x12 + .4byte .LASF2630 + .byte 0x5 + .byte 0xca,0x12 + .4byte .LASF2631 + .byte 0x5 + .byte 0xcb,0x12 + .4byte .LASF2632 + .byte 0x5 + .byte 0xcc,0x12 + .4byte .LASF2633 + .byte 0x5 + .byte 0xcd,0x12 + .4byte .LASF2634 + .byte 0x5 + .byte 0xce,0x12 + .4byte .LASF2635 + .byte 0x5 + .byte 0xcf,0x12 + .4byte .LASF2636 + .byte 0x5 + .byte 0xd2,0x12 + .4byte .LASF2637 + .byte 0x5 + .byte 0xd3,0x12 + .4byte .LASF2638 + .byte 0x5 + .byte 0xd4,0x12 + .4byte .LASF2639 + .byte 0x5 + .byte 0xd7,0x12 + .4byte .LASF2640 + .byte 0x5 + .byte 0xdf,0x12 + .4byte .LASF2641 + .byte 0x5 + .byte 0xe0,0x12 + .4byte .LASF2642 + .byte 0x5 + .byte 0xe1,0x12 + .4byte .LASF2643 + .byte 0x5 + .byte 0xe2,0x12 + .4byte .LASF2644 + .byte 0x5 + .byte 0xe3,0x12 + .4byte .LASF2645 + .byte 0x5 + .byte 0xe5,0x12 + .4byte .LASF2646 + .byte 0x5 + .byte 0xe6,0x12 + .4byte .LASF2647 + .byte 0x5 + .byte 0xe7,0x12 + .4byte .LASF2648 + .byte 0x5 + .byte 0xe8,0x12 + .4byte .LASF2649 + .byte 0x5 + .byte 0xea,0x12 + .4byte .LASF2650 + .byte 0x5 + .byte 0xeb,0x12 + .4byte .LASF2651 + .byte 0x5 + .byte 0xec,0x12 + .4byte .LASF2652 + .byte 0x5 + .byte 0xed,0x12 + .4byte .LASF2653 + .byte 0x5 + .byte 0xee,0x12 + .4byte .LASF2654 + .byte 0x5 + .byte 0xef,0x12 + .4byte .LASF2655 + .byte 0x5 + .byte 0xf0,0x12 + .4byte .LASF2656 + .byte 0x5 + .byte 0xf1,0x12 + .4byte .LASF2657 + .byte 0x5 + .byte 0xf3,0x12 + .4byte .LASF2658 + .byte 0x5 + .byte 0xf7,0x12 + .4byte .LASF2659 + .byte 0x5 + .byte 0xf8,0x12 + .4byte .LASF2660 + .byte 0x5 + .byte 0xf9,0x12 + .4byte .LASF2661 + .byte 0x5 + .byte 0xfa,0x12 + .4byte .LASF2662 + .byte 0x5 + .byte 0x83,0x13 + .4byte .LASF2663 + .byte 0x5 + .byte 0x84,0x13 + .4byte .LASF2664 + .byte 0x5 + .byte 0x85,0x13 + .4byte .LASF2665 + .byte 0x5 + .byte 0x86,0x13 + .4byte .LASF2666 + .byte 0x5 + .byte 0x87,0x13 + .4byte .LASF2667 + .byte 0x5 + .byte 0x88,0x13 + .4byte .LASF2668 + .byte 0x5 + .byte 0x89,0x13 + .4byte .LASF2669 + .byte 0x5 + .byte 0x8a,0x13 + .4byte .LASF2670 + .byte 0x5 + .byte 0x8b,0x13 + .4byte .LASF2671 + .byte 0x5 + .byte 0x8c,0x13 + .4byte .LASF2672 + .byte 0x5 + .byte 0x90,0x13 + .4byte .LASF2673 + .byte 0x5 + .byte 0x91,0x13 + .4byte .LASF2674 + .byte 0x5 + .byte 0x92,0x13 + .4byte .LASF2675 + .byte 0x5 + .byte 0x94,0x13 + .4byte .LASF2676 + .byte 0x5 + .byte 0x95,0x13 + .4byte .LASF2677 + .byte 0x5 + .byte 0x96,0x13 + .4byte .LASF2678 + .byte 0x5 + .byte 0x98,0x13 + .4byte .LASF2679 + .byte 0x5 + .byte 0x99,0x13 + .4byte .LASF2680 + .byte 0x5 + .byte 0x9a,0x13 + .4byte .LASF2681 + .byte 0x5 + .byte 0x9c,0x13 + .4byte .LASF2682 + .byte 0x5 + .byte 0x9d,0x13 + .4byte .LASF2683 + .byte 0x5 + .byte 0x9e,0x13 + .4byte .LASF2684 + .byte 0x5 + .byte 0xa0,0x13 + .4byte .LASF2685 + .byte 0x5 + .byte 0xa1,0x13 + .4byte .LASF2686 + .byte 0x5 + .byte 0xa2,0x13 + .4byte .LASF2687 + .byte 0x5 + .byte 0xa3,0x13 + .4byte .LASF2688 + .byte 0x5 + .byte 0xa4,0x13 + .4byte .LASF2689 + .byte 0x5 + .byte 0xa6,0x13 + .4byte .LASF2690 + .byte 0x5 + .byte 0xa7,0x13 + .4byte .LASF2691 + .byte 0x5 + .byte 0xa8,0x13 + .4byte .LASF2692 + .byte 0x5 + .byte 0xa9,0x13 + .4byte .LASF2693 + .byte 0x5 + .byte 0xaa,0x13 + .4byte .LASF2694 + .byte 0x5 + .byte 0xab,0x13 + .4byte .LASF2695 + .byte 0x5 + .byte 0xac,0x13 + .4byte .LASF2696 + .byte 0x5 + .byte 0xad,0x13 + .4byte .LASF2697 + .byte 0x5 + .byte 0xae,0x13 + .4byte .LASF2698 + .byte 0x5 + .byte 0xb0,0x13 + .4byte .LASF2699 + .byte 0x5 + .byte 0xb1,0x13 + .4byte .LASF2700 + .byte 0x5 + .byte 0xb2,0x13 + .4byte .LASF2701 + .byte 0x5 + .byte 0xb3,0x13 + .4byte .LASF2702 + .byte 0x5 + .byte 0xb5,0x13 + .4byte .LASF2703 + .byte 0x5 + .byte 0xb6,0x13 + .4byte .LASF2704 + .byte 0x5 + .byte 0xb7,0x13 + .4byte .LASF2705 + .byte 0x5 + .byte 0xb8,0x13 + .4byte .LASF2706 + .byte 0x5 + .byte 0xb9,0x13 + .4byte .LASF2707 + .byte 0x5 + .byte 0xbb,0x13 + .4byte .LASF2708 + .byte 0x5 + .byte 0xbc,0x13 + .4byte .LASF2709 + .byte 0x5 + .byte 0xbd,0x13 + .4byte .LASF2710 + .byte 0x5 + .byte 0xbe,0x13 + .4byte .LASF2711 + .byte 0x5 + .byte 0xc0,0x13 + .4byte .LASF2712 + .byte 0x5 + .byte 0xc1,0x13 + .4byte .LASF2713 + .byte 0x5 + .byte 0xc2,0x13 + .4byte .LASF2714 + .byte 0x5 + .byte 0xc3,0x13 + .4byte .LASF2715 + .byte 0x5 + .byte 0xc4,0x13 + .4byte .LASF2716 + .byte 0x5 + .byte 0xc6,0x13 + .4byte .LASF2717 + .byte 0x5 + .byte 0xc7,0x13 + .4byte .LASF2718 + .byte 0x5 + .byte 0xc8,0x13 + .4byte .LASF2719 + .byte 0x5 + .byte 0xca,0x13 + .4byte .LASF2720 + .byte 0x5 + .byte 0xcb,0x13 + .4byte .LASF2721 + .byte 0x5 + .byte 0xcc,0x13 + .4byte .LASF2722 + .byte 0x5 + .byte 0xcd,0x13 + .4byte .LASF2723 + .byte 0x5 + .byte 0xcf,0x13 + .4byte .LASF2724 + .byte 0x5 + .byte 0xd1,0x13 + .4byte .LASF2725 + .byte 0x5 + .byte 0xd3,0x13 + .4byte .LASF2726 + .byte 0x5 + .byte 0xd4,0x13 + .4byte .LASF2727 + .byte 0x5 + .byte 0xd5,0x13 + .4byte .LASF2728 + .byte 0x5 + .byte 0xd6,0x13 + .4byte .LASF2729 + .byte 0x5 + .byte 0xd7,0x13 + .4byte .LASF2730 + .byte 0x5 + .byte 0xd9,0x13 + .4byte .LASF2731 + .byte 0x5 + .byte 0xda,0x13 + .4byte .LASF2732 + .byte 0x5 + .byte 0xdc,0x13 + .4byte .LASF2733 + .byte 0x5 + .byte 0xdd,0x13 + .4byte .LASF2734 + .byte 0x5 + .byte 0xdf,0x13 + .4byte .LASF2735 + .byte 0x5 + .byte 0xe0,0x13 + .4byte .LASF2736 + .byte 0x5 + .byte 0xe1,0x13 + .4byte .LASF2737 + .byte 0x5 + .byte 0xe2,0x13 + .4byte .LASF2738 + .byte 0x5 + .byte 0xe3,0x13 + .4byte .LASF2739 + .byte 0x5 + .byte 0xe4,0x13 + .4byte .LASF2740 + .byte 0x5 + .byte 0xe5,0x13 + .4byte .LASF2741 + .byte 0x5 + .byte 0xe6,0x13 + .4byte .LASF2742 + .byte 0x5 + .byte 0xe7,0x13 + .4byte .LASF2743 + .byte 0x5 + .byte 0xe8,0x13 + .4byte .LASF2744 + .byte 0x5 + .byte 0xe9,0x13 + .4byte .LASF2745 + .byte 0x5 + .byte 0xea,0x13 + .4byte .LASF2746 + .byte 0x5 + .byte 0xeb,0x13 + .4byte .LASF2747 + .byte 0x5 + .byte 0xec,0x13 + .4byte .LASF2748 + .byte 0x5 + .byte 0xed,0x13 + .4byte .LASF2749 + .byte 0x5 + .byte 0xee,0x13 + .4byte .LASF2750 + .byte 0x5 + .byte 0xf0,0x13 + .4byte .LASF2751 + .byte 0x5 + .byte 0xf1,0x13 + .4byte .LASF2752 + .byte 0x5 + .byte 0xf2,0x13 + .4byte .LASF2753 + .byte 0x5 + .byte 0xf3,0x13 + .4byte .LASF2754 + .byte 0x5 + .byte 0xf5,0x13 + .4byte .LASF2755 + .byte 0x5 + .byte 0xf6,0x13 + .4byte .LASF2756 + .byte 0x5 + .byte 0xf7,0x13 + .4byte .LASF2757 + .byte 0x5 + .byte 0xf8,0x13 + .4byte .LASF2758 + .byte 0x5 + .byte 0xf9,0x13 + .4byte .LASF2759 + .byte 0x5 + .byte 0xfc,0x13 + .4byte .LASF2760 + .byte 0x5 + .byte 0xfd,0x13 + .4byte .LASF2761 + .byte 0x5 + .byte 0xfe,0x13 + .4byte .LASF2762 + .byte 0x5 + .byte 0xff,0x13 + .4byte .LASF2763 + .byte 0x5 + .byte 0x80,0x14 + .4byte .LASF2764 + .byte 0x5 + .byte 0x81,0x14 + .4byte .LASF2765 + .byte 0x5 + .byte 0x82,0x14 + .4byte .LASF2766 + .byte 0x5 + .byte 0x83,0x14 + .4byte .LASF2767 + .byte 0x5 + .byte 0x84,0x14 + .4byte .LASF2768 + .byte 0x5 + .byte 0x85,0x14 + .4byte .LASF2769 + .byte 0x5 + .byte 0x86,0x14 + .4byte .LASF2770 + .byte 0x5 + .byte 0x87,0x14 + .4byte .LASF2771 + .byte 0x5 + .byte 0x88,0x14 + .4byte .LASF2772 + .byte 0x5 + .byte 0x89,0x14 + .4byte .LASF2773 + .byte 0x5 + .byte 0x8a,0x14 + .4byte .LASF2774 + .byte 0x5 + .byte 0x8b,0x14 + .4byte .LASF2775 + .byte 0x5 + .byte 0x8c,0x14 + .4byte .LASF2776 + .byte 0x5 + .byte 0x90,0x14 + .4byte .LASF2777 + .byte 0x5 + .byte 0x91,0x14 + .4byte .LASF2778 + .byte 0x5 + .byte 0x92,0x14 + .4byte .LASF2779 + .byte 0x5 + .byte 0x93,0x14 + .4byte .LASF2780 + .byte 0x5 + .byte 0x94,0x14 + .4byte .LASF2781 + .byte 0x5 + .byte 0x95,0x14 + .4byte .LASF2782 + .byte 0x5 + .byte 0x98,0x14 + .4byte .LASF2783 + .byte 0x5 + .byte 0x9b,0x14 + .4byte .LASF2784 + .byte 0x5 + .byte 0x9c,0x14 + .4byte .LASF2785 + .byte 0x5 + .byte 0x9d,0x14 + .4byte .LASF2786 + .byte 0x5 + .byte 0x9f,0x14 + .4byte .LASF2787 + .byte 0x5 + .byte 0xa2,0x14 + .4byte .LASF2788 + .byte 0x5 + .byte 0xa3,0x14 + .4byte .LASF2789 + .byte 0x5 + .byte 0xa4,0x14 + .4byte .LASF2790 + .byte 0x5 + .byte 0xa5,0x14 + .4byte .LASF2791 + .byte 0x5 + .byte 0xa6,0x14 + .4byte .LASF2792 + .byte 0x5 + .byte 0xa8,0x14 + .4byte .LASF2793 + .byte 0x5 + .byte 0xab,0x14 + .4byte .LASF2794 + .byte 0x5 + .byte 0xac,0x14 + .4byte .LASF2795 + .byte 0x5 + .byte 0xaf,0x14 + .4byte .LASF2796 + .byte 0x5 + .byte 0xb0,0x14 + .4byte .LASF2797 + .byte 0x5 + .byte 0xb1,0x14 + .4byte .LASF2798 + .byte 0x5 + .byte 0xb2,0x14 + .4byte .LASF2799 + .byte 0x5 + .byte 0xb4,0x14 + .4byte .LASF2800 + .byte 0x5 + .byte 0xb7,0x14 + .4byte .LASF2801 + .byte 0x5 + .byte 0xb8,0x14 + .4byte .LASF2802 + .byte 0x5 + .byte 0xb9,0x14 + .4byte .LASF2803 + .byte 0x5 + .byte 0xba,0x14 + .4byte .LASF2804 + .byte 0x5 + .byte 0xbb,0x14 + .4byte .LASF2805 + .byte 0x5 + .byte 0xbe,0x14 + .4byte .LASF2806 + .byte 0x5 + .byte 0xbf,0x14 + .4byte .LASF2807 + .byte 0x5 + .byte 0xc0,0x14 + .4byte .LASF2808 + .byte 0x5 + .byte 0xc1,0x14 + .4byte .LASF2809 + .byte 0x5 + .byte 0xc2,0x14 + .4byte .LASF2810 + .byte 0x5 + .byte 0xc3,0x14 + .4byte .LASF2811 + .byte 0x5 + .byte 0xc5,0x14 + .4byte .LASF2812 + .byte 0x5 + .byte 0xc8,0x14 + .4byte .LASF2813 + .byte 0x5 + .byte 0xc9,0x14 + .4byte .LASF2814 + .byte 0x5 + .byte 0xca,0x14 + .4byte .LASF2815 + .byte 0x5 + .byte 0xcd,0x14 + .4byte .LASF2816 + .byte 0x5 + .byte 0xce,0x14 + .4byte .LASF2817 + .byte 0x5 + .byte 0xcf,0x14 + .4byte .LASF2818 + .byte 0x5 + .byte 0xd0,0x14 + .4byte .LASF2819 + .byte 0x5 + .byte 0xd1,0x14 + .4byte .LASF2820 + .byte 0x5 + .byte 0xd3,0x14 + .4byte .LASF2821 + .byte 0x5 + .byte 0xd4,0x14 + .4byte .LASF2822 + .byte 0x5 + .byte 0xd7,0x14 + .4byte .LASF2823 + .byte 0x5 + .byte 0xda,0x14 + .4byte .LASF2824 + .byte 0x5 + .byte 0xdb,0x14 + .4byte .LASF2825 + .byte 0x5 + .byte 0xdc,0x14 + .4byte .LASF2826 + .byte 0x5 + .byte 0xde,0x14 + .4byte .LASF2827 + .byte 0x5 + .byte 0xdf,0x14 + .4byte .LASF2828 + .byte 0x5 + .byte 0xe0,0x14 + .4byte .LASF2829 + .byte 0x5 + .byte 0xe2,0x14 + .4byte .LASF2830 + .byte 0x5 + .byte 0xe3,0x14 + .4byte .LASF2831 + .byte 0x5 + .byte 0xe4,0x14 + .4byte .LASF2832 + .byte 0x5 + .byte 0xe5,0x14 + .4byte .LASF2833 + .byte 0x5 + .byte 0xe7,0x14 + .4byte .LASF2834 + .byte 0x5 + .byte 0xe8,0x14 + .4byte .LASF2835 + .byte 0x5 + .byte 0xeb,0x14 + .4byte .LASF2836 + .byte 0x5 + .byte 0xec,0x14 + .4byte .LASF2837 + .byte 0x5 + .byte 0xed,0x14 + .4byte .LASF2838 + .byte 0x5 + .byte 0xee,0x14 + .4byte .LASF2839 + .byte 0x5 + .byte 0xef,0x14 + .4byte .LASF2840 + .byte 0x5 + .byte 0xf0,0x14 + .4byte .LASF2841 + .byte 0x5 + .byte 0xf1,0x14 + .4byte .LASF2842 + .byte 0x5 + .byte 0xf2,0x14 + .4byte .LASF2843 + .byte 0x5 + .byte 0xf3,0x14 + .4byte .LASF2844 + .byte 0x5 + .byte 0xfa,0x14 + .4byte .LASF2845 + .byte 0x5 + .byte 0xfb,0x14 + .4byte .LASF2846 + .byte 0x5 + .byte 0xfc,0x14 + .4byte .LASF2847 + .byte 0x5 + .byte 0xff,0x14 + .4byte .LASF2848 + .byte 0x5 + .byte 0x80,0x15 + .4byte .LASF2849 + .byte 0x5 + .byte 0x81,0x15 + .4byte .LASF2850 + .byte 0x5 + .byte 0x82,0x15 + .4byte .LASF2851 + .byte 0x5 + .byte 0x83,0x15 + .4byte .LASF2852 + .byte 0x5 + .byte 0x84,0x15 + .4byte .LASF2853 + .byte 0x5 + .byte 0x87,0x15 + .4byte .LASF2854 + .byte 0x5 + .byte 0x8a,0x15 + .4byte .LASF2855 + .byte 0x5 + .byte 0x8d,0x15 + .4byte .LASF2856 + .byte 0x5 + .byte 0x90,0x15 + .4byte .LASF2857 + .byte 0x5 + .byte 0x93,0x15 + .4byte .LASF2858 + .byte 0x5 + .byte 0x96,0x15 + .4byte .LASF2859 + .byte 0x5 + .byte 0x99,0x15 + .4byte .LASF2860 + .byte 0x5 + .byte 0x9c,0x15 + .4byte .LASF2861 + .byte 0x5 + .byte 0xa3,0x15 + .4byte .LASF2862 + .byte 0x5 + .byte 0xa4,0x15 + .4byte .LASF2863 + .byte 0x5 + .byte 0xa5,0x15 + .4byte .LASF2864 + .byte 0x5 + .byte 0xa7,0x15 + .4byte .LASF2865 + .byte 0x5 + .byte 0xa8,0x15 + .4byte .LASF2866 + .byte 0x5 + .byte 0xa9,0x15 + .4byte .LASF2867 + .byte 0x5 + .byte 0xaa,0x15 + .4byte .LASF2868 + .byte 0x5 + .byte 0xac,0x15 + .4byte .LASF2869 + .byte 0x5 + .byte 0xad,0x15 + .4byte .LASF2870 + .byte 0x5 + .byte 0xae,0x15 + .4byte .LASF2871 + .byte 0x5 + .byte 0xaf,0x15 + .4byte .LASF2872 + .byte 0x5 + .byte 0xb0,0x15 + .4byte .LASF2873 + .byte 0x5 + .byte 0xb1,0x15 + .4byte .LASF2874 + .byte 0x5 + .byte 0xb2,0x15 + .4byte .LASF2875 + .byte 0x5 + .byte 0xb3,0x15 + .4byte .LASF2876 + .byte 0x5 + .byte 0xb4,0x15 + .4byte .LASF2877 + .byte 0x5 + .byte 0xb5,0x15 + .4byte .LASF2878 + .byte 0x5 + .byte 0xb8,0x15 + .4byte .LASF2879 + .byte 0x5 + .byte 0xb9,0x15 + .4byte .LASF2880 + .byte 0x5 + .byte 0xba,0x15 + .4byte .LASF2881 + .byte 0x5 + .byte 0xbb,0x15 + .4byte .LASF2882 + .byte 0x5 + .byte 0xbc,0x15 + .4byte .LASF2883 + .byte 0x5 + .byte 0xbd,0x15 + .4byte .LASF2884 + .byte 0x5 + .byte 0xc0,0x15 + .4byte .LASF2885 + .byte 0x5 + .byte 0xc1,0x15 + .4byte .LASF2886 + .byte 0x5 + .byte 0xc2,0x15 + .4byte .LASF2887 + .byte 0x5 + .byte 0xc3,0x15 + .4byte .LASF2888 + .byte 0x5 + .byte 0xc4,0x15 + .4byte .LASF2889 + .byte 0x5 + .byte 0xc5,0x15 + .4byte .LASF2890 + .byte 0x5 + .byte 0xc6,0x15 + .4byte .LASF2891 + .byte 0x5 + .byte 0xc7,0x15 + .4byte .LASF2892 + .byte 0x5 + .byte 0xca,0x15 + .4byte .LASF2893 + .byte 0x5 + .byte 0xcd,0x15 + .4byte .LASF2894 + .byte 0x5 + .byte 0xd0,0x15 + .4byte .LASF2895 + .byte 0x5 + .byte 0xd3,0x15 + .4byte .LASF2896 + .byte 0x5 + .byte 0xd6,0x15 + .4byte .LASF2897 + .byte 0x5 + .byte 0xd8,0x15 + .4byte .LASF2898 + .byte 0x5 + .byte 0xd9,0x15 + .4byte .LASF2899 + .byte 0x5 + .byte 0xda,0x15 + .4byte .LASF2900 + .byte 0x5 + .byte 0xdc,0x15 + .4byte .LASF2901 + .byte 0x5 + .byte 0xde,0x15 + .4byte .LASF2902 + .byte 0x5 + .byte 0xdf,0x15 + .4byte .LASF2903 + .byte 0x5 + .byte 0xe0,0x15 + .4byte .LASF2904 + .byte 0x5 + .byte 0xe2,0x15 + .4byte .LASF2905 + .byte 0x5 + .byte 0xe4,0x15 + .4byte .LASF2906 + .byte 0x5 + .byte 0xe5,0x15 + .4byte .LASF2907 + .byte 0x5 + .byte 0xe6,0x15 + .4byte .LASF2908 + .byte 0x5 + .byte 0xe8,0x15 + .4byte .LASF2909 + .byte 0x5 + .byte 0xe9,0x15 + .4byte .LASF2910 + .byte 0x5 + .byte 0xec,0x15 + .4byte .LASF2911 + .byte 0x5 + .byte 0xed,0x15 + .4byte .LASF2912 + .byte 0x5 + .byte 0xee,0x15 + .4byte .LASF2913 + .byte 0x5 + .byte 0xf5,0x15 + .4byte .LASF2914 + .byte 0x5 + .byte 0xf6,0x15 + .4byte .LASF2915 + .byte 0x5 + .byte 0xf7,0x15 + .4byte .LASF2916 + .byte 0x5 + .byte 0xf8,0x15 + .4byte .LASF2917 + .byte 0x5 + .byte 0xf9,0x15 + .4byte .LASF2918 + .byte 0x5 + .byte 0xfb,0x15 + .4byte .LASF2919 + .byte 0x5 + .byte 0xfc,0x15 + .4byte .LASF2920 + .byte 0x5 + .byte 0xfd,0x15 + .4byte .LASF2921 + .byte 0x5 + .byte 0xff,0x15 + .4byte .LASF2922 + .byte 0x5 + .byte 0x81,0x16 + .4byte .LASF2923 + .byte 0x5 + .byte 0x82,0x16 + .4byte .LASF2924 + .byte 0x5 + .byte 0x83,0x16 + .4byte .LASF2925 + .byte 0x5 + .byte 0x86,0x16 + .4byte .LASF2926 + .byte 0x5 + .byte 0x87,0x16 + .4byte .LASF2927 + .byte 0x5 + .byte 0x88,0x16 + .4byte .LASF2928 + .byte 0x5 + .byte 0x8a,0x16 + .4byte .LASF2929 + .byte 0x5 + .byte 0x8b,0x16 + .4byte .LASF2930 + .byte 0x5 + .byte 0x8c,0x16 + .4byte .LASF2931 + .byte 0x5 + .byte 0x8d,0x16 + .4byte .LASF2932 + .byte 0x5 + .byte 0x8f,0x16 + .4byte .LASF2933 + .byte 0x5 + .byte 0x90,0x16 + .4byte .LASF2934 + .byte 0x5 + .byte 0x91,0x16 + .4byte .LASF2935 + .byte 0x5 + .byte 0x92,0x16 + .4byte .LASF2936 + .byte 0x5 + .byte 0x93,0x16 + .4byte .LASF2937 + .byte 0x5 + .byte 0x94,0x16 + .4byte .LASF2938 + .byte 0x5 + .byte 0x95,0x16 + .4byte .LASF2939 + .byte 0x5 + .byte 0x96,0x16 + .4byte .LASF2940 + .byte 0x5 + .byte 0x99,0x16 + .4byte .LASF2941 + .byte 0x5 + .byte 0x9a,0x16 + .4byte .LASF2942 + .byte 0x5 + .byte 0x9b,0x16 + .4byte .LASF2943 + .byte 0x5 + .byte 0x9c,0x16 + .4byte .LASF2944 + .byte 0x5 + .byte 0x9e,0x16 + .4byte .LASF2945 + .byte 0x5 + .byte 0x9f,0x16 + .4byte .LASF2946 + .byte 0x5 + .byte 0xa0,0x16 + .4byte .LASF2947 + .byte 0x5 + .byte 0xa1,0x16 + .4byte .LASF2948 + .byte 0x5 + .byte 0xa3,0x16 + .4byte .LASF2949 + .byte 0x5 + .byte 0xa5,0x16 + .4byte .LASF2950 + .byte 0x5 + .byte 0xa6,0x16 + .4byte .LASF2951 + .byte 0x5 + .byte 0xa7,0x16 + .4byte .LASF2952 + .byte 0x5 + .byte 0xa8,0x16 + .4byte .LASF2953 + .byte 0x5 + .byte 0xa9,0x16 + .4byte .LASF2954 + .byte 0x5 + .byte 0xab,0x16 + .4byte .LASF2955 + .byte 0x5 + .byte 0xac,0x16 + .4byte .LASF2956 + .byte 0x5 + .byte 0xad,0x16 + .4byte .LASF2957 + .byte 0x5 + .byte 0xaf,0x16 + .4byte .LASF2958 + .byte 0x5 + .byte 0xb0,0x16 + .4byte .LASF2959 + .byte 0x5 + .byte 0xb3,0x16 + .4byte .LASF2960 + .byte 0x5 + .byte 0xb4,0x16 + .4byte .LASF2961 + .byte 0x5 + .byte 0xb5,0x16 + .4byte .LASF2962 + .byte 0x5 + .byte 0xb6,0x16 + .4byte .LASF2963 + .byte 0x5 + .byte 0xb7,0x16 + .4byte .LASF2964 + .byte 0x5 + .byte 0xb8,0x16 + .4byte .LASF2965 + .byte 0x5 + .byte 0xb9,0x16 + .4byte .LASF2966 + .byte 0x5 + .byte 0xba,0x16 + .4byte .LASF2967 + .byte 0x5 + .byte 0xbb,0x16 + .4byte .LASF2968 + .byte 0x5 + .byte 0xbc,0x16 + .4byte .LASF2969 + .byte 0x5 + .byte 0xbd,0x16 + .4byte .LASF2970 + .byte 0x5 + .byte 0xbe,0x16 + .4byte .LASF2971 + .byte 0x5 + .byte 0xbf,0x16 + .4byte .LASF2972 + .byte 0x5 + .byte 0xc0,0x16 + .4byte .LASF2973 + .byte 0x5 + .byte 0xc1,0x16 + .4byte .LASF2974 + .byte 0x5 + .byte 0xc4,0x16 + .4byte .LASF2975 + .byte 0x5 + .byte 0xc5,0x16 + .4byte .LASF2976 + .byte 0x5 + .byte 0xc6,0x16 + .4byte .LASF2977 + .byte 0x5 + .byte 0xc7,0x16 + .4byte .LASF2978 + .byte 0x5 + .byte 0xc8,0x16 + .4byte .LASF2979 + .byte 0x5 + .byte 0xc9,0x16 + .4byte .LASF2980 + .byte 0x5 + .byte 0xca,0x16 + .4byte .LASF2981 + .byte 0x5 + .byte 0xcb,0x16 + .4byte .LASF2982 + .byte 0x5 + .byte 0xcc,0x16 + .4byte .LASF2983 + .byte 0x5 + .byte 0xcd,0x16 + .4byte .LASF2984 + .byte 0x5 + .byte 0xce,0x16 + .4byte .LASF2985 + .byte 0x5 + .byte 0xcf,0x16 + .4byte .LASF2986 + .byte 0x5 + .byte 0xd2,0x16 + .4byte .LASF2987 + .byte 0x5 + .byte 0xd3,0x16 + .4byte .LASF2988 + .byte 0x5 + .byte 0xd4,0x16 + .4byte .LASF2989 + .byte 0x5 + .byte 0xd5,0x16 + .4byte .LASF2990 + .byte 0x5 + .byte 0xd6,0x16 + .4byte .LASF2991 + .byte 0x5 + .byte 0xd7,0x16 + .4byte .LASF2992 + .byte 0x5 + .byte 0xd8,0x16 + .4byte .LASF2993 + .byte 0x5 + .byte 0xd9,0x16 + .4byte .LASF2994 + .byte 0x5 + .byte 0xdc,0x16 + .4byte .LASF2995 + .byte 0x5 + .byte 0xdd,0x16 + .4byte .LASF2996 + .byte 0x5 + .byte 0xde,0x16 + .4byte .LASF2997 + .byte 0x5 + .byte 0xe0,0x16 + .4byte .LASF2998 + .byte 0x5 + .byte 0xe1,0x16 + .4byte .LASF2999 + .byte 0x5 + .byte 0xe3,0x16 + .4byte .LASF3000 + .byte 0x5 + .byte 0xe4,0x16 + .4byte .LASF3001 + .byte 0x5 + .byte 0xe5,0x16 + .4byte .LASF3002 + .byte 0x5 + .byte 0xe6,0x16 + .4byte .LASF3003 + .byte 0x5 + .byte 0xe8,0x16 + .4byte .LASF3004 + .byte 0x5 + .byte 0xea,0x16 + .4byte .LASF3005 + .byte 0x5 + .byte 0xeb,0x16 + .4byte .LASF3006 + .byte 0x5 + .byte 0xec,0x16 + .4byte .LASF3007 + .byte 0x5 + .byte 0xee,0x16 + .4byte .LASF3008 + .byte 0x5 + .byte 0xef,0x16 + .4byte .LASF3009 + .byte 0x5 + .byte 0xf1,0x16 + .4byte .LASF3010 + .byte 0x5 + .byte 0xf2,0x16 + .4byte .LASF3011 + .byte 0x5 + .byte 0xf3,0x16 + .4byte .LASF3012 + .byte 0x5 + .byte 0xf4,0x16 + .4byte .LASF3013 + .byte 0x5 + .byte 0xf6,0x16 + .4byte .LASF3014 + .byte 0x5 + .byte 0xf9,0x16 + .4byte .LASF3015 + .byte 0x5 + .byte 0xfa,0x16 + .4byte .LASF3016 + .byte 0x5 + .byte 0xfb,0x16 + .4byte .LASF3017 + .byte 0x5 + .byte 0xfd,0x16 + .4byte .LASF3018 + .byte 0x5 + .byte 0xfe,0x16 + .4byte .LASF3019 + .byte 0x5 + .byte 0xff,0x16 + .4byte .LASF3020 + .byte 0x5 + .byte 0x80,0x17 + .4byte .LASF3021 + .byte 0x5 + .byte 0x81,0x17 + .4byte .LASF3022 + .byte 0x5 + .byte 0x83,0x17 + .4byte .LASF3023 + .byte 0x5 + .byte 0x84,0x17 + .4byte .LASF3024 + .byte 0x5 + .byte 0x85,0x17 + .4byte .LASF3025 + .byte 0x5 + .byte 0x87,0x17 + .4byte .LASF3026 + .byte 0x5 + .byte 0x88,0x17 + .4byte .LASF3027 + .byte 0x5 + .byte 0x89,0x17 + .4byte .LASF3028 + .byte 0x5 + .byte 0x8a,0x17 + .4byte .LASF3029 + .byte 0x5 + .byte 0x8b,0x17 + .4byte .LASF3030 + .byte 0x5 + .byte 0x8e,0x17 + .4byte .LASF3031 + .byte 0x5 + .byte 0x8f,0x17 + .4byte .LASF3032 + .byte 0x5 + .byte 0x90,0x17 + .4byte .LASF3033 + .byte 0x5 + .byte 0x92,0x17 + .4byte .LASF3034 + .byte 0x5 + .byte 0x93,0x17 + .4byte .LASF3035 + .byte 0x5 + .byte 0x95,0x17 + .4byte .LASF3036 + .byte 0x5 + .byte 0x96,0x17 + .4byte .LASF3037 + .byte 0x5 + .byte 0x97,0x17 + .4byte .LASF3038 + .byte 0x5 + .byte 0x98,0x17 + .4byte .LASF3039 + .byte 0x5 + .byte 0x9a,0x17 + .4byte .LASF3040 + .byte 0x5 + .byte 0x9c,0x17 + .4byte .LASF3041 + .byte 0x5 + .byte 0x9d,0x17 + .4byte .LASF3042 + .byte 0x5 + .byte 0x9e,0x17 + .4byte .LASF3043 + .byte 0x5 + .byte 0xa0,0x17 + .4byte .LASF3044 + .byte 0x5 + .byte 0xa1,0x17 + .4byte .LASF3045 + .byte 0x5 + .byte 0xa3,0x17 + .4byte .LASF3046 + .byte 0x5 + .byte 0xa4,0x17 + .4byte .LASF3047 + .byte 0x5 + .byte 0xa5,0x17 + .4byte .LASF3048 + .byte 0x5 + .byte 0xa6,0x17 + .4byte .LASF3049 + .byte 0x5 + .byte 0xa8,0x17 + .4byte .LASF3050 + .byte 0x5 + .byte 0xab,0x17 + .4byte .LASF3051 + .byte 0x5 + .byte 0xac,0x17 + .4byte .LASF3052 + .byte 0x5 + .byte 0xad,0x17 + .4byte .LASF3053 + .byte 0x5 + .byte 0xaf,0x17 + .4byte .LASF3054 + .byte 0x5 + .byte 0xb0,0x17 + .4byte .LASF3055 + .byte 0x5 + .byte 0xb1,0x17 + .4byte .LASF3056 + .byte 0x5 + .byte 0xb2,0x17 + .4byte .LASF3057 + .byte 0x5 + .byte 0xb3,0x17 + .4byte .LASF3058 + .byte 0x5 + .byte 0xb5,0x17 + .4byte .LASF3059 + .byte 0x5 + .byte 0xb6,0x17 + .4byte .LASF3060 + .byte 0x5 + .byte 0xb7,0x17 + .4byte .LASF3061 + .byte 0x5 + .byte 0xb9,0x17 + .4byte .LASF3062 + .byte 0x5 + .byte 0xba,0x17 + .4byte .LASF3063 + .byte 0x5 + .byte 0xbb,0x17 + .4byte .LASF3064 + .byte 0x5 + .byte 0xbc,0x17 + .4byte .LASF3065 + .byte 0x5 + .byte 0xbd,0x17 + .4byte .LASF3066 + .byte 0x5 + .byte 0xc0,0x17 + .4byte .LASF3067 + .byte 0x5 + .byte 0xc1,0x17 + .4byte .LASF3068 + .byte 0x5 + .byte 0xc2,0x17 + .4byte .LASF3069 + .byte 0x5 + .byte 0xc3,0x17 + .4byte .LASF3070 + .byte 0x5 + .byte 0xc4,0x17 + .4byte .LASF3071 + .byte 0x5 + .byte 0xc5,0x17 + .4byte .LASF3072 + .byte 0x5 + .byte 0xc6,0x17 + .4byte .LASF3073 + .byte 0x5 + .byte 0xc7,0x17 + .4byte .LASF3074 + .byte 0x5 + .byte 0xc8,0x17 + .4byte .LASF3075 + .byte 0x5 + .byte 0xc9,0x17 + .4byte .LASF3076 + .byte 0x5 + .byte 0xca,0x17 + .4byte .LASF3077 + .byte 0x5 + .byte 0xcb,0x17 + .4byte .LASF3078 + .byte 0x5 + .byte 0xcc,0x17 + .4byte .LASF3079 + .byte 0x5 + .byte 0xcd,0x17 + .4byte .LASF3080 + .byte 0x5 + .byte 0xce,0x17 + .4byte .LASF3081 + .byte 0x5 + .byte 0xd1,0x17 + .4byte .LASF3082 + .byte 0x5 + .byte 0xd4,0x17 + .4byte .LASF3083 + .byte 0x5 + .byte 0xd7,0x17 + .4byte .LASF3084 + .byte 0x5 + .byte 0xda,0x17 + .4byte .LASF3085 + .byte 0x5 + .byte 0xdd,0x17 + .4byte .LASF3086 + .byte 0x5 + .byte 0xe0,0x17 + .4byte .LASF3087 + .byte 0x5 + .byte 0xe3,0x17 + .4byte .LASF3088 + .byte 0x5 + .byte 0xe6,0x17 + .4byte .LASF3089 + .byte 0x5 + .byte 0xe9,0x17 + .4byte .LASF3090 + .byte 0x5 + .byte 0xea,0x17 + .4byte .LASF3091 + .byte 0x5 + .byte 0xeb,0x17 + .4byte .LASF3092 + .byte 0x5 + .byte 0xec,0x17 + .4byte .LASF3093 + .byte 0x5 + .byte 0xed,0x17 + .4byte .LASF3094 + .byte 0x5 + .byte 0xee,0x17 + .4byte .LASF3095 + .byte 0x5 + .byte 0xef,0x17 + .4byte .LASF3096 + .byte 0x5 + .byte 0xf0,0x17 + .4byte .LASF3097 + .byte 0x5 + .byte 0xf1,0x17 + .4byte .LASF3098 + .byte 0x5 + .byte 0xf3,0x17 + .4byte .LASF3099 + .byte 0x5 + .byte 0xf4,0x17 + .4byte .LASF3100 + .byte 0x5 + .byte 0xf5,0x17 + .4byte .LASF3101 + .byte 0x5 + .byte 0xf7,0x17 + .4byte .LASF3102 + .byte 0x5 + .byte 0xf8,0x17 + .4byte .LASF3103 + .byte 0x5 + .byte 0xf9,0x17 + .4byte .LASF3104 + .byte 0x5 + .byte 0xfa,0x17 + .4byte .LASF3105 + .byte 0x5 + .byte 0xfb,0x17 + .4byte .LASF3106 + .byte 0x5 + .byte 0xfc,0x17 + .4byte .LASF3107 + .byte 0x5 + .byte 0xff,0x17 + .4byte .LASF3108 + .byte 0x5 + .byte 0x80,0x18 + .4byte .LASF3109 + .byte 0x5 + .byte 0x81,0x18 + .4byte .LASF3110 + .byte 0x5 + .byte 0x82,0x18 + .4byte .LASF3111 + .byte 0x5 + .byte 0x83,0x18 + .4byte .LASF3112 + .byte 0x5 + .byte 0x84,0x18 + .4byte .LASF3113 + .byte 0x5 + .byte 0x86,0x18 + .4byte .LASF3114 + .byte 0x5 + .byte 0x87,0x18 + .4byte .LASF3115 + .byte 0x5 + .byte 0x88,0x18 + .4byte .LASF3116 + .byte 0x5 + .byte 0x89,0x18 + .4byte .LASF3117 + .byte 0x5 + .byte 0x8a,0x18 + .4byte .LASF3118 + .byte 0x5 + .byte 0x8b,0x18 + .4byte .LASF3119 + .byte 0x5 + .byte 0x8e,0x18 + .4byte .LASF3120 + .byte 0x5 + .byte 0x95,0x18 + .4byte .LASF3121 + .byte 0x5 + .byte 0x96,0x18 + .4byte .LASF3122 + .byte 0x5 + .byte 0x97,0x18 + .4byte .LASF3123 + .byte 0x5 + .byte 0x98,0x18 + .4byte .LASF3124 + .byte 0x5 + .byte 0x99,0x18 + .4byte .LASF3125 + .byte 0x5 + .byte 0x9a,0x18 + .4byte .LASF3126 + .byte 0x5 + .byte 0x9b,0x18 + .4byte .LASF3127 + .byte 0x5 + .byte 0x9c,0x18 + .4byte .LASF3128 + .byte 0x5 + .byte 0x9d,0x18 + .4byte .LASF3129 + .byte 0x5 + .byte 0x9e,0x18 + .4byte .LASF3130 + .byte 0x5 + .byte 0xa1,0x18 + .4byte .LASF3131 + .byte 0x5 + .byte 0xa4,0x18 + .4byte .LASF3132 + .byte 0x5 + .byte 0xa5,0x18 + .4byte .LASF3133 + .byte 0x5 + .byte 0xa8,0x18 + .4byte .LASF3134 + .byte 0x5 + .byte 0xa9,0x18 + .4byte .LASF3135 + .byte 0x5 + .byte 0xaa,0x18 + .4byte .LASF3136 + .byte 0x5 + .byte 0xab,0x18 + .4byte .LASF3137 + .byte 0x5 + .byte 0xac,0x18 + .4byte .LASF3138 + .byte 0x5 + .byte 0xad,0x18 + .4byte .LASF3139 + .byte 0x5 + .byte 0xae,0x18 + .4byte .LASF3140 + .byte 0x5 + .byte 0xaf,0x18 + .4byte .LASF3141 + .byte 0x5 + .byte 0xb0,0x18 + .4byte .LASF3142 + .byte 0x5 + .byte 0xb1,0x18 + .4byte .LASF3143 + .byte 0x5 + .byte 0xb2,0x18 + .4byte .LASF3144 + .byte 0x5 + .byte 0xb3,0x18 + .4byte .LASF3145 + .byte 0x5 + .byte 0xb4,0x18 + .4byte .LASF3146 + .byte 0x5 + .byte 0xb5,0x18 + .4byte .LASF3147 + .byte 0x5 + .byte 0xb6,0x18 + .4byte .LASF3148 + .byte 0x5 + .byte 0xb9,0x18 + .4byte .LASF3149 + .byte 0x5 + .byte 0xba,0x18 + .4byte .LASF3150 + .byte 0x5 + .byte 0xbb,0x18 + .4byte .LASF3151 + .byte 0x5 + .byte 0xbc,0x18 + .4byte .LASF3152 + .byte 0x5 + .byte 0xbd,0x18 + .4byte .LASF3153 + .byte 0x5 + .byte 0xbe,0x18 + .4byte .LASF3154 + .byte 0x5 + .byte 0xbf,0x18 + .4byte .LASF3155 + .byte 0x5 + .byte 0xc1,0x18 + .4byte .LASF3156 + .byte 0x5 + .byte 0xc2,0x18 + .4byte .LASF3157 + .byte 0x5 + .byte 0xc3,0x18 + .4byte .LASF3158 + .byte 0x5 + .byte 0xc5,0x18 + .4byte .LASF3159 + .byte 0x5 + .byte 0xc8,0x18 + .4byte .LASF3160 + .byte 0x5 + .byte 0xc9,0x18 + .4byte .LASF3161 + .byte 0x5 + .byte 0xca,0x18 + .4byte .LASF3162 + .byte 0x5 + .byte 0xcb,0x18 + .4byte .LASF3163 + .byte 0x5 + .byte 0xcc,0x18 + .4byte .LASF3164 + .byte 0x5 + .byte 0xcd,0x18 + .4byte .LASF3165 + .byte 0x5 + .byte 0xce,0x18 + .4byte .LASF3166 + .byte 0x5 + .byte 0xcf,0x18 + .4byte .LASF3167 + .byte 0x5 + .byte 0xd0,0x18 + .4byte .LASF3168 + .byte 0x5 + .byte 0xd1,0x18 + .4byte .LASF3169 + .byte 0x5 + .byte 0xd2,0x18 + .4byte .LASF3170 + .byte 0x5 + .byte 0xd3,0x18 + .4byte .LASF3171 + .byte 0x5 + .byte 0xd6,0x18 + .4byte .LASF3172 + .byte 0x5 + .byte 0xd7,0x18 + .4byte .LASF3173 + .byte 0x5 + .byte 0xd8,0x18 + .4byte .LASF3174 + .byte 0x5 + .byte 0xd9,0x18 + .4byte .LASF3175 + .byte 0x5 + .byte 0xda,0x18 + .4byte .LASF3176 + .byte 0x5 + .byte 0xdb,0x18 + .4byte .LASF3177 + .byte 0x5 + .byte 0xdc,0x18 + .4byte .LASF3178 + .byte 0x5 + .byte 0xdd,0x18 + .4byte .LASF3179 + .byte 0x5 + .byte 0xde,0x18 + .4byte .LASF3180 + .byte 0x5 + .byte 0xe0,0x18 + .4byte .LASF3181 + .byte 0x5 + .byte 0xe7,0x18 + .4byte .LASF3182 + .byte 0x5 + .byte 0xe8,0x18 + .4byte .LASF3183 + .byte 0x5 + .byte 0xe9,0x18 + .4byte .LASF3184 + .byte 0x5 + .byte 0xea,0x18 + .4byte .LASF3185 + .byte 0x5 + .byte 0xeb,0x18 + .4byte .LASF3186 + .byte 0x5 + .byte 0xec,0x18 + .4byte .LASF3187 + .byte 0x5 + .byte 0xed,0x18 + .4byte .LASF3188 + .byte 0x5 + .byte 0xee,0x18 + .4byte .LASF3189 + .byte 0x5 + .byte 0xf0,0x18 + .4byte .LASF3190 + .byte 0x5 + .byte 0xf3,0x18 + .4byte .LASF3191 + .byte 0x5 + .byte 0xf4,0x18 + .4byte .LASF3192 + .byte 0x5 + .byte 0xf5,0x18 + .4byte .LASF3193 + .byte 0x5 + .byte 0xf6,0x18 + .4byte .LASF3194 + .byte 0x5 + .byte 0xf7,0x18 + .4byte .LASF3195 + .byte 0x5 + .byte 0xf8,0x18 + .4byte .LASF3196 + .byte 0x5 + .byte 0xf9,0x18 + .4byte .LASF3197 + .byte 0x5 + .byte 0xfa,0x18 + .4byte .LASF3198 + .byte 0x5 + .byte 0xfc,0x18 + .4byte .LASF3199 + .byte 0x5 + .byte 0xfd,0x18 + .4byte .LASF3200 + .byte 0x5 + .byte 0xfe,0x18 + .4byte .LASF3201 + .byte 0x5 + .byte 0x80,0x19 + .4byte .LASF3202 + .byte 0x5 + .byte 0x83,0x19 + .4byte .LASF3203 + .byte 0x5 + .byte 0x8a,0x19 + .4byte .LASF3204 + .byte 0x5 + .byte 0x8b,0x19 + .4byte .LASF3205 + .byte 0x5 + .byte 0x8c,0x19 + .4byte .LASF3206 + .byte 0x5 + .byte 0x8d,0x19 + .4byte .LASF3207 + .byte 0x5 + .byte 0x8e,0x19 + .4byte .LASF3208 + .byte 0x5 + .byte 0x8f,0x19 + .4byte .LASF3209 + .byte 0x5 + .byte 0x90,0x19 + .4byte .LASF3210 + .byte 0x5 + .byte 0x92,0x19 + .4byte .LASF3211 + .byte 0x5 + .byte 0x93,0x19 + .4byte .LASF3212 + .byte 0x5 + .byte 0x94,0x19 + .4byte .LASF3213 + .byte 0x5 + .byte 0x96,0x19 + .4byte .LASF3214 + .byte 0x5 + .byte 0x97,0x19 + .4byte .LASF3215 + .byte 0x5 + .byte 0x98,0x19 + .4byte .LASF3216 + .byte 0x5 + .byte 0x9a,0x19 + .4byte .LASF3217 + .byte 0x5 + .byte 0x9b,0x19 + .4byte .LASF3218 + .byte 0x5 + .byte 0x9c,0x19 + .4byte .LASF3219 + .byte 0x5 + .byte 0x9d,0x19 + .4byte .LASF3220 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_adc.h.47.2f8f94c42a26d78297424757abdcfc70,comdat +.Ldebug_macro49: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x2f + .4byte .LASF3223 + .byte 0x5 + .byte 0x30 + .4byte .LASF3224 + .byte 0x5 + .byte 0x31 + .4byte .LASF3225 + .byte 0x5 + .byte 0x32 + .4byte .LASF3226 + .byte 0x5 + .byte 0x33 + .4byte .LASF3227 + .byte 0x5 + .byte 0x34 + .4byte .LASF3228 + .byte 0x5 + .byte 0x35 + .4byte .LASF3229 + .byte 0x5 + .byte 0x36 + .4byte .LASF3230 + .byte 0x5 + .byte 0x37 + .4byte .LASF3231 + .byte 0x5 + .byte 0x38 + .4byte .LASF3232 + .byte 0x5 + .byte 0x3b + .4byte .LASF3233 + .byte 0x5 + .byte 0x3c + .4byte .LASF3234 + .byte 0x5 + .byte 0x3d + .4byte .LASF3235 + .byte 0x5 + .byte 0x3e + .4byte .LASF3236 + .byte 0x5 + .byte 0x3f + .4byte .LASF3237 + .byte 0x5 + .byte 0x40 + .4byte .LASF3238 + .byte 0x5 + .byte 0x42 + .4byte .LASF3239 + .byte 0x5 + .byte 0x43 + .4byte .LASF3240 + .byte 0x5 + .byte 0x46 + .4byte .LASF3241 + .byte 0x5 + .byte 0x47 + .4byte .LASF3242 + .byte 0x5 + .byte 0x4a + .4byte .LASF3243 + .byte 0x5 + .byte 0x4b + .4byte .LASF3244 + .byte 0x5 + .byte 0x4c + .4byte .LASF3245 + .byte 0x5 + .byte 0x4d + .4byte .LASF3246 + .byte 0x5 + .byte 0x4e + .4byte .LASF3247 + .byte 0x5 + .byte 0x4f + .4byte .LASF3248 + .byte 0x5 + .byte 0x50 + .4byte .LASF3249 + .byte 0x5 + .byte 0x51 + .4byte .LASF3250 + .byte 0x5 + .byte 0x52 + .4byte .LASF3251 + .byte 0x5 + .byte 0x53 + .4byte .LASF3252 + .byte 0x5 + .byte 0x54 + .4byte .LASF3253 + .byte 0x5 + .byte 0x55 + .4byte .LASF3254 + .byte 0x5 + .byte 0x56 + .4byte .LASF3255 + .byte 0x5 + .byte 0x57 + .4byte .LASF3256 + .byte 0x5 + .byte 0x58 + .4byte .LASF3257 + .byte 0x5 + .byte 0x59 + .4byte .LASF3258 + .byte 0x5 + .byte 0x5a + .4byte .LASF3259 + .byte 0x5 + .byte 0x5b + .4byte .LASF3260 + .byte 0x5 + .byte 0x5d + .4byte .LASF3261 + .byte 0x5 + .byte 0x5e + .4byte .LASF3262 + .byte 0x5 + .byte 0x61 + .4byte .LASF3263 + .byte 0x5 + .byte 0x62 + .4byte .LASF3264 + .byte 0x5 + .byte 0x63 + .4byte .LASF3265 + .byte 0x5 + .byte 0x64 + .4byte .LASF3266 + .byte 0x5 + .byte 0x65 + .4byte .LASF3267 + .byte 0x5 + .byte 0x66 + .4byte .LASF3268 + .byte 0x5 + .byte 0x67 + .4byte .LASF3269 + .byte 0x5 + .byte 0x68 + .4byte .LASF3270 + .byte 0x5 + .byte 0x6b + .4byte .LASF3271 + .byte 0x5 + .byte 0x6c + .4byte .LASF3272 + .byte 0x5 + .byte 0x6d + .4byte .LASF3273 + .byte 0x5 + .byte 0x6e + .4byte .LASF3274 + .byte 0x5 + .byte 0x6f + .4byte .LASF3275 + .byte 0x5 + .byte 0x71 + .4byte .LASF3276 + .byte 0x5 + .byte 0x72 + .4byte .LASF3277 + .byte 0x5 + .byte 0x73 + .4byte .LASF3278 + .byte 0x5 + .byte 0x76 + .4byte .LASF3279 + .byte 0x5 + .byte 0x77 + .4byte .LASF3280 + .byte 0x5 + .byte 0x78 + .4byte .LASF3281 + .byte 0x5 + .byte 0x79 + .4byte .LASF3282 + .byte 0x5 + .byte 0x7c + .4byte .LASF3283 + .byte 0x5 + .byte 0x7d + .4byte .LASF3284 + .byte 0x5 + .byte 0x7e + .4byte .LASF3285 + .byte 0x5 + .byte 0x7f + .4byte .LASF3286 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF3287 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF3288 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF3289 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF3290 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF3291 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF3292 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF3293 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF3294 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF3295 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF3296 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF3297 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_bkp.h.10.9889f5ee278f2650a4705ae2619c1961,comdat +.Ldebug_macro50: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3298 + .byte 0x5 + .byte 0x13 + .4byte .LASF3299 + .byte 0x5 + .byte 0x14 + .4byte .LASF3300 + .byte 0x5 + .byte 0x17 + .4byte .LASF3301 + .byte 0x5 + .byte 0x18 + .4byte .LASF3302 + .byte 0x5 + .byte 0x19 + .4byte .LASF3303 + .byte 0x5 + .byte 0x1a + .4byte .LASF3304 + .byte 0x5 + .byte 0x1d + .4byte .LASF3305 + .byte 0x5 + .byte 0x1e + .4byte .LASF3306 + .byte 0x5 + .byte 0x1f + .4byte .LASF3307 + .byte 0x5 + .byte 0x20 + .4byte .LASF3308 + .byte 0x5 + .byte 0x21 + .4byte .LASF3309 + .byte 0x5 + .byte 0x22 + .4byte .LASF3310 + .byte 0x5 + .byte 0x23 + .4byte .LASF3311 + .byte 0x5 + .byte 0x24 + .4byte .LASF3312 + .byte 0x5 + .byte 0x25 + .4byte .LASF3313 + .byte 0x5 + .byte 0x26 + .4byte .LASF3314 + .byte 0x5 + .byte 0x27 + .4byte .LASF3315 + .byte 0x5 + .byte 0x28 + .4byte .LASF3316 + .byte 0x5 + .byte 0x29 + .4byte .LASF3317 + .byte 0x5 + .byte 0x2a + .4byte .LASF3318 + .byte 0x5 + .byte 0x2b + .4byte .LASF3319 + .byte 0x5 + .byte 0x2c + .4byte .LASF3320 + .byte 0x5 + .byte 0x2d + .4byte .LASF3321 + .byte 0x5 + .byte 0x2e + .4byte .LASF3322 + .byte 0x5 + .byte 0x2f + .4byte .LASF3323 + .byte 0x5 + .byte 0x30 + .4byte .LASF3324 + .byte 0x5 + .byte 0x31 + .4byte .LASF3325 + .byte 0x5 + .byte 0x32 + .4byte .LASF3326 + .byte 0x5 + .byte 0x33 + .4byte .LASF3327 + .byte 0x5 + .byte 0x34 + .4byte .LASF3328 + .byte 0x5 + .byte 0x35 + .4byte .LASF3329 + .byte 0x5 + .byte 0x36 + .4byte .LASF3330 + .byte 0x5 + .byte 0x37 + .4byte .LASF3331 + .byte 0x5 + .byte 0x38 + .4byte .LASF3332 + .byte 0x5 + .byte 0x39 + .4byte .LASF3333 + .byte 0x5 + .byte 0x3a + .4byte .LASF3334 + .byte 0x5 + .byte 0x3b + .4byte .LASF3335 + .byte 0x5 + .byte 0x3c + .4byte .LASF3336 + .byte 0x5 + .byte 0x3d + .4byte .LASF3337 + .byte 0x5 + .byte 0x3e + .4byte .LASF3338 + .byte 0x5 + .byte 0x3f + .4byte .LASF3339 + .byte 0x5 + .byte 0x40 + .4byte .LASF3340 + .byte 0x5 + .byte 0x41 + .4byte .LASF3341 + .byte 0x5 + .byte 0x42 + .4byte .LASF3342 + .byte 0x5 + .byte 0x43 + .4byte .LASF3343 + .byte 0x5 + .byte 0x44 + .4byte .LASF3344 + .byte 0x5 + .byte 0x45 + .4byte .LASF3345 + .byte 0x5 + .byte 0x46 + .4byte .LASF3346 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_dbgmcu.h.10.42ff0b2d3382aa6311bcca75be7270ad,comdat +.Ldebug_macro51: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3348 + .byte 0x5 + .byte 0x14 + .4byte .LASF3349 + .byte 0x5 + .byte 0x15 + .4byte .LASF3350 + .byte 0x5 + .byte 0x16 + .4byte .LASF3351 + .byte 0x5 + .byte 0x17 + .4byte .LASF3352 + .byte 0x5 + .byte 0x18 + .4byte .LASF3353 + .byte 0x5 + .byte 0x19 + .4byte .LASF3354 + .byte 0x5 + .byte 0x1a + .4byte .LASF3355 + .byte 0x5 + .byte 0x1b + .4byte .LASF3356 + .byte 0x5 + .byte 0x1e + .4byte .LASF3357 + .byte 0x5 + .byte 0x1f + .4byte .LASF3358 + .byte 0x5 + .byte 0x20 + .4byte .LASF3359 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_dma.h.10.b875f1cdd6f1a6d6455d6ca5ef52cb6d,comdat +.Ldebug_macro52: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3360 + .byte 0x5 + .byte 0x39 + .4byte .LASF3361 + .byte 0x5 + .byte 0x3a + .4byte .LASF3362 + .byte 0x5 + .byte 0x3d + .4byte .LASF3363 + .byte 0x5 + .byte 0x3e + .4byte .LASF3364 + .byte 0x5 + .byte 0x41 + .4byte .LASF3365 + .byte 0x5 + .byte 0x42 + .4byte .LASF3366 + .byte 0x5 + .byte 0x45 + .4byte .LASF3367 + .byte 0x5 + .byte 0x46 + .4byte .LASF3368 + .byte 0x5 + .byte 0x47 + .4byte .LASF3369 + .byte 0x5 + .byte 0x4a + .4byte .LASF3370 + .byte 0x5 + .byte 0x4b + .4byte .LASF3371 + .byte 0x5 + .byte 0x4c + .4byte .LASF3372 + .byte 0x5 + .byte 0x4f + .4byte .LASF3373 + .byte 0x5 + .byte 0x50 + .4byte .LASF3374 + .byte 0x5 + .byte 0x53 + .4byte .LASF3375 + .byte 0x5 + .byte 0x54 + .4byte .LASF3376 + .byte 0x5 + .byte 0x55 + .4byte .LASF3377 + .byte 0x5 + .byte 0x56 + .4byte .LASF3378 + .byte 0x5 + .byte 0x59 + .4byte .LASF3379 + .byte 0x5 + .byte 0x5a + .4byte .LASF3380 + .byte 0x5 + .byte 0x5d + .4byte .LASF3381 + .byte 0x5 + .byte 0x5e + .4byte .LASF3382 + .byte 0x5 + .byte 0x5f + .4byte .LASF3383 + .byte 0x5 + .byte 0x61 + .4byte .LASF3384 + .byte 0x5 + .byte 0x62 + .4byte .LASF3385 + .byte 0x5 + .byte 0x63 + .4byte .LASF3386 + .byte 0x5 + .byte 0x64 + .4byte .LASF3387 + .byte 0x5 + .byte 0x65 + .4byte .LASF3388 + .byte 0x5 + .byte 0x66 + .4byte .LASF3389 + .byte 0x5 + .byte 0x67 + .4byte .LASF3390 + .byte 0x5 + .byte 0x68 + .4byte .LASF3391 + .byte 0x5 + .byte 0x69 + .4byte .LASF3392 + .byte 0x5 + .byte 0x6a + .4byte .LASF3393 + .byte 0x5 + .byte 0x6b + .4byte .LASF3394 + .byte 0x5 + .byte 0x6c + .4byte .LASF3395 + .byte 0x5 + .byte 0x6d + .4byte .LASF3396 + .byte 0x5 + .byte 0x6e + .4byte .LASF3397 + .byte 0x5 + .byte 0x6f + .4byte .LASF3398 + .byte 0x5 + .byte 0x70 + .4byte .LASF3399 + .byte 0x5 + .byte 0x71 + .4byte .LASF3400 + .byte 0x5 + .byte 0x72 + .4byte .LASF3401 + .byte 0x5 + .byte 0x73 + .4byte .LASF3402 + .byte 0x5 + .byte 0x74 + .4byte .LASF3403 + .byte 0x5 + .byte 0x75 + .4byte .LASF3404 + .byte 0x5 + .byte 0x76 + .4byte .LASF3405 + .byte 0x5 + .byte 0x77 + .4byte .LASF3406 + .byte 0x5 + .byte 0x78 + .4byte .LASF3407 + .byte 0x5 + .byte 0x79 + .4byte .LASF3408 + .byte 0x5 + .byte 0x7a + .4byte .LASF3409 + .byte 0x5 + .byte 0x7b + .4byte .LASF3410 + .byte 0x5 + .byte 0x7c + .4byte .LASF3411 + .byte 0x5 + .byte 0x7e + .4byte .LASF3412 + .byte 0x5 + .byte 0x7f + .4byte .LASF3413 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF3414 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF3415 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF3416 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF3417 + .byte 0x5 + .byte 0x84,0x1 + .4byte .LASF3418 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF3419 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF3420 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF3421 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF3422 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF3423 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF3424 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF3425 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF3426 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF3427 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF3428 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF3429 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF3430 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF3431 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF3432 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF3433 + .byte 0x5 + .byte 0x96,0x1 + .4byte .LASF3434 + .byte 0x5 + .byte 0x97,0x1 + .4byte .LASF3435 + .byte 0x5 + .byte 0x98,0x1 + .4byte .LASF3436 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF3437 + .byte 0x5 + .byte 0x9a,0x1 + .4byte .LASF3438 + .byte 0x5 + .byte 0x9b,0x1 + .4byte .LASF3439 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF3440 + .byte 0x5 + .byte 0x9d,0x1 + .4byte .LASF3441 + .byte 0x5 + .byte 0x9e,0x1 + .4byte .LASF3442 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF3443 + .byte 0x5 + .byte 0xa0,0x1 + .4byte .LASF3444 + .byte 0x5 + .byte 0xa1,0x1 + .4byte .LASF3445 + .byte 0x5 + .byte 0xa2,0x1 + .4byte .LASF3446 + .byte 0x5 + .byte 0xa3,0x1 + .4byte .LASF3447 + .byte 0x5 + .byte 0xa4,0x1 + .4byte .LASF3448 + .byte 0x5 + .byte 0xa5,0x1 + .4byte .LASF3449 + .byte 0x5 + .byte 0xa6,0x1 + .4byte .LASF3450 + .byte 0x5 + .byte 0xa7,0x1 + .4byte .LASF3451 + .byte 0x5 + .byte 0xa8,0x1 + .4byte .LASF3452 + .byte 0x5 + .byte 0xa9,0x1 + .4byte .LASF3453 + .byte 0x5 + .byte 0xaa,0x1 + .4byte .LASF3454 + .byte 0x5 + .byte 0xab,0x1 + .4byte .LASF3455 + .byte 0x5 + .byte 0xac,0x1 + .4byte .LASF3456 + .byte 0x5 + .byte 0xad,0x1 + .4byte .LASF3457 + .byte 0x5 + .byte 0xae,0x1 + .4byte .LASF3458 + .byte 0x5 + .byte 0xaf,0x1 + .4byte .LASF3459 + .byte 0x5 + .byte 0xb1,0x1 + .4byte .LASF3460 + .byte 0x5 + .byte 0xb2,0x1 + .4byte .LASF3461 + .byte 0x5 + .byte 0xb3,0x1 + .4byte .LASF3462 + .byte 0x5 + .byte 0xb4,0x1 + .4byte .LASF3463 + .byte 0x5 + .byte 0xb5,0x1 + .4byte .LASF3464 + .byte 0x5 + .byte 0xb6,0x1 + .4byte .LASF3465 + .byte 0x5 + .byte 0xb7,0x1 + .4byte .LASF3466 + .byte 0x5 + .byte 0xb8,0x1 + .4byte .LASF3467 + .byte 0x5 + .byte 0xb9,0x1 + .4byte .LASF3468 + .byte 0x5 + .byte 0xba,0x1 + .4byte .LASF3469 + .byte 0x5 + .byte 0xbb,0x1 + .4byte .LASF3470 + .byte 0x5 + .byte 0xbc,0x1 + .4byte .LASF3471 + .byte 0x5 + .byte 0xbd,0x1 + .4byte .LASF3472 + .byte 0x5 + .byte 0xbe,0x1 + .4byte .LASF3473 + .byte 0x5 + .byte 0xbf,0x1 + .4byte .LASF3474 + .byte 0x5 + .byte 0xc0,0x1 + .4byte .LASF3475 + .byte 0x5 + .byte 0xc1,0x1 + .4byte .LASF3476 + .byte 0x5 + .byte 0xc2,0x1 + .4byte .LASF3477 + .byte 0x5 + .byte 0xc3,0x1 + .4byte .LASF3478 + .byte 0x5 + .byte 0xc4,0x1 + .4byte .LASF3479 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_exti.h.10.d7d49d1427a0092ae3c2f3e9aee285cb,comdat +.Ldebug_macro53: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3480 + .byte 0x5 + .byte 0x33 + .4byte .LASF3481 + .byte 0x5 + .byte 0x34 + .4byte .LASF3482 + .byte 0x5 + .byte 0x35 + .4byte .LASF3483 + .byte 0x5 + .byte 0x36 + .4byte .LASF3484 + .byte 0x5 + .byte 0x37 + .4byte .LASF3485 + .byte 0x5 + .byte 0x38 + .4byte .LASF3486 + .byte 0x5 + .byte 0x39 + .4byte .LASF3487 + .byte 0x5 + .byte 0x3a + .4byte .LASF3488 + .byte 0x5 + .byte 0x3b + .4byte .LASF3489 + .byte 0x5 + .byte 0x3c + .4byte .LASF3490 + .byte 0x5 + .byte 0x3d + .4byte .LASF3491 + .byte 0x5 + .byte 0x3e + .4byte .LASF3492 + .byte 0x5 + .byte 0x3f + .4byte .LASF3493 + .byte 0x5 + .byte 0x40 + .4byte .LASF3494 + .byte 0x5 + .byte 0x41 + .4byte .LASF3495 + .byte 0x5 + .byte 0x42 + .4byte .LASF3496 + .byte 0x5 + .byte 0x43 + .4byte .LASF3497 + .byte 0x5 + .byte 0x44 + .4byte .LASF3498 + .byte 0x5 + .byte 0x45 + .4byte .LASF3499 + .byte 0x5 + .byte 0x47 + .4byte .LASF3500 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_flash.h.10.20b49c415d0743c84cf2968780b18069,comdat +.Ldebug_macro54: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3501 + .byte 0x5 + .byte 0x1e + .4byte .LASF3502 + .byte 0x5 + .byte 0x1f + .4byte .LASF3503 + .byte 0x5 + .byte 0x20 + .4byte .LASF3504 + .byte 0x5 + .byte 0x23 + .4byte .LASF3505 + .byte 0x5 + .byte 0x24 + .4byte .LASF3506 + .byte 0x5 + .byte 0x27 + .4byte .LASF3507 + .byte 0x5 + .byte 0x28 + .4byte .LASF3508 + .byte 0x5 + .byte 0x2b + .4byte .LASF3509 + .byte 0x5 + .byte 0x2c + .4byte .LASF3510 + .byte 0x5 + .byte 0x2d + .4byte .LASF3511 + .byte 0x5 + .byte 0x2e + .4byte .LASF3512 + .byte 0x5 + .byte 0x2f + .4byte .LASF3513 + .byte 0x5 + .byte 0x30 + .4byte .LASF3514 + .byte 0x5 + .byte 0x31 + .4byte .LASF3515 + .byte 0x5 + .byte 0x32 + .4byte .LASF3516 + .byte 0x5 + .byte 0x35 + .4byte .LASF3517 + .byte 0x5 + .byte 0x36 + .4byte .LASF3518 + .byte 0x5 + .byte 0x37 + .4byte .LASF3519 + .byte 0x5 + .byte 0x38 + .4byte .LASF3520 + .byte 0x5 + .byte 0x39 + .4byte .LASF3521 + .byte 0x5 + .byte 0x3a + .4byte .LASF3522 + .byte 0x5 + .byte 0x3b + .4byte .LASF3523 + .byte 0x5 + .byte 0x3c + .4byte .LASF3524 + .byte 0x5 + .byte 0x3d + .4byte .LASF3525 + .byte 0x5 + .byte 0x3e + .4byte .LASF3526 + .byte 0x5 + .byte 0x3f + .4byte .LASF3527 + .byte 0x5 + .byte 0x40 + .4byte .LASF3528 + .byte 0x5 + .byte 0x41 + .4byte .LASF3529 + .byte 0x5 + .byte 0x42 + .4byte .LASF3530 + .byte 0x5 + .byte 0x43 + .4byte .LASF3531 + .byte 0x5 + .byte 0x44 + .4byte .LASF3532 + .byte 0x5 + .byte 0x45 + .4byte .LASF3533 + .byte 0x5 + .byte 0x46 + .4byte .LASF3534 + .byte 0x5 + .byte 0x47 + .4byte .LASF3535 + .byte 0x5 + .byte 0x48 + .4byte .LASF3536 + .byte 0x5 + .byte 0x49 + .4byte .LASF3537 + .byte 0x5 + .byte 0x4a + .4byte .LASF3538 + .byte 0x5 + .byte 0x4b + .4byte .LASF3539 + .byte 0x5 + .byte 0x4c + .4byte .LASF3540 + .byte 0x5 + .byte 0x4e + .4byte .LASF3541 + .byte 0x5 + .byte 0x50 + .4byte .LASF3542 + .byte 0x5 + .byte 0x53 + .4byte .LASF3543 + .byte 0x5 + .byte 0x54 + .4byte .LASF3544 + .byte 0x5 + .byte 0x57 + .4byte .LASF3545 + .byte 0x5 + .byte 0x58 + .4byte .LASF3546 + .byte 0x5 + .byte 0x5b + .4byte .LASF3547 + .byte 0x5 + .byte 0x5c + .4byte .LASF3548 + .byte 0x5 + .byte 0x5f + .4byte .LASF3549 + .byte 0x5 + .byte 0x60 + .4byte .LASF3550 + .byte 0x5 + .byte 0x61 + .4byte .LASF3551 + .byte 0x5 + .byte 0x62 + .4byte .LASF3552 + .byte 0x5 + .byte 0x65 + .4byte .LASF3553 + .byte 0x5 + .byte 0x66 + .4byte .LASF3554 + .byte 0x5 + .byte 0x67 + .4byte .LASF3555 + .byte 0x5 + .byte 0x68 + .4byte .LASF3556 + .byte 0x5 + .byte 0x69 + .4byte .LASF3557 + .byte 0x5 + .byte 0x6b + .4byte .LASF3558 + .byte 0x5 + .byte 0x6c + .4byte .LASF3559 + .byte 0x5 + .byte 0x6d + .4byte .LASF3560 + .byte 0x5 + .byte 0x6e + .4byte .LASF3561 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_gpio.h.10.159337fac61b3860aa706ef4c0d5fcaf,comdat +.Ldebug_macro55: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3562 + .byte 0x5 + .byte 0x3b + .4byte .LASF3563 + .byte 0x5 + .byte 0x3c + .4byte .LASF3564 + .byte 0x5 + .byte 0x3d + .4byte .LASF3565 + .byte 0x5 + .byte 0x3e + .4byte .LASF3566 + .byte 0x5 + .byte 0x3f + .4byte .LASF3567 + .byte 0x5 + .byte 0x40 + .4byte .LASF3568 + .byte 0x5 + .byte 0x41 + .4byte .LASF3569 + .byte 0x5 + .byte 0x42 + .4byte .LASF3570 + .byte 0x5 + .byte 0x43 + .4byte .LASF3571 + .byte 0x5 + .byte 0x44 + .4byte .LASF3572 + .byte 0x5 + .byte 0x45 + .4byte .LASF3573 + .byte 0x5 + .byte 0x46 + .4byte .LASF3574 + .byte 0x5 + .byte 0x47 + .4byte .LASF3575 + .byte 0x5 + .byte 0x48 + .4byte .LASF3576 + .byte 0x5 + .byte 0x49 + .4byte .LASF3577 + .byte 0x5 + .byte 0x4a + .4byte .LASF3578 + .byte 0x5 + .byte 0x4b + .4byte .LASF3579 + .byte 0x5 + .byte 0x4e + .4byte .LASF3580 + .byte 0x5 + .byte 0x4f + .4byte .LASF3581 + .byte 0x5 + .byte 0x50 + .4byte .LASF3582 + .byte 0x5 + .byte 0x51 + .4byte .LASF3583 + .byte 0x5 + .byte 0x52 + .4byte .LASF3584 + .byte 0x5 + .byte 0x53 + .4byte .LASF3585 + .byte 0x5 + .byte 0x54 + .4byte .LASF3586 + .byte 0x5 + .byte 0x55 + .4byte .LASF3587 + .byte 0x5 + .byte 0x56 + .4byte .LASF3588 + .byte 0x5 + .byte 0x57 + .4byte .LASF3589 + .byte 0x5 + .byte 0x58 + .4byte .LASF3590 + .byte 0x5 + .byte 0x59 + .4byte .LASF3591 + .byte 0x5 + .byte 0x5a + .4byte .LASF3592 + .byte 0x5 + .byte 0x5b + .4byte .LASF3593 + .byte 0x5 + .byte 0x5c + .4byte .LASF3594 + .byte 0x5 + .byte 0x5d + .4byte .LASF3595 + .byte 0x5 + .byte 0x5e + .4byte .LASF3596 + .byte 0x5 + .byte 0x5f + .4byte .LASF3597 + .byte 0x5 + .byte 0x60 + .4byte .LASF3598 + .byte 0x5 + .byte 0x61 + .4byte .LASF3599 + .byte 0x5 + .byte 0x62 + .4byte .LASF3600 + .byte 0x5 + .byte 0x63 + .4byte .LASF3601 + .byte 0x5 + .byte 0x64 + .4byte .LASF3602 + .byte 0x5 + .byte 0x67 + .4byte .LASF3603 + .byte 0x5 + .byte 0x68 + .4byte .LASF3604 + .byte 0x5 + .byte 0x69 + .4byte .LASF3605 + .byte 0x5 + .byte 0x6d + .4byte .LASF3606 + .byte 0x5 + .byte 0x6e + .4byte .LASF3607 + .byte 0x5 + .byte 0x6f + .4byte .LASF3608 + .byte 0x5 + .byte 0x70 + .4byte .LASF3609 + .byte 0x5 + .byte 0x71 + .4byte .LASF3610 + .byte 0x5 + .byte 0x72 + .4byte .LASF3611 + .byte 0x5 + .byte 0x73 + .4byte .LASF3612 + .byte 0x5 + .byte 0x76 + .4byte .LASF3613 + .byte 0x5 + .byte 0x77 + .4byte .LASF3614 + .byte 0x5 + .byte 0x78 + .4byte .LASF3615 + .byte 0x5 + .byte 0x79 + .4byte .LASF3616 + .byte 0x5 + .byte 0x7a + .4byte .LASF3617 + .byte 0x5 + .byte 0x7b + .4byte .LASF3618 + .byte 0x5 + .byte 0x7c + .4byte .LASF3619 + .byte 0x5 + .byte 0x7d + .4byte .LASF3620 + .byte 0x5 + .byte 0x7e + .4byte .LASF3621 + .byte 0x5 + .byte 0x7f + .4byte .LASF3622 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF3623 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF3624 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF3625 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF3626 + .byte 0x5 + .byte 0x84,0x1 + .4byte .LASF3627 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF3628 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_i2c.h.10.bfad8e35c8f588ca6d137ff8d1e84da3,comdat +.Ldebug_macro56: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3629 + .byte 0x5 + .byte 0x29 + .4byte .LASF3630 + .byte 0x5 + .byte 0x2a + .4byte .LASF3631 + .byte 0x5 + .byte 0x2b + .4byte .LASF3632 + .byte 0x5 + .byte 0x2e + .4byte .LASF3633 + .byte 0x5 + .byte 0x2f + .4byte .LASF3634 + .byte 0x5 + .byte 0x32 + .4byte .LASF3635 + .byte 0x5 + .byte 0x33 + .4byte .LASF3636 + .byte 0x5 + .byte 0x36 + .4byte .LASF3637 + .byte 0x5 + .byte 0x37 + .4byte .LASF3638 + .byte 0x5 + .byte 0x3a + .4byte .LASF3639 + .byte 0x5 + .byte 0x3b + .4byte .LASF3640 + .byte 0x5 + .byte 0x3e + .4byte .LASF3641 + .byte 0x5 + .byte 0x3f + .4byte .LASF3642 + .byte 0x5 + .byte 0x40 + .4byte .LASF3643 + .byte 0x5 + .byte 0x41 + .4byte .LASF3644 + .byte 0x5 + .byte 0x42 + .4byte .LASF3645 + .byte 0x5 + .byte 0x43 + .4byte .LASF3646 + .byte 0x5 + .byte 0x44 + .4byte .LASF3647 + .byte 0x5 + .byte 0x45 + .4byte .LASF3648 + .byte 0x5 + .byte 0x46 + .4byte .LASF3649 + .byte 0x5 + .byte 0x49 + .4byte .LASF3650 + .byte 0x5 + .byte 0x4a + .4byte .LASF3651 + .byte 0x5 + .byte 0x4d + .4byte .LASF3652 + .byte 0x5 + .byte 0x4e + .4byte .LASF3653 + .byte 0x5 + .byte 0x51 + .4byte .LASF3654 + .byte 0x5 + .byte 0x52 + .4byte .LASF3655 + .byte 0x5 + .byte 0x55 + .4byte .LASF3656 + .byte 0x5 + .byte 0x56 + .4byte .LASF3657 + .byte 0x5 + .byte 0x57 + .4byte .LASF3658 + .byte 0x5 + .byte 0x5a + .4byte .LASF3659 + .byte 0x5 + .byte 0x5b + .4byte .LASF3660 + .byte 0x5 + .byte 0x5c + .4byte .LASF3661 + .byte 0x5 + .byte 0x5d + .4byte .LASF3662 + .byte 0x5 + .byte 0x5e + .4byte .LASF3663 + .byte 0x5 + .byte 0x5f + .4byte .LASF3664 + .byte 0x5 + .byte 0x60 + .4byte .LASF3665 + .byte 0x5 + .byte 0x61 + .4byte .LASF3666 + .byte 0x5 + .byte 0x62 + .4byte .LASF3667 + .byte 0x5 + .byte 0x63 + .4byte .LASF3668 + .byte 0x5 + .byte 0x64 + .4byte .LASF3669 + .byte 0x5 + .byte 0x65 + .4byte .LASF3670 + .byte 0x5 + .byte 0x66 + .4byte .LASF3671 + .byte 0x5 + .byte 0x67 + .4byte .LASF3672 + .byte 0x5 + .byte 0x6a + .4byte .LASF3673 + .byte 0x5 + .byte 0x6b + .4byte .LASF3674 + .byte 0x5 + .byte 0x6c + .4byte .LASF3675 + .byte 0x5 + .byte 0x6d + .4byte .LASF3676 + .byte 0x5 + .byte 0x6e + .4byte .LASF3677 + .byte 0x5 + .byte 0x6f + .4byte .LASF3678 + .byte 0x5 + .byte 0x70 + .4byte .LASF3679 + .byte 0x5 + .byte 0x73 + .4byte .LASF3680 + .byte 0x5 + .byte 0x74 + .4byte .LASF3681 + .byte 0x5 + .byte 0x75 + .4byte .LASF3682 + .byte 0x5 + .byte 0x76 + .4byte .LASF3683 + .byte 0x5 + .byte 0x77 + .4byte .LASF3684 + .byte 0x5 + .byte 0x78 + .4byte .LASF3685 + .byte 0x5 + .byte 0x79 + .4byte .LASF3686 + .byte 0x5 + .byte 0x7a + .4byte .LASF3687 + .byte 0x5 + .byte 0x7b + .4byte .LASF3688 + .byte 0x5 + .byte 0x7c + .4byte .LASF3689 + .byte 0x5 + .byte 0x7d + .4byte .LASF3690 + .byte 0x5 + .byte 0x7e + .4byte .LASF3691 + .byte 0x5 + .byte 0x7f + .4byte .LASF3692 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF3693 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF3694 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF3695 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF3696 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF3697 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF3698 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF3699 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF3700 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF3701 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF3702 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF3703 + .byte 0x5 + .byte 0x93,0x1 + .4byte .LASF3704 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF3705 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF3706 + .byte 0x5 + .byte 0x96,0x1 + .4byte .LASF3707 + .byte 0x5 + .byte 0x97,0x1 + .4byte .LASF3708 + .byte 0x5 + .byte 0x98,0x1 + .4byte .LASF3709 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF3710 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_iwdg.h.10.8e7e9eba38fd42c5acff6b60f609fffe,comdat +.Ldebug_macro57: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3711 + .byte 0x5 + .byte 0x13 + .4byte .LASF3712 + .byte 0x5 + .byte 0x14 + .4byte .LASF3713 + .byte 0x5 + .byte 0x17 + .4byte .LASF3714 + .byte 0x5 + .byte 0x18 + .4byte .LASF3715 + .byte 0x5 + .byte 0x19 + .4byte .LASF3716 + .byte 0x5 + .byte 0x1a + .4byte .LASF3717 + .byte 0x5 + .byte 0x1b + .4byte .LASF3718 + .byte 0x5 + .byte 0x1c + .4byte .LASF3719 + .byte 0x5 + .byte 0x1d + .4byte .LASF3720 + .byte 0x5 + .byte 0x20 + .4byte .LASF3721 + .byte 0x5 + .byte 0x21 + .4byte .LASF3722 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_pwr.h.10.098398f8f71941e8039df6c53291be7b,comdat +.Ldebug_macro58: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3723 + .byte 0x5 + .byte 0x13 + .4byte .LASF3724 + .byte 0x5 + .byte 0x14 + .4byte .LASF3725 + .byte 0x5 + .byte 0x15 + .4byte .LASF3726 + .byte 0x5 + .byte 0x16 + .4byte .LASF3727 + .byte 0x5 + .byte 0x17 + .4byte .LASF3728 + .byte 0x5 + .byte 0x18 + .4byte .LASF3729 + .byte 0x5 + .byte 0x19 + .4byte .LASF3730 + .byte 0x5 + .byte 0x1a + .4byte .LASF3731 + .byte 0x5 + .byte 0x1d + .4byte .LASF3732 + .byte 0x5 + .byte 0x1e + .4byte .LASF3733 + .byte 0x5 + .byte 0x21 + .4byte .LASF3734 + .byte 0x5 + .byte 0x22 + .4byte .LASF3735 + .byte 0x5 + .byte 0x25 + .4byte .LASF3736 + .byte 0x5 + .byte 0x26 + .4byte .LASF3737 + .byte 0x5 + .byte 0x27 + .4byte .LASF3738 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_rcc.h.9.4f83391d39a5012c6dcb1e1bd283fc2c,comdat +.Ldebug_macro59: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x9 + .4byte .LASF3739 + .byte 0x5 + .byte 0x1c + .4byte .LASF3740 + .byte 0x5 + .byte 0x1d + .4byte .LASF3741 + .byte 0x5 + .byte 0x1e + .4byte .LASF3742 + .byte 0x5 + .byte 0x21 + .4byte .LASF3743 + .byte 0x5 + .byte 0x22 + .4byte .LASF3744 + .byte 0x5 + .byte 0x23 + .4byte .LASF3745 + .byte 0x5 + .byte 0x26 + .4byte .LASF3746 + .byte 0x5 + .byte 0x27 + .4byte .LASF3747 + .byte 0x5 + .byte 0x28 + .4byte .LASF3748 + .byte 0x5 + .byte 0x29 + .4byte .LASF3749 + .byte 0x5 + .byte 0x2a + .4byte .LASF3750 + .byte 0x5 + .byte 0x2b + .4byte .LASF3751 + .byte 0x5 + .byte 0x2c + .4byte .LASF3752 + .byte 0x5 + .byte 0x2d + .4byte .LASF3753 + .byte 0x5 + .byte 0x2e + .4byte .LASF3754 + .byte 0x5 + .byte 0x2f + .4byte .LASF3755 + .byte 0x5 + .byte 0x30 + .4byte .LASF3756 + .byte 0x5 + .byte 0x31 + .4byte .LASF3757 + .byte 0x5 + .byte 0x32 + .4byte .LASF3758 + .byte 0x5 + .byte 0x33 + .4byte .LASF3759 + .byte 0x5 + .byte 0x34 + .4byte .LASF3760 + .byte 0x5 + .byte 0x37 + .4byte .LASF3761 + .byte 0x5 + .byte 0x38 + .4byte .LASF3762 + .byte 0x5 + .byte 0x39 + .4byte .LASF3763 + .byte 0x5 + .byte 0x3c + .4byte .LASF3764 + .byte 0x5 + .byte 0x3d + .4byte .LASF3765 + .byte 0x5 + .byte 0x3e + .4byte .LASF3766 + .byte 0x5 + .byte 0x3f + .4byte .LASF3767 + .byte 0x5 + .byte 0x40 + .4byte .LASF3768 + .byte 0x5 + .byte 0x41 + .4byte .LASF3769 + .byte 0x5 + .byte 0x42 + .4byte .LASF3770 + .byte 0x5 + .byte 0x43 + .4byte .LASF3771 + .byte 0x5 + .byte 0x44 + .4byte .LASF3772 + .byte 0x5 + .byte 0x47 + .4byte .LASF3773 + .byte 0x5 + .byte 0x48 + .4byte .LASF3774 + .byte 0x5 + .byte 0x49 + .4byte .LASF3775 + .byte 0x5 + .byte 0x4a + .4byte .LASF3776 + .byte 0x5 + .byte 0x4b + .4byte .LASF3777 + .byte 0x5 + .byte 0x4e + .4byte .LASF3778 + .byte 0x5 + .byte 0x4f + .4byte .LASF3779 + .byte 0x5 + .byte 0x50 + .4byte .LASF3780 + .byte 0x5 + .byte 0x51 + .4byte .LASF3781 + .byte 0x5 + .byte 0x52 + .4byte .LASF3782 + .byte 0x5 + .byte 0x53 + .4byte .LASF3783 + .byte 0x5 + .byte 0x56 + .4byte .LASF3784 + .byte 0x5 + .byte 0x57 + .4byte .LASF3785 + .byte 0x5 + .byte 0x5a + .4byte .LASF3786 + .byte 0x5 + .byte 0x5b + .4byte .LASF3787 + .byte 0x5 + .byte 0x5c + .4byte .LASF3788 + .byte 0x5 + .byte 0x5d + .4byte .LASF3789 + .byte 0x5 + .byte 0x60 + .4byte .LASF3790 + .byte 0x5 + .byte 0x61 + .4byte .LASF3791 + .byte 0x5 + .byte 0x62 + .4byte .LASF3792 + .byte 0x5 + .byte 0x65 + .4byte .LASF3793 + .byte 0x5 + .byte 0x66 + .4byte .LASF3794 + .byte 0x5 + .byte 0x67 + .4byte .LASF3795 + .byte 0x5 + .byte 0x6a + .4byte .LASF3796 + .byte 0x5 + .byte 0x6b + .4byte .LASF3797 + .byte 0x5 + .byte 0x6c + .4byte .LASF3798 + .byte 0x5 + .byte 0x6d + .4byte .LASF3799 + .byte 0x5 + .byte 0x6e + .4byte .LASF3800 + .byte 0x5 + .byte 0x6f + .4byte .LASF3801 + .byte 0x5 + .byte 0x70 + .4byte .LASF3802 + .byte 0x5 + .byte 0x71 + .4byte .LASF3803 + .byte 0x5 + .byte 0x74 + .4byte .LASF3804 + .byte 0x5 + .byte 0x75 + .4byte .LASF3805 + .byte 0x5 + .byte 0x76 + .4byte .LASF3806 + .byte 0x5 + .byte 0x77 + .4byte .LASF3807 + .byte 0x5 + .byte 0x78 + .4byte .LASF3808 + .byte 0x5 + .byte 0x79 + .4byte .LASF3809 + .byte 0x5 + .byte 0x7a + .4byte .LASF3810 + .byte 0x5 + .byte 0x7b + .4byte .LASF3811 + .byte 0x5 + .byte 0x7c + .4byte .LASF3812 + .byte 0x5 + .byte 0x7d + .4byte .LASF3813 + .byte 0x5 + .byte 0x7e + .4byte .LASF3814 + .byte 0x5 + .byte 0x7f + .4byte .LASF3815 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF3816 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF3817 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF3818 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF3819 + .byte 0x5 + .byte 0x84,0x1 + .4byte .LASF3820 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF3821 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF3822 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF3823 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF3824 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF3825 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF3826 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF3827 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF3828 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF3829 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF3830 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF3831 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF3832 + .byte 0x5 + .byte 0x93,0x1 + .4byte .LASF3833 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF3834 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF3835 + .byte 0x5 + .byte 0x96,0x1 + .4byte .LASF3836 + .byte 0x5 + .byte 0x97,0x1 + .4byte .LASF3837 + .byte 0x5 + .byte 0x98,0x1 + .4byte .LASF3838 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF3839 + .byte 0x5 + .byte 0x9a,0x1 + .4byte .LASF3840 + .byte 0x5 + .byte 0x9b,0x1 + .4byte .LASF3841 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF3842 + .byte 0x5 + .byte 0x9d,0x1 + .4byte .LASF3843 + .byte 0x5 + .byte 0x9e,0x1 + .4byte .LASF3844 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF3845 + .byte 0x5 + .byte 0xa0,0x1 + .4byte .LASF3846 + .byte 0x5 + .byte 0xa1,0x1 + .4byte .LASF3847 + .byte 0x5 + .byte 0xa2,0x1 + .4byte .LASF3848 + .byte 0x5 + .byte 0xa3,0x1 + .4byte .LASF3849 + .byte 0x5 + .byte 0xa6,0x1 + .4byte .LASF3850 + .byte 0x5 + .byte 0xa7,0x1 + .4byte .LASF3851 + .byte 0x5 + .byte 0xa8,0x1 + .4byte .LASF3852 + .byte 0x5 + .byte 0xa9,0x1 + .4byte .LASF3853 + .byte 0x5 + .byte 0xaa,0x1 + .4byte .LASF3854 + .byte 0x5 + .byte 0xad,0x1 + .4byte .LASF3855 + .byte 0x5 + .byte 0xae,0x1 + .4byte .LASF3856 + .byte 0x5 + .byte 0xaf,0x1 + .4byte .LASF3857 + .byte 0x5 + .byte 0xb0,0x1 + .4byte .LASF3858 + .byte 0x5 + .byte 0xb1,0x1 + .4byte .LASF3859 + .byte 0x5 + .byte 0xb2,0x1 + .4byte .LASF3860 + .byte 0x5 + .byte 0xb3,0x1 + .4byte .LASF3861 + .byte 0x5 + .byte 0xb4,0x1 + .4byte .LASF3862 + .byte 0x5 + .byte 0xb5,0x1 + .4byte .LASF3863 + .byte 0x5 + .byte 0xb6,0x1 + .4byte .LASF3864 + .byte 0x5 + .byte 0xb7,0x1 + .4byte .LASF3865 + .byte 0x5 + .byte 0xba,0x1 + .4byte .LASF3866 + .byte 0x5 + .byte 0xbb,0x1 + .4byte .LASF3867 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_rtc.h.10.95faa0db92efd9563f894a8928872668,comdat +.Ldebug_macro60: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3868 + .byte 0x5 + .byte 0x14 + .4byte .LASF3869 + .byte 0x5 + .byte 0x15 + .4byte .LASF3870 + .byte 0x5 + .byte 0x16 + .4byte .LASF3871 + .byte 0x5 + .byte 0x19 + .4byte .LASF3872 + .byte 0x5 + .byte 0x1a + .4byte .LASF3873 + .byte 0x5 + .byte 0x1b + .4byte .LASF3874 + .byte 0x5 + .byte 0x1c + .4byte .LASF3875 + .byte 0x5 + .byte 0x1d + .4byte .LASF3876 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_spi.h.10.2057d37d657d92f6312526c6aee1bc60,comdat +.Ldebug_macro61: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3877 + .byte 0x5 + .byte 0x4c + .4byte .LASF3878 + .byte 0x5 + .byte 0x4d + .4byte .LASF3879 + .byte 0x5 + .byte 0x4e + .4byte .LASF3880 + .byte 0x5 + .byte 0x4f + .4byte .LASF3881 + .byte 0x5 + .byte 0x52 + .4byte .LASF3882 + .byte 0x5 + .byte 0x53 + .4byte .LASF3883 + .byte 0x5 + .byte 0x56 + .4byte .LASF3884 + .byte 0x5 + .byte 0x57 + .4byte .LASF3885 + .byte 0x5 + .byte 0x5a + .4byte .LASF3886 + .byte 0x5 + .byte 0x5b + .4byte .LASF3887 + .byte 0x5 + .byte 0x5e + .4byte .LASF3888 + .byte 0x5 + .byte 0x5f + .4byte .LASF3889 + .byte 0x5 + .byte 0x62 + .4byte .LASF3890 + .byte 0x5 + .byte 0x63 + .4byte .LASF3891 + .byte 0x5 + .byte 0x66 + .4byte .LASF3892 + .byte 0x5 + .byte 0x67 + .4byte .LASF3893 + .byte 0x5 + .byte 0x68 + .4byte .LASF3894 + .byte 0x5 + .byte 0x69 + .4byte .LASF3895 + .byte 0x5 + .byte 0x6a + .4byte .LASF3896 + .byte 0x5 + .byte 0x6b + .4byte .LASF3897 + .byte 0x5 + .byte 0x6c + .4byte .LASF3898 + .byte 0x5 + .byte 0x6d + .4byte .LASF3899 + .byte 0x5 + .byte 0x70 + .4byte .LASF3900 + .byte 0x5 + .byte 0x71 + .4byte .LASF3901 + .byte 0x5 + .byte 0x74 + .4byte .LASF3902 + .byte 0x5 + .byte 0x75 + .4byte .LASF3903 + .byte 0x5 + .byte 0x76 + .4byte .LASF3904 + .byte 0x5 + .byte 0x77 + .4byte .LASF3905 + .byte 0x5 + .byte 0x7a + .4byte .LASF3906 + .byte 0x5 + .byte 0x7b + .4byte .LASF3907 + .byte 0x5 + .byte 0x7c + .4byte .LASF3908 + .byte 0x5 + .byte 0x7d + .4byte .LASF3909 + .byte 0x5 + .byte 0x7e + .4byte .LASF3910 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF3911 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF3912 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF3913 + .byte 0x5 + .byte 0x84,0x1 + .4byte .LASF3914 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF3915 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF3916 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF3917 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF3918 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF3919 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF3920 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF3921 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF3922 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF3923 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF3924 + .byte 0x5 + .byte 0x93,0x1 + .4byte .LASF3925 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF3926 + .byte 0x5 + .byte 0x97,0x1 + .4byte .LASF3927 + .byte 0x5 + .byte 0x98,0x1 + .4byte .LASF3928 + .byte 0x5 + .byte 0x9b,0x1 + .4byte .LASF3929 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF3930 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF3931 + .byte 0x5 + .byte 0xa0,0x1 + .4byte .LASF3932 + .byte 0x5 + .byte 0xa3,0x1 + .4byte .LASF3933 + .byte 0x5 + .byte 0xa4,0x1 + .4byte .LASF3934 + .byte 0x5 + .byte 0xa7,0x1 + .4byte .LASF3935 + .byte 0x5 + .byte 0xa8,0x1 + .4byte .LASF3936 + .byte 0x5 + .byte 0xab,0x1 + .4byte .LASF3937 + .byte 0x5 + .byte 0xac,0x1 + .4byte .LASF3938 + .byte 0x5 + .byte 0xad,0x1 + .4byte .LASF3939 + .byte 0x5 + .byte 0xae,0x1 + .4byte .LASF3940 + .byte 0x5 + .byte 0xaf,0x1 + .4byte .LASF3941 + .byte 0x5 + .byte 0xb0,0x1 + .4byte .LASF3942 + .byte 0x5 + .byte 0xb1,0x1 + .4byte .LASF3943 + .byte 0x5 + .byte 0xb4,0x1 + .4byte .LASF3944 + .byte 0x5 + .byte 0xb5,0x1 + .4byte .LASF3945 + .byte 0x5 + .byte 0xb6,0x1 + .4byte .LASF3946 + .byte 0x5 + .byte 0xb7,0x1 + .4byte .LASF3947 + .byte 0x5 + .byte 0xb8,0x1 + .4byte .LASF3948 + .byte 0x5 + .byte 0xb9,0x1 + .4byte .LASF3949 + .byte 0x5 + .byte 0xba,0x1 + .4byte .LASF3950 + .byte 0x5 + .byte 0xbb,0x1 + .4byte .LASF3951 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_tim.h.10.afe1fcd8d5d8da8e8a70ae4e8fbb3eff,comdat +.Ldebug_macro62: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF3952 + .byte 0x5 + .byte 0x7a + .4byte .LASF3953 + .byte 0x5 + .byte 0x7b + .4byte .LASF3954 + .byte 0x5 + .byte 0x7c + .4byte .LASF3955 + .byte 0x5 + .byte 0x7d + .4byte .LASF3956 + .byte 0x5 + .byte 0x7e + .4byte .LASF3957 + .byte 0x5 + .byte 0x7f + .4byte .LASF3958 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF3959 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF3960 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF3961 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF3962 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF3963 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF3964 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF3965 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF3966 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF3967 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF3968 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF3969 + .byte 0x5 + .byte 0x93,0x1 + .4byte .LASF3970 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF3971 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF3972 + .byte 0x5 + .byte 0x98,0x1 + .4byte .LASF3973 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF3974 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF3975 + .byte 0x5 + .byte 0x9d,0x1 + .4byte .LASF3976 + .byte 0x5 + .byte 0xa0,0x1 + .4byte .LASF3977 + .byte 0x5 + .byte 0xa1,0x1 + .4byte .LASF3978 + .byte 0x5 + .byte 0xa4,0x1 + .4byte .LASF3979 + .byte 0x5 + .byte 0xa5,0x1 + .4byte .LASF3980 + .byte 0x5 + .byte 0xa8,0x1 + .4byte .LASF3981 + .byte 0x5 + .byte 0xa9,0x1 + .4byte .LASF3982 + .byte 0x5 + .byte 0xac,0x1 + .4byte .LASF3983 + .byte 0x5 + .byte 0xad,0x1 + .4byte .LASF3984 + .byte 0x5 + .byte 0xb0,0x1 + .4byte .LASF3985 + .byte 0x5 + .byte 0xb1,0x1 + .4byte .LASF3986 + .byte 0x5 + .byte 0xb4,0x1 + .4byte .LASF3987 + .byte 0x5 + .byte 0xb5,0x1 + .4byte .LASF3988 + .byte 0x5 + .byte 0xb8,0x1 + .4byte .LASF3989 + .byte 0x5 + .byte 0xb9,0x1 + .4byte .LASF3990 + .byte 0x5 + .byte 0xbc,0x1 + .4byte .LASF3991 + .byte 0x5 + .byte 0xbd,0x1 + .4byte .LASF3992 + .byte 0x5 + .byte 0xbe,0x1 + .4byte .LASF3993 + .byte 0x5 + .byte 0xbf,0x1 + .4byte .LASF3994 + .byte 0x5 + .byte 0xc2,0x1 + .4byte .LASF3995 + .byte 0x5 + .byte 0xc3,0x1 + .4byte .LASF3996 + .byte 0x5 + .byte 0xc6,0x1 + .4byte .LASF3997 + .byte 0x5 + .byte 0xc7,0x1 + .4byte .LASF3998 + .byte 0x5 + .byte 0xca,0x1 + .4byte .LASF3999 + .byte 0x5 + .byte 0xcb,0x1 + .4byte .LASF4000 + .byte 0x5 + .byte 0xce,0x1 + .4byte .LASF4001 + .byte 0x5 + .byte 0xcf,0x1 + .4byte .LASF4002 + .byte 0x5 + .byte 0xd2,0x1 + .4byte .LASF4003 + .byte 0x5 + .byte 0xd3,0x1 + .4byte .LASF4004 + .byte 0x5 + .byte 0xd4,0x1 + .4byte .LASF4005 + .byte 0x5 + .byte 0xd7,0x1 + .4byte .LASF4006 + .byte 0x5 + .byte 0xd9,0x1 + .4byte .LASF4007 + .byte 0x5 + .byte 0xdb,0x1 + .4byte .LASF4008 + .byte 0x5 + .byte 0xde,0x1 + .4byte .LASF4009 + .byte 0x5 + .byte 0xdf,0x1 + .4byte .LASF4010 + .byte 0x5 + .byte 0xe0,0x1 + .4byte .LASF4011 + .byte 0x5 + .byte 0xe1,0x1 + .4byte .LASF4012 + .byte 0x5 + .byte 0xe4,0x1 + .4byte .LASF4013 + .byte 0x5 + .byte 0xe5,0x1 + .4byte .LASF4014 + .byte 0x5 + .byte 0xe6,0x1 + .4byte .LASF4015 + .byte 0x5 + .byte 0xe7,0x1 + .4byte .LASF4016 + .byte 0x5 + .byte 0xe8,0x1 + .4byte .LASF4017 + .byte 0x5 + .byte 0xe9,0x1 + .4byte .LASF4018 + .byte 0x5 + .byte 0xea,0x1 + .4byte .LASF4019 + .byte 0x5 + .byte 0xeb,0x1 + .4byte .LASF4020 + .byte 0x5 + .byte 0xee,0x1 + .4byte .LASF4021 + .byte 0x5 + .byte 0xef,0x1 + .4byte .LASF4022 + .byte 0x5 + .byte 0xf0,0x1 + .4byte .LASF4023 + .byte 0x5 + .byte 0xf1,0x1 + .4byte .LASF4024 + .byte 0x5 + .byte 0xf2,0x1 + .4byte .LASF4025 + .byte 0x5 + .byte 0xf3,0x1 + .4byte .LASF4026 + .byte 0x5 + .byte 0xf4,0x1 + .4byte .LASF4027 + .byte 0x5 + .byte 0xf5,0x1 + .4byte .LASF4028 + .byte 0x5 + .byte 0xf6,0x1 + .4byte .LASF4029 + .byte 0x5 + .byte 0xf7,0x1 + .4byte .LASF4030 + .byte 0x5 + .byte 0xf8,0x1 + .4byte .LASF4031 + .byte 0x5 + .byte 0xf9,0x1 + .4byte .LASF4032 + .byte 0x5 + .byte 0xfa,0x1 + .4byte .LASF4033 + .byte 0x5 + .byte 0xfb,0x1 + .4byte .LASF4034 + .byte 0x5 + .byte 0xfc,0x1 + .4byte .LASF4035 + .byte 0x5 + .byte 0xfd,0x1 + .4byte .LASF4036 + .byte 0x5 + .byte 0xfe,0x1 + .4byte .LASF4037 + .byte 0x5 + .byte 0xff,0x1 + .4byte .LASF4038 + .byte 0x5 + .byte 0x80,0x2 + .4byte .LASF4039 + .byte 0x5 + .byte 0x83,0x2 + .4byte .LASF4040 + .byte 0x5 + .byte 0x84,0x2 + .4byte .LASF4041 + .byte 0x5 + .byte 0x85,0x2 + .4byte .LASF4042 + .byte 0x5 + .byte 0x86,0x2 + .4byte .LASF4043 + .byte 0x5 + .byte 0x87,0x2 + .4byte .LASF4044 + .byte 0x5 + .byte 0x88,0x2 + .4byte .LASF4045 + .byte 0x5 + .byte 0x89,0x2 + .4byte .LASF4046 + .byte 0x5 + .byte 0x8a,0x2 + .4byte .LASF4047 + .byte 0x5 + .byte 0x8b,0x2 + .4byte .LASF4048 + .byte 0x5 + .byte 0x8c,0x2 + .4byte .LASF4049 + .byte 0x5 + .byte 0x8d,0x2 + .4byte .LASF4050 + .byte 0x5 + .byte 0x8e,0x2 + .4byte .LASF4051 + .byte 0x5 + .byte 0x8f,0x2 + .4byte .LASF4052 + .byte 0x5 + .byte 0x90,0x2 + .4byte .LASF4053 + .byte 0x5 + .byte 0x91,0x2 + .4byte .LASF4054 + .byte 0x5 + .byte 0x92,0x2 + .4byte .LASF4055 + .byte 0x5 + .byte 0x93,0x2 + .4byte .LASF4056 + .byte 0x5 + .byte 0x94,0x2 + .4byte .LASF4057 + .byte 0x5 + .byte 0x97,0x2 + .4byte .LASF4058 + .byte 0x5 + .byte 0x98,0x2 + .4byte .LASF4059 + .byte 0x5 + .byte 0x99,0x2 + .4byte .LASF4060 + .byte 0x5 + .byte 0x9a,0x2 + .4byte .LASF4061 + .byte 0x5 + .byte 0x9b,0x2 + .4byte .LASF4062 + .byte 0x5 + .byte 0x9c,0x2 + .4byte .LASF4063 + .byte 0x5 + .byte 0x9d,0x2 + .4byte .LASF4064 + .byte 0x5 + .byte 0xa0,0x2 + .4byte .LASF4065 + .byte 0x5 + .byte 0xa1,0x2 + .4byte .LASF4066 + .byte 0x5 + .byte 0xa2,0x2 + .4byte .LASF4067 + .byte 0x5 + .byte 0xa3,0x2 + .4byte .LASF4068 + .byte 0x5 + .byte 0xa6,0x2 + .4byte .LASF4069 + .byte 0x5 + .byte 0xa7,0x2 + .4byte .LASF4070 + .byte 0x5 + .byte 0xa8,0x2 + .4byte .LASF4071 + .byte 0x5 + .byte 0xa9,0x2 + .4byte .LASF4072 + .byte 0x5 + .byte 0xaa,0x2 + .4byte .LASF4073 + .byte 0x5 + .byte 0xab,0x2 + .4byte .LASF4074 + .byte 0x5 + .byte 0xac,0x2 + .4byte .LASF4075 + .byte 0x5 + .byte 0xad,0x2 + .4byte .LASF4076 + .byte 0x5 + .byte 0xb0,0x2 + .4byte .LASF4077 + .byte 0x5 + .byte 0xb1,0x2 + .4byte .LASF4078 + .byte 0x5 + .byte 0xb2,0x2 + .4byte .LASF4079 + .byte 0x5 + .byte 0xb5,0x2 + .4byte .LASF4080 + .byte 0x5 + .byte 0xb6,0x2 + .4byte .LASF4081 + .byte 0x5 + .byte 0xb9,0x2 + .4byte .LASF4082 + .byte 0x5 + .byte 0xba,0x2 + .4byte .LASF4083 + .byte 0x5 + .byte 0xbd,0x2 + .4byte .LASF4084 + .byte 0x5 + .byte 0xbe,0x2 + .4byte .LASF4085 + .byte 0x5 + .byte 0xc1,0x2 + .4byte .LASF4086 + .byte 0x5 + .byte 0xc2,0x2 + .4byte .LASF4087 + .byte 0x5 + .byte 0xc3,0x2 + .4byte .LASF4088 + .byte 0x5 + .byte 0xc6,0x2 + .4byte .LASF4089 + .byte 0x5 + .byte 0xc7,0x2 + .4byte .LASF4090 + .byte 0x5 + .byte 0xc8,0x2 + .4byte .LASF4091 + .byte 0x5 + .byte 0xc9,0x2 + .4byte .LASF4092 + .byte 0x5 + .byte 0xca,0x2 + .4byte .LASF4093 + .byte 0x5 + .byte 0xcb,0x2 + .4byte .LASF4094 + .byte 0x5 + .byte 0xcc,0x2 + .4byte .LASF4095 + .byte 0x5 + .byte 0xcd,0x2 + .4byte .LASF4096 + .byte 0x5 + .byte 0xd0,0x2 + .4byte .LASF4097 + .byte 0x5 + .byte 0xd3,0x2 + .4byte .LASF4098 + .byte 0x5 + .byte 0xd6,0x2 + .4byte .LASF4099 + .byte 0x5 + .byte 0xd7,0x2 + .4byte .LASF4100 + .byte 0x5 + .byte 0xda,0x2 + .4byte .LASF4101 + .byte 0x5 + .byte 0xdb,0x2 + .4byte .LASF4102 + .byte 0x5 + .byte 0xde,0x2 + .4byte .LASF4103 + .byte 0x5 + .byte 0xdf,0x2 + .4byte .LASF4104 + .byte 0x5 + .byte 0xe2,0x2 + .4byte .LASF4105 + .byte 0x5 + .byte 0xe3,0x2 + .4byte .LASF4106 + .byte 0x5 + .byte 0xe4,0x2 + .4byte .LASF4107 + .byte 0x5 + .byte 0xe5,0x2 + .4byte .LASF4108 + .byte 0x5 + .byte 0xe6,0x2 + .4byte .LASF4109 + .byte 0x5 + .byte 0xe7,0x2 + .4byte .LASF4110 + .byte 0x5 + .byte 0xe8,0x2 + .4byte .LASF4111 + .byte 0x5 + .byte 0xe9,0x2 + .4byte .LASF4112 + .byte 0x5 + .byte 0xec,0x2 + .4byte .LASF4113 + .byte 0x5 + .byte 0xed,0x2 + .4byte .LASF4114 + .byte 0x5 + .byte 0xee,0x2 + .4byte .LASF4115 + .byte 0x5 + .byte 0xef,0x2 + .4byte .LASF4116 + .byte 0x5 + .byte 0xf2,0x2 + .4byte .LASF4117 + .byte 0x5 + .byte 0xf3,0x2 + .4byte .LASF4118 + .byte 0x5 + .byte 0xf6,0x2 + .4byte .LASF4119 + .byte 0x5 + .byte 0xf7,0x2 + .4byte .LASF4120 + .byte 0x5 + .byte 0xf8,0x2 + .4byte .LASF4121 + .byte 0x5 + .byte 0xf9,0x2 + .4byte .LASF4122 + .byte 0x5 + .byte 0xfa,0x2 + .4byte .LASF4123 + .byte 0x5 + .byte 0xfb,0x2 + .4byte .LASF4124 + .byte 0x5 + .byte 0xfc,0x2 + .4byte .LASF4125 + .byte 0x5 + .byte 0xfd,0x2 + .4byte .LASF4126 + .byte 0x5 + .byte 0xfe,0x2 + .4byte .LASF4127 + .byte 0x5 + .byte 0xff,0x2 + .4byte .LASF4128 + .byte 0x5 + .byte 0x80,0x3 + .4byte .LASF4129 + .byte 0x5 + .byte 0x81,0x3 + .4byte .LASF4130 + .byte 0x5 + .byte 0x84,0x3 + .4byte .LASF4131 + .byte 0x5 + .byte 0x85,0x3 + .4byte .LASF4132 + .byte 0x5 + .byte 0x86,0x3 + .4byte .LASF4133 + .byte 0x5 + .byte 0x87,0x3 + .4byte .LASF4134 + .byte 0x5 + .byte 0x88,0x3 + .4byte .LASF4135 + .byte 0x5 + .byte 0x89,0x3 + .4byte .LASF4136 + .byte 0x5 + .byte 0x8a,0x3 + .4byte .LASF4137 + .byte 0x5 + .byte 0x8b,0x3 + .4byte .LASF4138 + .byte 0x5 + .byte 0x8c,0x3 + .4byte .LASF4139 + .byte 0x5 + .byte 0x8d,0x3 + .4byte .LASF4140 + .byte 0x5 + .byte 0x8e,0x3 + .4byte .LASF4141 + .byte 0x5 + .byte 0x8f,0x3 + .4byte .LASF4142 + .byte 0x5 + .byte 0x90,0x3 + .4byte .LASF4143 + .byte 0x5 + .byte 0x91,0x3 + .4byte .LASF4144 + .byte 0x5 + .byte 0x92,0x3 + .4byte .LASF4145 + .byte 0x5 + .byte 0x93,0x3 + .4byte .LASF4146 + .byte 0x5 + .byte 0x94,0x3 + .4byte .LASF4147 + .byte 0x5 + .byte 0x95,0x3 + .4byte .LASF4148 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_usart.h.10.6fecf26248bd6b94d5cfd7e6fbba5fa9,comdat +.Ldebug_macro63: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF4149 + .byte 0x5 + .byte 0x43 + .4byte .LASF4150 + .byte 0x5 + .byte 0x44 + .4byte .LASF4151 + .byte 0x5 + .byte 0x47 + .4byte .LASF4152 + .byte 0x5 + .byte 0x48 + .4byte .LASF4153 + .byte 0x5 + .byte 0x49 + .4byte .LASF4154 + .byte 0x5 + .byte 0x4a + .4byte .LASF4155 + .byte 0x5 + .byte 0x4d + .4byte .LASF4156 + .byte 0x5 + .byte 0x4e + .4byte .LASF4157 + .byte 0x5 + .byte 0x4f + .4byte .LASF4158 + .byte 0x5 + .byte 0x52 + .4byte .LASF4159 + .byte 0x5 + .byte 0x53 + .4byte .LASF4160 + .byte 0x5 + .byte 0x56 + .4byte .LASF4161 + .byte 0x5 + .byte 0x57 + .4byte .LASF4162 + .byte 0x5 + .byte 0x58 + .4byte .LASF4163 + .byte 0x5 + .byte 0x59 + .4byte .LASF4164 + .byte 0x5 + .byte 0x5c + .4byte .LASF4165 + .byte 0x5 + .byte 0x5d + .4byte .LASF4166 + .byte 0x5 + .byte 0x60 + .4byte .LASF4167 + .byte 0x5 + .byte 0x61 + .4byte .LASF4168 + .byte 0x5 + .byte 0x64 + .4byte .LASF4169 + .byte 0x5 + .byte 0x65 + .4byte .LASF4170 + .byte 0x5 + .byte 0x68 + .4byte .LASF4171 + .byte 0x5 + .byte 0x69 + .4byte .LASF4172 + .byte 0x5 + .byte 0x6c + .4byte .LASF4173 + .byte 0x5 + .byte 0x6d + .4byte .LASF4174 + .byte 0x5 + .byte 0x6e + .4byte .LASF4175 + .byte 0x5 + .byte 0x6f + .4byte .LASF4176 + .byte 0x5 + .byte 0x70 + .4byte .LASF4177 + .byte 0x5 + .byte 0x71 + .4byte .LASF4178 + .byte 0x5 + .byte 0x72 + .4byte .LASF4179 + .byte 0x5 + .byte 0x73 + .4byte .LASF4180 + .byte 0x5 + .byte 0x74 + .4byte .LASF4181 + .byte 0x5 + .byte 0x75 + .4byte .LASF4182 + .byte 0x5 + .byte 0x76 + .4byte .LASF4183 + .byte 0x5 + .byte 0x77 + .4byte .LASF4184 + .byte 0x5 + .byte 0x79 + .4byte .LASF4185 + .byte 0x5 + .byte 0x7c + .4byte .LASF4186 + .byte 0x5 + .byte 0x7d + .4byte .LASF4187 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF4188 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF4189 + .byte 0x5 + .byte 0x84,0x1 + .4byte .LASF4190 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF4191 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF4192 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF4193 + .byte 0x5 + .byte 0x8c,0x1 + .4byte .LASF4194 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF4195 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF4196 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF4197 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF4198 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF4199 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF4200 + .byte 0x5 + .byte 0x93,0x1 + .4byte .LASF4201 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF4202 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF4203 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_wwdg.h.10.d5b5d650e1e4f0a6b6068507c13ba0b0,comdat +.Ldebug_macro64: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF4204 + .byte 0x5 + .byte 0x14 + .4byte .LASF4205 + .byte 0x5 + .byte 0x15 + .4byte .LASF4206 + .byte 0x5 + .byte 0x16 + .4byte .LASF4207 + .byte 0x5 + .byte 0x17 + .4byte .LASF4208 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_usb.h.10.19956e380e4dc786429f4d592491b5fe,comdat +.Ldebug_macro65: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF4209 + .byte 0x5 + .byte 0x15 + .4byte .LASF4210 + .byte 0x5 + .byte 0x18 + .4byte .LASF4211 + .byte 0x5 + .byte 0x68 + .4byte .LASF4212 + .byte 0x5 + .byte 0x69 + .4byte .LASF4213 + .byte 0x5 + .byte 0x6a + .4byte .LASF4214 + .byte 0x5 + .byte 0x6b + .4byte .LASF4215 + .byte 0x5 + .byte 0x6c + .4byte .LASF4216 + .byte 0x5 + .byte 0x6d + .4byte .LASF4217 + .byte 0x5 + .byte 0x6e + .4byte .LASF4218 + .byte 0x5 + .byte 0x6f + .4byte .LASF4219 + .byte 0x5 + .byte 0x78 + .4byte .LASF4220 + .byte 0x5 + .byte 0x79 + .4byte .LASF4221 + .byte 0x5 + .byte 0x7a + .4byte .LASF4222 + .byte 0x5 + .byte 0x7b + .4byte .LASF4223 + .byte 0x5 + .byte 0x7d + .4byte .LASF4224 + .byte 0x5 + .byte 0x7e + .4byte .LASF4225 + .byte 0x5 + .byte 0x7f + .4byte .LASF4226 + .byte 0x5 + .byte 0x80,0x1 + .4byte .LASF4227 + .byte 0x5 + .byte 0x81,0x1 + .4byte .LASF4228 + .byte 0x5 + .byte 0x82,0x1 + .4byte .LASF4229 + .byte 0x5 + .byte 0x83,0x1 + .4byte .LASF4230 + .byte 0x5 + .byte 0x85,0x1 + .4byte .LASF4231 + .byte 0x5 + .byte 0x86,0x1 + .4byte .LASF4232 + .byte 0x5 + .byte 0x87,0x1 + .4byte .LASF4233 + .byte 0x5 + .byte 0x88,0x1 + .4byte .LASF4234 + .byte 0x5 + .byte 0x89,0x1 + .4byte .LASF4235 + .byte 0x5 + .byte 0x8a,0x1 + .4byte .LASF4236 + .byte 0x5 + .byte 0x8b,0x1 + .4byte .LASF4237 + .byte 0x5 + .byte 0x8d,0x1 + .4byte .LASF4238 + .byte 0x5 + .byte 0x8e,0x1 + .4byte .LASF4239 + .byte 0x5 + .byte 0x8f,0x1 + .4byte .LASF4240 + .byte 0x5 + .byte 0x90,0x1 + .4byte .LASF4241 + .byte 0x5 + .byte 0x91,0x1 + .4byte .LASF4242 + .byte 0x5 + .byte 0x92,0x1 + .4byte .LASF4243 + .byte 0x5 + .byte 0x93,0x1 + .4byte .LASF4244 + .byte 0x5 + .byte 0x94,0x1 + .4byte .LASF4245 + .byte 0x5 + .byte 0x95,0x1 + .4byte .LASF4246 + .byte 0x5 + .byte 0x97,0x1 + .4byte .LASF4247 + .byte 0x5 + .byte 0x98,0x1 + .4byte .LASF4248 + .byte 0x5 + .byte 0x99,0x1 + .4byte .LASF4249 + .byte 0x5 + .byte 0x9b,0x1 + .4byte .LASF4250 + .byte 0x5 + .byte 0x9c,0x1 + .4byte .LASF4251 + .byte 0x5 + .byte 0x9d,0x1 + .4byte .LASF4252 + .byte 0x5 + .byte 0x9e,0x1 + .4byte .LASF4253 + .byte 0x5 + .byte 0x9f,0x1 + .4byte .LASF4254 + .byte 0x5 + .byte 0xa0,0x1 + .4byte .LASF4255 + .byte 0x5 + .byte 0xa1,0x1 + .4byte .LASF4256 + .byte 0x5 + .byte 0xa2,0x1 + .4byte .LASF4257 + .byte 0x5 + .byte 0xa3,0x1 + .4byte .LASF4258 + .byte 0x5 + .byte 0xa4,0x1 + .4byte .LASF4259 + .byte 0x5 + .byte 0xa6,0x1 + .4byte .LASF4260 + .byte 0x5 + .byte 0xa7,0x1 + .4byte .LASF4261 + .byte 0x5 + .byte 0xa8,0x1 + .4byte .LASF4262 + .byte 0x5 + .byte 0xa9,0x1 + .4byte .LASF4263 + .byte 0x5 + .byte 0xaa,0x1 + .4byte .LASF4264 + .byte 0x5 + .byte 0xab,0x1 + .4byte .LASF4265 + .byte 0x5 + .byte 0xac,0x1 + .4byte .LASF4266 + .byte 0x5 + .byte 0xad,0x1 + .4byte .LASF4267 + .byte 0x5 + .byte 0xae,0x1 + .4byte .LASF4268 + .byte 0x5 + .byte 0xaf,0x1 + .4byte .LASF4269 + .byte 0x5 + .byte 0xb1,0x1 + .4byte .LASF4270 + .byte 0x5 + .byte 0xb2,0x1 + .4byte .LASF4271 + .byte 0x5 + .byte 0xb3,0x1 + .4byte .LASF4272 + .byte 0x5 + .byte 0xb4,0x1 + .4byte .LASF4273 + .byte 0x5 + .byte 0xb5,0x1 + .4byte .LASF4274 + .byte 0x5 + .byte 0xb6,0x1 + .4byte .LASF4275 + .byte 0x5 + .byte 0xb7,0x1 + .4byte .LASF4276 + .byte 0x5 + .byte 0xb8,0x1 + .4byte .LASF4277 + .byte 0x5 + .byte 0xb9,0x1 + .4byte .LASF4278 + .byte 0x5 + .byte 0xba,0x1 + .4byte .LASF4279 + .byte 0x5 + .byte 0xc0,0x1 + .4byte .LASF4280 + .byte 0x5 + .byte 0xc1,0x1 + .4byte .LASF4281 + .byte 0x5 + .byte 0xc3,0x1 + .4byte .LASF4282 + .byte 0x5 + .byte 0xc4,0x1 + .4byte .LASF4283 + .byte 0x5 + .byte 0xc5,0x1 + .4byte .LASF4284 + .byte 0x5 + .byte 0xc6,0x1 + .4byte .LASF4285 + .byte 0x5 + .byte 0xc7,0x1 + .4byte .LASF4286 + .byte 0x5 + .byte 0xc8,0x1 + .4byte .LASF4287 + .byte 0x5 + .byte 0xd1,0x1 + .4byte .LASF4288 + .byte 0x5 + .byte 0xd2,0x1 + .4byte .LASF4289 + .byte 0x5 + .byte 0xda,0x1 + .4byte .LASF4290 + .byte 0x5 + .byte 0xdb,0x1 + .4byte .LASF4291 + .byte 0x5 + .byte 0xdc,0x1 + .4byte .LASF4292 + .byte 0x5 + .byte 0xdd,0x1 + .4byte .LASF4293 + .byte 0x5 + .byte 0xde,0x1 + .4byte .LASF4294 + .byte 0x5 + .byte 0xdf,0x1 + .4byte .LASF4295 + .byte 0x5 + .byte 0xe0,0x1 + .4byte .LASF4296 + .byte 0x5 + .byte 0xe2,0x1 + .4byte .LASF4297 + .byte 0x5 + .byte 0xe3,0x1 + .4byte .LASF4298 + .byte 0x5 + .byte 0xe4,0x1 + .4byte .LASF4299 + .byte 0x5 + .byte 0xe9,0x1 + .4byte .LASF4300 + .byte 0x5 + .byte 0xea,0x1 + .4byte .LASF4301 + .byte 0x5 + .byte 0xf0,0x1 + .4byte .LASF4302 + .byte 0x5 + .byte 0xf1,0x1 + .4byte .LASF4303 + .byte 0x5 + .byte 0xf2,0x1 + .4byte .LASF4304 + .byte 0x5 + .byte 0xf3,0x1 + .4byte .LASF4305 + .byte 0x5 + .byte 0xf4,0x1 + .4byte .LASF4306 + .byte 0x5 + .byte 0xf5,0x1 + .4byte .LASF4307 + .byte 0x5 + .byte 0xf6,0x1 + .4byte .LASF4308 + .byte 0x5 + .byte 0xf8,0x1 + .4byte .LASF4309 + .byte 0x5 + .byte 0xf9,0x1 + .4byte .LASF4310 + .byte 0x5 + .byte 0xfa,0x1 + .4byte .LASF4311 + .byte 0x5 + .byte 0xfb,0x1 + .4byte .LASF4312 + .byte 0x5 + .byte 0xfe,0x1 + .4byte .LASF4313 + .byte 0x5 + .byte 0xff,0x1 + .4byte .LASF4314 + .byte 0x5 + .byte 0x80,0x2 + .4byte .LASF4315 + .byte 0x5 + .byte 0x81,0x2 + .4byte .LASF4316 + .byte 0x5 + .byte 0x82,0x2 + .4byte .LASF4317 + .byte 0x5 + .byte 0x84,0x2 + .4byte .LASF4318 + .byte 0x5 + .byte 0x85,0x2 + .4byte .LASF4319 + .byte 0x5 + .byte 0x86,0x2 + .4byte .LASF4320 + .byte 0x5 + .byte 0x87,0x2 + .4byte .LASF4321 + .byte 0x5 + .byte 0x89,0x2 + .4byte .LASF4322 + .byte 0x5 + .byte 0x8a,0x2 + .4byte .LASF4323 + .byte 0x5 + .byte 0x8b,0x2 + .4byte .LASF4324 + .byte 0x5 + .byte 0x8c,0x2 + .4byte .LASF4325 + .byte 0x5 + .byte 0x8d,0x2 + .4byte .LASF4326 + .byte 0x5 + .byte 0x8e,0x2 + .4byte .LASF4327 + .byte 0x5 + .byte 0x8f,0x2 + .4byte .LASF4328 + .byte 0x5 + .byte 0x90,0x2 + .4byte .LASF4329 + .byte 0x5 + .byte 0x91,0x2 + .4byte .LASF4330 + .byte 0x5 + .byte 0x92,0x2 + .4byte .LASF4331 + .byte 0x5 + .byte 0x93,0x2 + .4byte .LASF4332 + .byte 0x5 + .byte 0x94,0x2 + .4byte .LASF4333 + .byte 0x5 + .byte 0x95,0x2 + .4byte .LASF4334 + .byte 0x5 + .byte 0x96,0x2 + .4byte .LASF4335 + .byte 0x5 + .byte 0x97,0x2 + .4byte .LASF4336 + .byte 0x5 + .byte 0x98,0x2 + .4byte .LASF4337 + .byte 0x5 + .byte 0x99,0x2 + .4byte .LASF4338 + .byte 0x5 + .byte 0x9f,0x2 + .4byte .LASF4339 + .byte 0x5 + .byte 0xa0,0x2 + .4byte .LASF4340 + .byte 0x5 + .byte 0xa1,0x2 + .4byte .LASF4341 + .byte 0x5 + .byte 0xa2,0x2 + .4byte .LASF4342 + .byte 0x5 + .byte 0xa3,0x2 + .4byte .LASF4343 + .byte 0x5 + .byte 0xa4,0x2 + .4byte .LASF4344 + .byte 0x5 + .byte 0xa5,0x2 + .4byte .LASF4345 + .byte 0x5 + .byte 0xac,0x2 + .4byte .LASF4346 + .byte 0x5 + .byte 0xad,0x2 + .4byte .LASF4347 + .byte 0x5 + .byte 0xae,0x2 + .4byte .LASF4348 + .byte 0x5 + .byte 0xb0,0x2 + .4byte .LASF4349 + .byte 0x5 + .byte 0xb1,0x2 + .4byte .LASF4350 + .byte 0x5 + .byte 0xb2,0x2 + .4byte .LASF4351 + .byte 0x5 + .byte 0xb4,0x2 + .4byte .LASF4352 + .byte 0x5 + .byte 0xb5,0x2 + .4byte .LASF4353 + .byte 0x5 + .byte 0xb6,0x2 + .4byte .LASF4354 + .byte 0x5 + .byte 0xb8,0x2 + .4byte .LASF4355 + .byte 0x5 + .byte 0xb9,0x2 + .4byte .LASF4356 + .byte 0x5 + .byte 0xba,0x2 + .4byte .LASF4357 + .byte 0x5 + .byte 0xbb,0x2 + .4byte .LASF4358 + .byte 0x5 + .byte 0xbd,0x2 + .4byte .LASF4359 + .byte 0x5 + .byte 0xbe,0x2 + .4byte .LASF4360 + .byte 0x5 + .byte 0xbf,0x2 + .4byte .LASF4361 + .byte 0x5 + .byte 0xc0,0x2 + .4byte .LASF4362 + .byte 0x5 + .byte 0xc2,0x2 + .4byte .LASF4363 + .byte 0x5 + .byte 0xc3,0x2 + .4byte .LASF4364 + .byte 0x5 + .byte 0xc4,0x2 + .4byte .LASF4365 + .byte 0x5 + .byte 0xc5,0x2 + .4byte .LASF4366 + .byte 0x5 + .byte 0xc7,0x2 + .4byte .LASF4367 + .byte 0x5 + .byte 0xc8,0x2 + .4byte .LASF4368 + .byte 0x5 + .byte 0xc9,0x2 + .4byte .LASF4369 + .byte 0x5 + .byte 0xcb,0x2 + .4byte .LASF4370 + .byte 0x5 + .byte 0xcc,0x2 + .4byte .LASF4371 + .byte 0x5 + .byte 0xcd,0x2 + .4byte .LASF4372 + .byte 0x5 + .byte 0xcf,0x2 + .4byte .LASF4373 + .byte 0x5 + .byte 0xd0,0x2 + .4byte .LASF4374 + .byte 0x5 + .byte 0xd1,0x2 + .4byte .LASF4375 + .byte 0x5 + .byte 0xd3,0x2 + .4byte .LASF4376 + .byte 0x5 + .byte 0xd4,0x2 + .4byte .LASF4377 + .byte 0x5 + .byte 0xd5,0x2 + .4byte .LASF4378 + .byte 0x5 + .byte 0xe0,0x2 + .4byte .LASF4379 + .byte 0x5 + .byte 0xea,0x2 + .4byte .LASF4380 + .byte 0x5 + .byte 0xeb,0x2 + .4byte .LASF4381 + .byte 0x5 + .byte 0xec,0x2 + .4byte .LASF4382 + .byte 0x5 + .byte 0xed,0x2 + .4byte .LASF4383 + .byte 0x5 + .byte 0xee,0x2 + .4byte .LASF4384 + .byte 0x5 + .byte 0xef,0x2 + .4byte .LASF4385 + .byte 0x5 + .byte 0xf0,0x2 + .4byte .LASF4386 + .byte 0x5 + .byte 0xf1,0x2 + .4byte .LASF4387 + .byte 0x5 + .byte 0xf2,0x2 + .4byte .LASF4388 + .byte 0x5 + .byte 0xf3,0x2 + .4byte .LASF4389 + .byte 0x5 + .byte 0xf4,0x2 + .4byte .LASF4390 + .byte 0x5 + .byte 0xf9,0x2 + .4byte .LASF4391 + .byte 0x5 + .byte 0xfa,0x2 + .4byte .LASF4392 + .byte 0x5 + .byte 0xfb,0x2 + .4byte .LASF4393 + .byte 0x5 + .byte 0xfc,0x2 + .4byte .LASF4394 + .byte 0x5 + .byte 0xfd,0x2 + .4byte .LASF4395 + .byte 0x5 + .byte 0xfe,0x2 + .4byte .LASF4396 + .byte 0x5 + .byte 0xff,0x2 + .4byte .LASF4397 + .byte 0x5 + .byte 0x80,0x3 + .4byte .LASF4398 + .byte 0x5 + .byte 0x81,0x3 + .4byte .LASF4399 + .byte 0x5 + .byte 0x82,0x3 + .4byte .LASF4400 + .byte 0x5 + .byte 0x83,0x3 + .4byte .LASF4401 + .byte 0x5 + .byte 0x88,0x3 + .4byte .LASF4402 + .byte 0x5 + .byte 0x89,0x3 + .4byte .LASF4403 + .byte 0x5 + .byte 0x8a,0x3 + .4byte .LASF4404 + .byte 0x5 + .byte 0x8b,0x3 + .4byte .LASF4405 + .byte 0x5 + .byte 0x8c,0x3 + .4byte .LASF4406 + .byte 0x5 + .byte 0x8d,0x3 + .4byte .LASF4407 + .byte 0x5 + .byte 0x92,0x3 + .4byte .LASF4408 + .byte 0x5 + .byte 0x93,0x3 + .4byte .LASF4409 + .byte 0x5 + .byte 0x94,0x3 + .4byte .LASF4410 + .byte 0x5 + .byte 0x95,0x3 + .4byte .LASF4411 + .byte 0x5 + .byte 0x96,0x3 + .4byte .LASF4412 + .byte 0x5 + .byte 0x97,0x3 + .4byte .LASF4413 + .byte 0x5 + .byte 0x9c,0x3 + .4byte .LASF4414 + .byte 0x5 + .byte 0x9d,0x3 + .4byte .LASF4415 + .byte 0x5 + .byte 0x9e,0x3 + .4byte .LASF4416 + .byte 0x5 + .byte 0x9f,0x3 + .4byte .LASF4417 + .byte 0x5 + .byte 0xa0,0x3 + .4byte .LASF4418 + .byte 0x5 + .byte 0xa1,0x3 + .4byte .LASF4419 + .byte 0x5 + .byte 0xa2,0x3 + .4byte .LASF4420 + .byte 0x5 + .byte 0xa3,0x3 + .4byte .LASF4421 + .byte 0x5 + .byte 0xa4,0x3 + .4byte .LASF4422 + .byte 0x5 + .byte 0xa5,0x3 + .4byte .LASF4423 + .byte 0x5 + .byte 0xa6,0x3 + .4byte .LASF4424 + .byte 0x5 + .byte 0xa7,0x3 + .4byte .LASF4425 + .byte 0x5 + .byte 0xa8,0x3 + .4byte .LASF4426 + .byte 0x5 + .byte 0xa9,0x3 + .4byte .LASF4427 + .byte 0x5 + .byte 0xae,0x3 + .4byte .LASF4428 + .byte 0x5 + .byte 0xaf,0x3 + .4byte .LASF4429 + .byte 0x5 + .byte 0xb0,0x3 + .4byte .LASF4430 + .byte 0x5 + .byte 0xb1,0x3 + .4byte .LASF4431 + .byte 0x5 + .byte 0xb2,0x3 + .4byte .LASF4432 + .byte 0x5 + .byte 0xb3,0x3 + .4byte .LASF4433 + .byte 0x5 + .byte 0xb4,0x3 + .4byte .LASF4434 + .byte 0x5 + .byte 0xb5,0x3 + .4byte .LASF4435 + .byte 0x5 + .byte 0xb6,0x3 + .4byte .LASF4436 + .byte 0x5 + .byte 0xbb,0x3 + .4byte .LASF4437 + .byte 0x5 + .byte 0xbc,0x3 + .4byte .LASF4438 + .byte 0x5 + .byte 0xbd,0x3 + .4byte .LASF4439 + .byte 0x5 + .byte 0xbe,0x3 + .4byte .LASF4440 + .byte 0x5 + .byte 0xbf,0x3 + .4byte .LASF4441 + .byte 0x5 + .byte 0xc0,0x3 + .4byte .LASF4442 + .byte 0x5 + .byte 0xc1,0x3 + .4byte .LASF4443 + .byte 0x5 + .byte 0xc2,0x3 + .4byte .LASF4444 + .byte 0x5 + .byte 0xc3,0x3 + .4byte .LASF4445 + .byte 0x5 + .byte 0xc4,0x3 + .4byte .LASF4446 + .byte 0x5 + .byte 0xc5,0x3 + .4byte .LASF4447 + .byte 0x5 + .byte 0xc6,0x3 + .4byte .LASF4448 + .byte 0x5 + .byte 0xc7,0x3 + .4byte .LASF4449 + .byte 0x5 + .byte 0xc8,0x3 + .4byte .LASF4450 + .byte 0x5 + .byte 0xcd,0x3 + .4byte .LASF4451 + .byte 0x5 + .byte 0xce,0x3 + .4byte .LASF4452 + .byte 0x5 + .byte 0xcf,0x3 + .4byte .LASF4453 + .byte 0x5 + .byte 0xd0,0x3 + .4byte .LASF4454 + .byte 0x5 + .byte 0xd1,0x3 + .4byte .LASF4455 + .byte 0x5 + .byte 0xd2,0x3 + .4byte .LASF4456 + .byte 0x5 + .byte 0xd3,0x3 + .4byte .LASF4457 + .byte 0x5 + .byte 0xd4,0x3 + .4byte .LASF4458 + .byte 0x5 + .byte 0xd5,0x3 + .4byte .LASF4459 + .byte 0x5 + .byte 0xd6,0x3 + .4byte .LASF4460 + .byte 0x5 + .byte 0xd7,0x3 + .4byte .LASF4461 + .byte 0x5 + .byte 0xd8,0x3 + .4byte .LASF4462 + .byte 0x5 + .byte 0xd9,0x3 + .4byte .LASF4463 + .byte 0x5 + .byte 0xda,0x3 + .4byte .LASF4464 + .byte 0x5 + .byte 0xdf,0x3 + .4byte .LASF4465 + .byte 0x5 + .byte 0xe0,0x3 + .4byte .LASF4466 + .byte 0x5 + .byte 0xe1,0x3 + .4byte .LASF4467 + .byte 0x5 + .byte 0xe2,0x3 + .4byte .LASF4468 + .byte 0x5 + .byte 0xe3,0x3 + .4byte .LASF4469 + .byte 0x5 + .byte 0xe4,0x3 + .4byte .LASF4470 + .byte 0x5 + .byte 0xe5,0x3 + .4byte .LASF4471 + .byte 0x5 + .byte 0xe6,0x3 + .4byte .LASF4472 + .byte 0x5 + .byte 0xe7,0x3 + .4byte .LASF4473 + .byte 0x5 + .byte 0xe8,0x3 + .4byte .LASF4474 + .byte 0x5 + .byte 0xe9,0x3 + .4byte .LASF4475 + .byte 0x5 + .byte 0xee,0x3 + .4byte .LASF4476 + .byte 0x5 + .byte 0xef,0x3 + .4byte .LASF4477 + .byte 0x5 + .byte 0xf0,0x3 + .4byte .LASF4478 + .byte 0x5 + .byte 0xf1,0x3 + .4byte .LASF4479 + .byte 0x5 + .byte 0xf2,0x3 + .4byte .LASF4480 + .byte 0x5 + .byte 0xf3,0x3 + .4byte .LASF4481 + .byte 0x5 + .byte 0xf4,0x3 + .4byte .LASF4482 + .byte 0x5 + .byte 0xf8,0x3 + .4byte .LASF4483 + .byte 0x5 + .byte 0xfb,0x3 + .4byte .LASF4484 + .byte 0x5 + .byte 0xfe,0x3 + .4byte .LASF4485 + .byte 0x5 + .byte 0x81,0x4 + .4byte .LASF4486 + .byte 0x5 + .byte 0x82,0x4 + .4byte .LASF4487 + .byte 0x5 + .byte 0x85,0x4 + .4byte .LASF4488 + .byte 0x5 + .byte 0x86,0x4 + .4byte .LASF4489 + .byte 0x5 + .byte 0x87,0x4 + .4byte .LASF4490 + .byte 0x5 + .byte 0x88,0x4 + .4byte .LASF4491 + .byte 0x5 + .byte 0x89,0x4 + .4byte .LASF4492 + .byte 0x5 + .byte 0x8a,0x4 + .4byte .LASF4493 + .byte 0x5 + .byte 0x8b,0x4 + .4byte .LASF4494 + .byte 0x5 + .byte 0x8c,0x4 + .4byte .LASF4495 + .byte 0x5 + .byte 0x90,0x4 + .4byte .LASF4496 + .byte 0x5 + .byte 0x8d,0x5 + .4byte .LASF4497 + .byte 0x5 + .byte 0x8e,0x5 + .4byte .LASF4498 + .byte 0x5 + .byte 0x8f,0x5 + .4byte .LASF4499 + .byte 0x5 + .byte 0x90,0x5 + .4byte .LASF4500 + .byte 0x5 + .byte 0x91,0x5 + .4byte .LASF4501 + .byte 0x5 + .byte 0x92,0x5 + .4byte .LASF4502 + .byte 0x5 + .byte 0x93,0x5 + .4byte .LASF4503 + .byte 0x5 + .byte 0x94,0x5 + .4byte .LASF4504 + .byte 0x5 + .byte 0x95,0x5 + .4byte .LASF4505 + .byte 0x5 + .byte 0x96,0x5 + .4byte .LASF4506 + .byte 0x5 + .byte 0x97,0x5 + .4byte .LASF4507 + .byte 0x5 + .byte 0x98,0x5 + .4byte .LASF4508 + .byte 0x5 + .byte 0x99,0x5 + .4byte .LASF4509 + .byte 0x5 + .byte 0x9a,0x5 + .4byte .LASF4510 + .byte 0x5 + .byte 0x9b,0x5 + .4byte .LASF4511 + .byte 0x5 + .byte 0x9c,0x5 + .4byte .LASF4512 + .byte 0x5 + .byte 0xb3,0x5 + .4byte .LASF4513 + .byte 0x5 + .byte 0xb4,0x5 + .4byte .LASF4514 + .byte 0x5 + .byte 0xb5,0x5 + .4byte .LASF4515 + .byte 0x5 + .byte 0xb6,0x5 + .4byte .LASF4516 + .byte 0x5 + .byte 0xb7,0x5 + .4byte .LASF4517 + .byte 0x5 + .byte 0xb8,0x5 + .4byte .LASF4518 + .byte 0x5 + .byte 0xb9,0x5 + .4byte .LASF4519 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_usb_host.h.18.152d454dfbf9a10d59a1400b13dc245a,comdat +.Ldebug_macro66: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x12 + .4byte .LASF4521 + .byte 0x5 + .byte 0x13 + .4byte .LASF4522 + .byte 0x5 + .byte 0x14 + .4byte .LASF4523 + .byte 0x5 + .byte 0x15 + .4byte .LASF4524 + .byte 0x5 + .byte 0x16 + .4byte .LASF4525 + .byte 0x5 + .byte 0x17 + .4byte .LASF4526 + .byte 0x5 + .byte 0x18 + .4byte .LASF4527 + .byte 0x5 + .byte 0x19 + .4byte .LASF4528 + .byte 0x5 + .byte 0x1a + .4byte .LASF4529 + .byte 0x5 + .byte 0x1c + .4byte .LASF4530 + .byte 0x5 + .byte 0x1d + .4byte .LASF4531 + .byte 0x5 + .byte 0x1e + .4byte .LASF4532 + .byte 0x5 + .byte 0x1f + .4byte .LASF4533 + .byte 0x5 + .byte 0x20 + .4byte .LASF4534 + .byte 0x5 + .byte 0x21 + .4byte .LASF4535 + .byte 0x5 + .byte 0x22 + .4byte .LASF4536 + .byte 0x5 + .byte 0x23 + .4byte .LASF4537 + .byte 0x5 + .byte 0x25 + .4byte .LASF4538 + .byte 0x5 + .byte 0x26 + .4byte .LASF4539 + .byte 0x5 + .byte 0x3b + .4byte .LASF4540 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_it.h.9.3809d2677889c3a62e70b7c1c5fa015c,comdat +.Ldebug_macro67: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0x9 + .4byte .LASF4541 + .byte 0x5 + .byte 0xd + .4byte .LASF4542 + .byte 0x5 + .byte 0xe + .4byte .LASF4543 + .byte 0 + .section .debug_macro,"G",@progbits,wm4.ch32v10x_misc.h.10.a85c1f95d6e7504d418a6039677b4e05,comdat +.Ldebug_macro68: + .2byte 0x4 + .byte 0 + .byte 0x5 + .byte 0xa + .4byte .LASF4544 + .byte 0x5 + .byte 0x1d + .4byte .LASF4545 + .byte 0x5 + .byte 0x1e + .4byte .LASF4546 + .byte 0x5 + .byte 0x1f + .4byte .LASF4547 + .byte 0x5 + .byte 0x20 + .4byte .LASF4548 + .byte 0x5 + .byte 0x21 + .4byte .LASF4549 + .byte 0 + .section .debug_line,"",@progbits +.Ldebug_line0: + .section .debug_str,"MS",@progbits,1 +.LASF2361: + .string "AFIO_ECR_PIN_PX0 ((uint8_t)0x00)" +.LASF3668: + .string "I2C_IT_STOPF ((uint32_t)0x02000010)" +.LASF4090: + .string "TIM_EventSource_CC1 ((uint16_t)0x0002)" +.LASF1042: + .string "_FWRITE 0x0002" +.LASF2207: + .string "GPIO_CFGLR_CNF7_0 ((uint32_t)0x40000000)" +.LASF4112: + .string "TIM_TRGOSource_OC4Ref ((uint16_t)0x0070)" +.LASF611: + .string "___int16_t_defined 1" +.LASF4557: + .string "long long int" +.LASF1773: + .string "DAC_DHR12R2 ((uint16_t)0x0FFF)" +.LASF1280: + .string "HSI_Value HSI_VALUE" +.LASF52: + .string "__INT_LEAST32_TYPE__ long int" +.LASF4236: + .string "RB_UH_BUS_RESET 0x02" +.LASF1467: + .string "ADC_TSVREFE ((uint32_t)0x00800000)" +.LASF3671: + .string "I2C_IT_ADDR ((uint32_t)0x02000002)" +.LASF4145: + .string "TIM_DMABurstLength_15Bytes TIM_DMABurstLength_15Transfers" +.LASF3473: + .string "DMA2_FLAG_TC4 ((uint32_t)0x10002000)" +.LASF4500: + .string "pEP1_IN_DataBuf (pEP1_RAM_Addr+64)" +.LASF627: + .string "_BSD_PTRDIFF_T_ " +.LASF3779: + .string "RCC_IT_LSERDY ((uint8_t)0x02)" +.LASF3750: + .string "RCC_PLLMul_6 ((uint32_t)0x00100000)" +.LASF1139: + .string "rt_spin_lock(lock) rt_enter_critical()" +.LASF401: + .string "RT_MQ_ENTRY_MAX RT_UINT16_MAX" +.LASF2437: + .string "AFIO_EXTICR1_EXTI0 ((uint16_t)0x000F)" +.LASF4210: + .string "VOID void" +.LASF2686: + .string "RCC_HPRE_0 ((uint32_t)0x00000010)" +.LASF4343: + .string "UEP_T_RES_TOUT 0x01" +.LASF600: + .string "_ATTRIBUTE(attrs) __attribute__ (attrs)" +.LASF3457: + .string "DMA1_FLAG_TC7 ((uint32_t)0x02000000)" +.LASF3887: + .string "SPI_CPOL_High ((uint16_t)0x0002)" +.LASF3258: + .string "ADC_Channel_15 ((uint8_t)0x0F)" +.LASF2553: + .string "AFIO_EXTICR4_EXTI14_PC ((uint16_t)0x0200)" +.LASF2926: + .string "TIM_CCPC ((uint16_t)0x0001)" +.LASF337: + .string "RT_USING_SMALL_MEM " +.LASF979: + .string "__need_inttypes" +.LASF2584: + .string "I2C_CTLR1_PEC ((uint16_t)0x1000)" +.LASF4180: + .string "USART_IT_CTS ((uint16_t)0x096A)" +.LASF2453: + .string "AFIO_EXTICR1_EXTI1_PF ((uint16_t)0x0050)" +.LASF654: + .string "_T_WCHAR " +.LASF3949: + .string "SPI_FLAG_MODF ((uint16_t)0x0020)" +.LASF873: + .string "_REENT _impure_ptr" +.LASF4808: + .string "IRQn" +.LASF3079: + .string "TIM_CC4E ((uint16_t)0x1000)" +.LASF4125: + .string "TIM_FLAG_Trigger ((uint16_t)0x0040)" +.LASF153: + .string "__FLT_MAX_10_EXP__ 38" +.LASF320: + .string "RT_THREAD_PRIORITY_32 " +.LASF4296: + .string "RB_UEP2_BUF_MOD 0x01" +.LASF2321: + .string "GPIO_BSHR_BR14 ((uint32_t)0x40000000)" +.LASF1386: + .string "ADC1 ((ADC_TypeDef *) ADC1_BASE)" +.LASF1718: + .string "BKP_DATAR39_D ((uint16_t)0xFFFF)" +.LASF1820: + .string "DMA_CGIF3 ((uint32_t)0x00000100)" +.LASF3663: + .string "I2C_IT_AF ((uint32_t)0x01000400)" +.LASF3593: + .string "GPIO_Remap_TIM4 ((uint32_t)0x00001000)" +.LASF2802: + .string "RCC_SRAMEN ((uint16_t)0x0004)" +.LASF3395: + .string "DMA1_IT_TE3 ((uint32_t)0x00000800)" +.LASF4459: + .string "USB_DESCR_TYP_HID 0x21" +.LASF2798: + .string "RCC_USART3RST ((uint32_t)0x00040000)" +.LASF4341: + .string "MASK_UEP_T_RES 0x03" +.LASF883: + .string "_SYS_TYPES_H " +.LASF3987: + .string "TIM_BreakPolarity_Low ((uint16_t)0x0000)" +.LASF2054: + .string "EXTI_FTENR_TR7 ((uint32_t)0x00000080)" +.LASF2864: + .string "SPI_CTLR1_MSTR ((uint16_t)0x0004)" +.LASF710: + .string "__CC_SUPPORTS_VARADIC_XXX 1" +.LASF650: + .string "__wchar_t__ " +.LASF2273: + .string "GPIO_INDR_IDR14 ((uint16_t)0x4000)" +.LASF2495: + .string "AFIO_EXTICR2_EXTI7_PB ((uint16_t)0x1000)" +.LASF1664: + .string "ADC_JSQ3_4 ((uint32_t)0x00004000)" +.LASF2059: + .string "EXTI_FTENR_TR12 ((uint32_t)0x00001000)" +.LASF4031: + .string "TIM_DMABase_PSC ((uint16_t)0x000A)" +.LASF3404: + .string "DMA1_IT_GL6 ((uint32_t)0x00100000)" +.LASF2747: + .string "RCC_PLLMULL14 ((uint32_t)0x00300000)" +.LASF3579: + .string "GPIO_Pin_All ((uint16_t)0xFFFF)" +.LASF3334: + .string "BKP_DR30 ((uint16_t)0x008C)" +.LASF2353: + .string "GPIO_LCK14 ((uint32_t)0x00004000)" +.LASF701: + .string "__compiler_membar() __asm __volatile(\" \" : : : \"memory\")" +.LASF3578: + .string "GPIO_Pin_15 ((uint16_t)0x8000)" +.LASF2617: + .string "I2C_STAR1_BTF ((uint16_t)0x0004)" +.LASF1044: + .string "_FMARK 0x0010" +.LASF2687: + .string "RCC_HPRE_1 ((uint32_t)0x00000020)" +.LASF2934: + .string "TIM_OIS1 ((uint16_t)0x0100)" +.LASF3244: + .string "ADC_Channel_1 ((uint8_t)0x01)" +.LASF1255: + .string "WCHAR_MAX (__WCHAR_MAX__)" +.LASF4600: + .string "_fns" +.LASF2822: + .string "RCC_PWREN ((uint32_t)0x10000000)" +.LASF1018: + .string "S_IXUSR 0000100" +.LASF4029: + .string "TIM_DMABase_CCER ((uint16_t)0x0008)" +.LASF1763: + .string "DAC_MAMP2_0 ((uint32_t)0x01000000)" +.LASF404: + .string "__need___va_list" +.LASF387: + .string "RT_VERSION 4L" +.LASF3099: + .string "TIM_LOCK ((uint16_t)0x0300)" +.LASF4810: + .string "rt_hw_stack_init" +.LASF2949: + .string "TIM_MSM ((uint16_t)0x0080)" +.LASF4072: + .string "TIM_TS_ITR3 ((uint16_t)0x0030)" +.LASF2439: + .string "AFIO_EXTICR1_EXTI2 ((uint16_t)0x0F00)" +.LASF1150: + .string "HWREG32(x) (*((volatile rt_uint32_t *)(x)))" +.LASF4052: + .string "TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00)" +.LASF4257: + .string "RB_UMS_SUSPEND 0x04" +.LASF1665: + .string "ADC_JSQ4 ((uint32_t)0x000F8000)" +.LASF240: + .string "__FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x" +.LASF699: + .string "__GNUCLIKE_BUILTIN_VAALIST 1" +.LASF1524: + .string "ADC_SMP6 ((uint32_t)0x001C0000)" +.LASF4078: + .string "TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060)" +.LASF2346: + .string "GPIO_LCK7 ((uint32_t)0x00000080)" +.LASF2034: + .string "EXTI_RTENR_TR7 ((uint32_t)0x00000080)" +.LASF4663: + .string "_getdate_err" +.LASF3303: + .string "BKP_RTCOutputSource_Alarm ((uint16_t)0x0100)" +.LASF1156: + .string "rt_hw_spin_lock(lock) *(lock) = rt_hw_interrupt_disable()" +.LASF3107: + .string "TIM_MOE ((uint16_t)0x8000)" +.LASF4320: + .string "R16_UEP6_DMA (*((PUINT16V)(0x40023428)))" +.LASF59: + .string "__INT_FAST16_TYPE__ int" +.LASF1239: + .string "UINT_FAST16_MAX (__UINT_FAST16_MAX__)" +.LASF2514: + .string "AFIO_EXTICR3_EXTI9_PC ((uint16_t)0x0020)" +.LASF4469: + .string "USB_DEV_CLASS_MONITOR 0x04" +.LASF558: + .string "_HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1" +.LASF539: + .string "RTGRAPHIC_PIXEL_POSITION(x,y) ((x << 16) | y)" +.LASF3542: + .string "FLASH_WRProt_AllPages ((uint32_t)0xFFFFFFFF)" +.LASF3495: + .string "EXTI_Line14 ((uint32_t)0x04000)" +.LASF4569: + .string "_ssize_t" +.LASF1236: + .string "UINT_FAST8_MAX (__UINT_FAST8_MAX__)" +.LASF463: + .string "RT_TIMER_CTRL_GET_STATE 0x4" +.LASF2091: + .string "EXTI_INTF_INTF4 ((uint32_t)0x00000010)" +.LASF1994: + .string "EXTI_INTENR_MR7 ((uint32_t)0x00000080)" +.LASF3648: + .string "I2C_Register_CKCFGR ((uint8_t)0x1C)" +.LASF183: + .string "__LDBL_DECIMAL_DIG__ 36" +.LASF1111: + .string "LOCK_SH 0x01" +.LASF1229: + .string "INT64_MAX (__INT64_MAX__)" +.LASF1046: + .string "_FASYNC 0x0040" +.LASF2986: + .string "TIM_CC4OF ((uint16_t)0x1000)" +.LASF32: + .string "__SIZEOF_POINTER__ 4" +.LASF3236: + .string "ADC_ExternalTrigConv_T3_TRGO ((uint32_t)0x00080000)" +.LASF961: + .string "_TIMER_T_DECLARED " +.LASF691: + .string "__GNUCLIKE_MATH_BUILTIN_CONSTANTS " +.LASF258: + .string "__FLT64X_HAS_DENORM__ 1" +.LASF1066: + .string "O_NONBLOCK _FNONBLOCK" +.LASF3481: + .string "EXTI_Line0 ((uint32_t)0x00001)" +.LASF2090: + .string "EXTI_INTF_INTF3 ((uint32_t)0x00000008)" +.LASF1349: + .string "CRC_BASE (AHBPERIPH_BASE + 0x3000)" +.LASF4066: + .string "TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000)" +.LASF1965: + .string "DMA_CFG7_MEM2MEM ((uint16_t)0x4000)" +.LASF4244: + .string "RB_UIE_TRANSFER 0x02" +.LASF407: + .string "va_end(v) __builtin_va_end(v)" +.LASF4634: + .string "_p5s" +.LASF3693: + .string "I2C_FLAG_SB ((uint32_t)0x10000001)" +.LASF3354: + .string "DBGMCU_TIM2_STOP ((uint32_t)0x00000020)" +.LASF353: + .string "FINSH_THREAD_PRIORITY 20" +.LASF3014: + .string "TIM_OC2CE ((uint16_t)0x8000)" +.LASF1181: + .string "short +1" +.LASF1122: + .string "rt_container_of(ptr,type,member) ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))" +.LASF3308: + .string "BKP_DR4 ((uint16_t)0x0010)" +.LASF734: + .string "__always_inline __inline__ __attribute__((__always_inline__))" +.LASF3611: + .string "GPIO_PortSourceGPIOF ((uint8_t)0x05)" +.LASF4736: + .string "CFGR" +.LASF266: + .string "__DEC32_EPSILON__ 1E-6DF" +.LASF1941: + .string "DMA_CFG6_MSIZE ((uint16_t)0x0C00)" +.LASF3772: + .string "RCC_SYSCLK_Div512 ((uint32_t)0x000000F0)" +.LASF4136: + .string "TIM_DMABurstLength_6Bytes TIM_DMABurstLength_6Transfers" +.LASF2241: + .string "GPIO_CFGHR_CNF10 ((uint32_t)0x00000C00)" +.LASF3066: + .string "TIM_IC4F_3 ((uint16_t)0x8000)" +.LASF1713: + .string "BKP_DATAR34_D ((uint16_t)0xFFFF)" +.LASF1656: + .string "ADC_JSQ2_2 ((uint32_t)0x00000080)" +.LASF3862: + .string "RCC_FLAG_SFTRST ((uint8_t)0x7C)" +.LASF4508: + .string "pEP5_IN_DataBuf (pEP5_RAM_Addr+64)" +.LASF1967: + .string "DMA_CNTR2_NDT ((uint16_t)0xFFFF)" +.LASF2115: + .string "FLASH_OBKEYR_OBKEYR ((uint32_t)0xFFFFFFFF)" +.LASF2270: + .string "GPIO_INDR_IDR11 ((uint16_t)0x0800)" +.LASF3534: + .string "FLASH_WRProt_Pages100to103 ((uint32_t)0x02000000)" +.LASF1019: + .string "S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)" +.LASF1541: + .string "ADC_JOFFSET2 ((uint16_t)0x0FFF)" +.LASF1057: + .string "O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)" +.LASF1188: + .string "__INT16 \"h\"" +.LASF1244: + .string "INT_FAST64_MAX (__INT_FAST64_MAX__)" +.LASF4095: + .string "TIM_EventSource_Trigger ((uint16_t)0x0040)" +.LASF3739: + .string "__CH32V10x_RCC_H " +.LASF1998: + .string "EXTI_INTENR_MR11 ((uint32_t)0x00000800)" +.LASF4033: + .string "TIM_DMABase_RCR ((uint16_t)0x000C)" +.LASF703: + .string "__GNUCLIKE_MATH_BUILTIN_RELOPS " +.LASF1654: + .string "ADC_JSQ2_0 ((uint32_t)0x00000020)" +.LASF3283: + .string "ADC_AnalogWatchdog_SingleRegEnable ((uint32_t)0x00800200)" +.LASF956: + .string "_MODE_T_DECLARED " +.LASF1822: + .string "DMA_CHTIF3 ((uint32_t)0x00000400)" +.LASF4554: + .string "rt_uint8_t" +.LASF1351: + .string "OB_BASE ((uint32_t)0x1FFFF800)" +.LASF563: + .string "_RETARGETABLE_LOCKING 1" +.LASF4729: + .string "EXTI15_10_IRQn" +.LASF1132: + .string "rt_slist_for_each(pos,head) for (pos = (head)->next; pos != RT_NULL; pos = pos->next)" +.LASF4582: + .string "_Bigint" +.LASF2123: + .string "FLASH_CTLR_OPTPG ((uint16_t)0x0010)" +.LASF954: + .string "_KEY_T_DECLARED " +.LASF2897: + .string "SPI_I2SCFGR_CHLEN ((uint16_t)0x0001)" +.LASF2228: + .string "GPIO_CFGHR_MODE14 ((uint32_t)0x03000000)" +.LASF4325: + .string "R8_UEP0_CTRL (*((PUINT8V)(0x40023432)))" +.LASF4514: + .string "EP2_GetINSta() (R8_UEP2_CTRL&UEP_T_RES_NAK)" +.LASF2142: + .string "FLASH_WPR_WRP ((uint32_t)0xFFFFFFFF)" +.LASF4386: + .string "USB_PID_NAK 0x0A" +.LASF3775: + .string "RCC_HCLK_Div4 ((uint32_t)0x00000500)" +.LASF4188: + .string "USART_WakeUp_IdleLine ((uint16_t)0x0000)" +.LASF3356: + .string "DBGMCU_TIM4_STOP ((uint32_t)0x00000080)" +.LASF4338: + .string "UEP_R_RES_STALL 0x0C" +.LASF3826: + .string "RCC_APB1Periph_TIM3 ((uint32_t)0x00000002)" +.LASF2235: + .string "GPIO_CFGHR_CNF8 ((uint32_t)0x0000000C)" +.LASF4507: + .string "pEP5_OUT_DataBuf (pEP5_RAM_Addr)" +.LASF900: + .string "_UINTPTR_T_DECLARED " +.LASF2318: + .string "GPIO_BSHR_BR11 ((uint32_t)0x08000000)" +.LASF2743: + .string "RCC_PLLMULL10 ((uint32_t)0x00200000)" +.LASF4579: + .string "_maxwds" +.LASF4028: + .string "TIM_DMABase_CCMR2 ((uint16_t)0x0007)" +.LASF1201: + .string "__int_least32_t_defined 1" +.LASF1781: + .string "DAC_RD8BDHR_DACC2DHR ((uint16_t)0xFF00)" +.LASF2104: + .string "EXTI_INTF_INTF17 ((uint32_t)0x00020000)" +.LASF4807: + .string "E:\\\\DevBoard\\\\ARTT\\\\00_gitee_rtt\\\\rt-thread\\\\bsp\\\\ch32v103" +.LASF3446: + .string "DMA1_FLAG_HT4 ((uint32_t)0x00004000)" +.LASF2047: + .string "EXTI_FTENR_TR0 ((uint32_t)0x00000001)" +.LASF3948: + .string "SPI_FLAG_CRCERR ((uint16_t)0x0010)" +.LASF1305: + .string "UART4_BASE (APB1PERIPH_BASE + 0x4C00)" +.LASF1507: + .string "ADC_SMP1_2 ((uint32_t)0x00000020)" +.LASF2326: + .string "GPIO_BCR_BR3 ((uint16_t)0x0008)" +.LASF2449: + .string "AFIO_EXTICR1_EXTI1_PB ((uint16_t)0x0010)" +.LASF1909: + .string "DMA_CFG4_PL_0 ((uint16_t)0x1000)" +.LASF2625: + .string "I2C_STAR1_OVR ((uint16_t)0x0800)" +.LASF3088: + .string "TIM_CCR3 ((uint16_t)0xFFFF)" +.LASF2192: + .string "GPIO_CFGLR_CNF2_0 ((uint32_t)0x00000400)" +.LASF4255: + .string "RB_UMS_R_FIFO_RDY 0x10" +.LASF51: + .string "__INT_LEAST16_TYPE__ short int" +.LASF678: + .string "__attribute_malloc__ " +.LASF4685: + .string "name" +.LASF2928: + .string "TIM_CCDS ((uint16_t)0x0008)" +.LASF1521: + .string "ADC_SMP5_0 ((uint32_t)0x00008000)" +.LASF1116: + .string "O_BINARY 0" +.LASF4474: + .string "USB_DEV_CLASS_HUB 0x09" +.LASF2740: + .string "RCC_PLLMULL7 ((uint32_t)0x00140000)" +.LASF1906: + .string "DMA_CFG4_MSIZE_0 ((uint16_t)0x0400)" +.LASF1796: + .string "DMA_GIF4 ((uint32_t)0x00001000)" +.LASF3703: + .string "I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED ((uint32_t)0x00820000)" +.LASF3023: + .string "TIM_IC2PSC ((uint16_t)0x0C00)" +.LASF1534: + .string "ADC_SMP8_1 ((uint32_t)0x02000000)" +.LASF304: + .string "__riscv_atomic 1" +.LASF4551: + .string "short int" +.LASF2328: + .string "GPIO_BCR_BR5 ((uint16_t)0x0020)" +.LASF3848: + .string "RCC_APB1Periph_DAC ((uint32_t)0x20000000)" +.LASF4432: + .string "HUB_GET_HUB_STATUS 0xA0" +.LASF389: + .string "RT_REVISION 4L" +.LASF4313: + .string "R16_UEP0_DMA (*((PUINT16V)(0x40023410)))" +.LASF3364: + .string "DMA_PeripheralInc_Disable ((uint32_t)0x00000000)" +.LASF1345: + .string "DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430)" +.LASF1411: + .string "DMA2_Channel4 ((DMA_Channel_TypeDef *) DMA2_Channel4_BASE)" +.LASF2264: + .string "GPIO_INDR_IDR5 ((uint16_t)0x0020)" +.LASF3208: + .string "EXTEN_PLL_HSI_PRE ((uint32_t)0x00000010)" +.LASF1319: + .string "GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)" +.LASF560: + .string "_FSEEK_OPTIMIZATION 1" +.LASF2455: + .string "AFIO_EXTICR1_EXTI2_PA ((uint16_t)0x0000)" +.LASF4014: + .string "TIM_IT_CC1 ((uint16_t)0x0002)" +.LASF3005: + .string "TIM_CC2S ((uint16_t)0x0300)" +.LASF3516: + .string "FLASH_WRProt_Pages28to31 ((uint32_t)0x00000080)" +.LASF3752: + .string "RCC_PLLMul_8 ((uint32_t)0x00180000)" +.LASF1868: + .string "DMA_CFGR2_PSIZE_1 ((uint16_t)0x0200)" +.LASF1091: + .string "F_SETFL 4" +.LASF2339: + .string "GPIO_LCK0 ((uint32_t)0x00000001)" +.LASF1557: + .string "ADC_SQ14_4 ((uint32_t)0x00000200)" +.LASF2027: + .string "EXTI_RTENR_TR0 ((uint32_t)0x00000001)" +.LASF802: + .string "__lock_close_recursive(lock) __retarget_lock_close_recursive(lock)" +.LASF2629: + .string "I2C_STAR2_MSL ((uint16_t)0x0001)" +.LASF3147: + .string "USART_CTLR1_UE ((uint16_t)0x2000)" +.LASF211: + .string "__FLT64_DECIMAL_DIG__ 17" +.LASF854: + .string "_REENT_MP_FREELIST(ptr) ((ptr)->_freelist)" +.LASF1584: + .string "ADC_SQ8_2 ((uint32_t)0x00000080)" +.LASF3742: + .string "RCC_HSE_Bypass ((uint32_t)0x00040000)" +.LASF3232: + .string "ADC_Mode_AlterTrig ((uint32_t)0x00090000)" +.LASF3498: + .string "EXTI_Line17 ((uint32_t)0x20000)" +.LASF2567: + .string "IWDG_PR_0 ((uint8_t)0x01)" +.LASF3586: + .string "GPIO_PartialRemap_TIM1 ((uint32_t)0x00160040)" +.LASF1604: + .string "ADC_SQ11_4 ((uint32_t)0x01000000)" +.LASF1883: + .string "DMA_CFGR3_MINC ((uint16_t)0x0080)" +.LASF2014: + .string "EXTI_EVENR_MR7 ((uint32_t)0x00000080)" +.LASF1750: + .string "DAC_MAMP1_3 ((uint32_t)0x00000800)" +.LASF2615: + .string "I2C_STAR1_SB ((uint16_t)0x0001)" +.LASF1953: + .string "DMA_CFG7_CIRC ((uint16_t)0x0020)" +.LASF3841: + .string "RCC_APB1Periph_I2C1 ((uint32_t)0x00200000)" +.LASF2184: + .string "GPIO_CFGLR_CNF ((uint32_t)0xCCCCCCCC)" +.LASF420: + .string "RT_WEAK __attribute__((weak))" +.LASF3996: + .string "TIM_OSSIState_Disable ((uint16_t)0x0000)" +.LASF3241: + .string "ADC_DataAlign_Right ((uint32_t)0x00000000)" +.LASF1987: + .string "EXTI_INTENR_MR0 ((uint32_t)0x00000001)" +.LASF2127: + .string "FLASH_CTLR_OPTWRE ((uint16_t)0x0200)" +.LASF2522: + .string "AFIO_EXTICR3_EXTI10_PD ((uint16_t)0x0300)" +.LASF2470: + .string "AFIO_EXTICR2_EXTI5 ((uint16_t)0x00F0)" +.LASF2690: + .string "RCC_HPRE_DIV1 ((uint32_t)0x00000000)" +.LASF2109: + .string "FLASH_ACTLR_LATENCY_1 ((uint8_t)0x01)" +.LASF3001: + .string "TIM_OC1M_0 ((uint16_t)0x0010)" +.LASF41: + .string "__SIG_ATOMIC_TYPE__ int" +.LASF4785: + .string "SetupSetUsbInterface" +.LASF3156: + .string "USART_CTLR2_STOP ((uint16_t)0x3000)" +.LASF4231: + .string "R8_UHOST_CTRL R8_UDEV_CTRL" +.LASF3782: + .string "RCC_IT_PLLRDY ((uint8_t)0x10)" +.LASF817: + .string "_CLOCKID_T_ unsigned long" +.LASF3018: + .string "TIM_IC1F ((uint16_t)0x00F0)" +.LASF4761: + .string "pEP2_RAM_Addr" +.LASF4056: + .string "TIM_DMABurstLength_17Transfers ((uint16_t)0x1000)" +.LASF2411: + .string "AFIO_PCFR1_TIM3_REMAP_0 ((uint32_t)0x00000400)" +.LASF1969: + .string "DMA_CNTR4_NDT ((uint16_t)0xFFFF)" +.LASF3301: + .string "BKP_RTCOutputSource_None ((uint16_t)0x0000)" +.LASF2702: + .string "RCC_PPRE1_2 ((uint32_t)0x00000400)" +.LASF3040: + .string "TIM_OC3CE ((uint16_t)0x0080)" +.LASF1228: + .string "INT64_MIN (-__INT64_MAX__ - 1)" +.LASF3946: + .string "I2S_FLAG_CHSIDE ((uint16_t)0x0004)" +.LASF4161: + .string "USART_HardwareFlowControl_None ((uint16_t)0x0000)" +.LASF4524: + .string "ERR_USB_BUF_OVER 0x17" +.LASF1027: + .string "ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)" +.LASF509: + .string "RT_DEVICE_OFLAG_WRONLY 0x002" +.LASF1022: + .string "S_IXGRP 0000010" +.LASF2212: + .string "GPIO_CFGHR_MODE8_1 ((uint32_t)0x00000002)" +.LASF2073: + .string "EXTI_SWIEVR_SWIEVR6 ((uint32_t)0x00000040)" +.LASF521: + .string "RT_DEVICE_CTRL_BLK_GETGEOME 0x10" +.LASF1620: + .string "ADC_SQ2_2 ((uint32_t)0x00000080)" +.LASF1874: + .string "DMA_CFGR2_PL_1 ((uint16_t)0x2000)" +.LASF3995: + .string "TIM_OSSIState_Enable ((uint16_t)0x0400)" +.LASF2431: + .string "AFIO_PCFR1_SWJ_CFG_1 ((uint32_t)0x02000000)" +.LASF997: + .string "_IFSOCK 0140000" +.LASF3230: + .string "ADC_Mode_FastInterl ((uint32_t)0x00070000)" +.LASF2282: + .string "GPIO_OUTDR_ODR7 ((uint16_t)0x0080)" +.LASF63: + .string "__UINT_FAST16_TYPE__ unsigned int" +.LASF3556: + .string "FLASH_FLAG_WRPRTERR ((uint32_t)0x00000010)" +.LASF1938: + .string "DMA_CFG6_PSIZE ((uint16_t)0x0300)" +.LASF2809: + .string "RCC_IOPCEN ((uint32_t)0x00000010)" +.LASF2167: + .string "GPIO_CFGLR_MODE2_0 ((uint32_t)0x00000100)" +.LASF3912: + .string "I2S_DataFormat_16bextended ((uint16_t)0x0001)" +.LASF1980: + .string "DMA_MADDR1_MA ((uint32_t)0xFFFFFFFF)" +.LASF3789: + .string "RCC_PCLK2_Div8 ((uint32_t)0x0000C000)" +.LASF4159: + .string "USART_Mode_Rx ((uint16_t)0x0004)" +.LASF1609: + .string "ADC_SQ12_3 ((uint32_t)0x10000000)" +.LASF2646: + .string "PWR_CTLR_PLS ((uint16_t)0x00E0)" +.LASF2893: + .string "SPI_DATAR_DR ((uint16_t)0xFFFF)" +.LASF4185: + .string "USART_IT_ORE USART_IT_ORE_ER" +.LASF1426: + .string "ADC_AWDCH_1 ((uint32_t)0x00000002)" +.LASF1363: + .string "RTC ((RTC_TypeDef *) RTC_BASE)" +.LASF3831: + .string "RCC_APB1Periph_TIM12 ((uint32_t)0x00000040)" +.LASF3475: + .string "DMA2_FLAG_TE4 ((uint32_t)0x10008000)" +.LASF3614: + .string "GPIO_PinSource1 ((uint8_t)0x01)" +.LASF2093: + .string "EXTI_INTF_INTF6 ((uint32_t)0x00000040)" +.LASF3207: + .string "EXTEN_USB_5V_SEL ((uint32_t)0x00000008)" +.LASF268: + .string "__DEC64_MANT_DIG__ 16" +.LASF4678: + .string "uint32_t" +.LASF1483: + .string "ADC_SMP13_2 ((uint32_t)0x00000800)" +.LASF2749: + .string "RCC_PLLMULL16 ((uint32_t)0x00380000)" +.LASF2526: + .string "AFIO_EXTICR3_EXTI11_PA ((uint16_t)0x0000)" +.LASF3857: + .string "RCC_FLAG_PLLRDY ((uint8_t)0x39)" +.LASF867: + .string "_REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)" +.LASF2140: + .string "FLASH_OBR_nRST_STDBY ((uint16_t)0x0010)" +.LASF3855: + .string "RCC_FLAG_HSIRDY ((uint8_t)0x21)" +.LASF1346: + .string "DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444)" +.LASF774: + .string "__NULLABILITY_PRAGMA_POP " +.LASF436: + .string "RT_KERNEL_REALLOC(ptr,size) rt_realloc(ptr, size)" +.LASF361: + .string "RT_USING_SERIAL " +.LASF3496: + .string "EXTI_Line15 ((uint32_t)0x08000)" +.LASF127: + .string "__INT_FAST8_MAX__ 0x7fffffff" +.LASF7: + .string "__GNUC_PATCHLEVEL__ 0" +.LASF3958: + .string "TIM_OCMode_PWM2 ((uint16_t)0x0070)" +.LASF2843: + .string "RCC_WWDGRSTF ((uint32_t)0x40000000)" +.LASF1871: + .string "DMA_CFGR2_MSIZE_1 ((uint16_t)0x0800)" +.LASF695: + .string "__GNUCLIKE_CTOR_SECTION_HANDLING 1" +.LASF1458: + .string "ADC_JEXTSEL_2 ((uint32_t)0x00004000)" +.LASF2683: + .string "RCC_SWS_HSE ((uint32_t)0x00000004)" +.LASF396: + .string "RT_TICK_MAX RT_UINT32_MAX" +.LASF3613: + .string "GPIO_PinSource0 ((uint8_t)0x00)" +.LASF2071: + .string "EXTI_SWIEVR_SWIEVR4 ((uint32_t)0x00000010)" +.LASF1134: + .string "rt_slist_first_entry(ptr,type,member) rt_slist_entry((ptr)->next, type, member)" +.LASF1623: + .string "ADC_SQ3 ((uint32_t)0x00007C00)" +.LASF40: + .string "__CHAR32_TYPE__ long unsigned int" +.LASF1117: + .string "LIBC_DIRENT_H__ " +.LASF3741: + .string "RCC_HSE_ON ((uint32_t)0x00010000)" +.LASF915: + .string "__htonl(_x) __bswap32(_x)" +.LASF3809: + .string "RCC_APB2Periph_GPIOE ((uint32_t)0x00000040)" +.LASF1387: + .string "ADC2 ((ADC_TypeDef *) ADC2_BASE)" +.LASF4155: + .string "USART_StopBits_1_5 ((uint16_t)0x3000)" +.LASF1421: + .string "ADC_JEOC ((uint8_t)0x04)" +.LASF518: + .string "RT_DEVICE_CTRL_CLR_INT 0x11" +.LASF1725: + .string "BKP_ASOS ((uint16_t)0x0200)" +.LASF1770: + .string "DAC_DHR12R1 ((uint16_t)0x0FFF)" +.LASF1602: + .string "ADC_SQ11_2 ((uint32_t)0x00400000)" +.LASF1090: + .string "F_GETFL 3" +.LASF4706: + .string "DMA1_Channel3_IRQn" +.LASF4452: + .string "USB_DESCR_TYP_CONFIG 0x02" +.LASF571: + .string "_DEFAULT_SOURCE" +.LASF4220: + .string "RB_UC_INT_BUSY 0x08" +.LASF26: + .string "__BIGGEST_ALIGNMENT__ 16" +.LASF4401: + .string "USB_SYNCH_FRAME 0x0C" +.LASF3562: + .string "__CH32V10x_GPIO_H " +.LASF2042: + .string "EXTI_RTENR_TR15 ((uint32_t)0x00008000)" +.LASF1971: + .string "DMA_CNTR6_NDT ((uint16_t)0xFFFF)" +.LASF2237: + .string "GPIO_CFGHR_CNF8_1 ((uint32_t)0x00000008)" +.LASF3449: + .string "DMA1_FLAG_TC5 ((uint32_t)0x00020000)" +.LASF2378: + .string "AFIO_ECR_PORT_0 ((uint8_t)0x10)" +.LASF2987: + .string "TIM_UG ((uint8_t)0x01)" +.LASF1582: + .string "ADC_SQ8_0 ((uint32_t)0x00000020)" +.LASF3339: + .string "BKP_DR35 ((uint16_t)0x00A0)" +.LASF4283: + .string "R32_USB_BUF_MODE (*((PUINT32V)(0x4002340c)))" +.LASF4565: + .string "long double" +.LASF2921: + .string "TIM_CMS_1 ((uint16_t)0x0040)" +.LASF2856: + .string "RTC_DIVH_RTC_DIV ((uint16_t)0x000F)" +.LASF2853: + .string "RTC_CTLRL_RTOFF ((uint8_t)0x20)" +.LASF1146: + .string "FINSH_FUNCTION_EXPORT(name,desc) FINSH_FUNCTION_EXPORT_CMD(name, name, desc)" +.LASF426: + .string "INIT_DEVICE_EXPORT(fn) INIT_EXPORT(fn, \"3\")" +.LASF3840: + .string "RCC_APB1Periph_UART5 ((uint32_t)0x00100000)" +.LASF1529: + .string "ADC_SMP7_0 ((uint32_t)0x00200000)" +.LASF2611: + .string "I2C_OADDR1_ADDMODE ((uint16_t)0x8000)" +.LASF629: + .string "_GCC_PTRDIFF_T " +.LASF3711: + .string "__CH32V10x_IWDG_H " +.LASF2106: + .string "EXTI_INTF_INTF19 ((uint32_t)0x00080000)" +.LASF1942: + .string "DMA_CFG6_MSIZE_0 ((uint16_t)0x0400)" +.LASF2784: + .string "RCC_TIM1RST ((uint32_t)0x00000800)" +.LASF2092: + .string "EXTI_INTF_INTF5 ((uint32_t)0x00000020)" +.LASF1687: + .string "BKP_DATAR8_D ((uint16_t)0xFFFF)" +.LASF3859: + .string "RCC_FLAG_LSIRDY ((uint8_t)0x61)" +.LASF1125: + .string "rt_list_for_each(pos,head) for (pos = (head)->next; pos != (head); pos = pos->next)" +.LASF178: + .string "__LDBL_MIN_EXP__ (-16381)" +.LASF2007: + .string "EXTI_EVENR_MR0 ((uint32_t)0x00000001)" +.LASF729: + .string "__alloc_align(x) __attribute__((__alloc_align__ x))" +.LASF1164: + .string "__Vendor_SysTickConfig 0" +.LASF909: + .string "BIG_ENDIAN _BIG_ENDIAN" +.LASF3806: + .string "RCC_APB2Periph_GPIOB ((uint32_t)0x00000008)" +.LASF277: + .string "__DEC128_MAX_EXP__ 6145" +.LASF3575: + .string "GPIO_Pin_12 ((uint16_t)0x1000)" +.LASF2539: + .string "AFIO_EXTICR4_EXTI12_PC ((uint16_t)0x0002)" +.LASF3115: + .string "TIM_DBL_0 ((uint16_t)0x0100)" +.LASF1182: + .string "__int20 +2" +.LASF4002: + .string "TIM_OCNIdleState_Reset ((uint16_t)0x0000)" +.LASF2829: + .string "RCC_RTCSEL_1 ((uint32_t)0x00000200)" +.LASF3132: + .string "USART_BRR_DIV_Fraction ((uint16_t)0x000F)" +.LASF606: + .string "_MACHINE__DEFAULT_TYPES_H " +.LASF4604: + .string "__sFILE" +.LASF1642: + .string "ADC_SQ6_0 ((uint32_t)0x02000000)" +.LASF2637: + .string "I2C_CKCFGR_CCR ((uint16_t)0x0FFF)" +.LASF1158: + .string "CPUPORT_H__ " +.LASF3162: + .string "USART_CTLR3_IRLP ((uint16_t)0x0004)" +.LASF4189: + .string "USART_WakeUp_AddressMark ((uint16_t)0x0800)" +.LASF2283: + .string "GPIO_OUTDR_ODR8 ((uint16_t)0x0100)" +.LASF1165: + .string "HSE_VALUE ((uint32_t)8000000)" +.LASF3202: + .string "WWDG_CFGR_EWI ((uint16_t)0x0200)" +.LASF2136: + .string "FLASH_OBR_RDPRT ((uint16_t)0x0002)" +.LASF2435: + .string "AFIO_PCFR1_SWJ_CFG_JTAGDISABLE ((uint32_t)0x02000000)" +.LASF3222: + .string "__CH32V10x_ADC_H " +.LASF1928: + .string "DMA_CFG5_PL_1 ((uint16_t)0x2000)" +.LASF3365: + .string "DMA_MemoryInc_Enable ((uint32_t)0x00000080)" +.LASF3058: + .string "TIM_IC3F_3 ((uint16_t)0x0080)" +.LASF532: + .string "RTGRAPHIC_CTRL_GET_INFO 3" +.LASF1274: + .string "NVIC PFIC" +.LASF2058: + .string "EXTI_FTENR_TR11 ((uint32_t)0x00000800)" +.LASF429: + .string "INIT_APP_EXPORT(fn) INIT_EXPORT(fn, \"6\")" +.LASF2875: + .string "SPI_CTLR1_CRCNEXT ((uint16_t)0x1000)" +.LASF674: + .string "__THROW " +.LASF4148: + .string "TIM_DMABurstLength_18Bytes TIM_DMABurstLength_18Transfers" +.LASF991: + .string "_IFMT 0170000" +.LASF4247: + .string "R8_USB_DEV_AD (*((PUINT8V)(0x40023403)))" +.LASF806: + .string "__lock_try_acquire_recursive(lock) __retarget_lock_try_acquire_recursive(lock)" +.LASF3052: + .string "TIM_IC3PSC_0 ((uint16_t)0x0004)" +.LASF1321: + .string "ADC1_BASE (APB2PERIPH_BASE + 0x2400)" +.LASF908: + .string "LITTLE_ENDIAN _LITTLE_ENDIAN" +.LASF2049: + .string "EXTI_FTENR_TR2 ((uint32_t)0x00000004)" +.LASF1652: + .string "ADC_JSQ1_4 ((uint32_t)0x00000010)" +.LASF2509: + .string "AFIO_EXTICR3_EXTI8_PE ((uint16_t)0x0004)" +.LASF2147: + .string "FLASH_Data0_Data0 ((uint32_t)0x000000FF)" +.LASF2989: + .string "TIM_CC2G ((uint8_t)0x04)" +.LASF1556: + .string "ADC_SQ14_3 ((uint32_t)0x00000100)" +.LASF3425: + .string "DMA2_IT_TC4 ((uint32_t)0x10002000)" +.LASF1792: + .string "DMA_GIF3 ((uint32_t)0x00000100)" +.LASF4615: + .string "_blksize" +.LASF812: + .string "__need_wint_t " +.LASF4268: + .string "RB_UIF_DETECT 0x01" +.LASF138: + .string "__UINT_FAST64_MAX__ 0xffffffffffffffffULL" +.LASF995: + .string "_IFREG 0100000" +.LASF3880: + .string "SPI_Direction_1Line_Rx ((uint16_t)0x8000)" +.LASF2203: + .string "GPIO_CFGLR_CNF6 ((uint32_t)0x0C000000)" +.LASF128: + .string "__INT_FAST8_WIDTH__ 32" +.LASF3945: + .string "SPI_I2S_FLAG_TXE ((uint16_t)0x0002)" +.LASF1893: + .string "DMA_CFGR3_MEM2MEM ((uint16_t)0x4000)" +.LASF2795: + .string "RCC_PWRRST ((uint32_t)0x10000000)" +.LASF2036: + .string "EXTI_RTENR_TR9 ((uint32_t)0x00000200)" +.LASF2978: + .string "TIM_CC3IF ((uint16_t)0x0008)" +.LASF3908: + .string "I2S_Standard_LSB ((uint16_t)0x0020)" +.LASF4212: + .string "R32_USB_CONTROL (*((PUINT32V)(0x40023400)))" +.LASF1638: + .string "ADC_SQ5_2 ((uint32_t)0x00400000)" +.LASF768: + .string "__DEVOLATILE(type,var) ((type)(__uintptr_t)(volatile void *)(var))" +.LASF1577: + .string "ADC_SQ7_1 ((uint32_t)0x00000002)" +.LASF928: + .string "FD_ZERO(p) memset((void*)(p), 0, sizeof(*(p)))" +.LASF4491: + .string "USB_BO_CBW_SIG3 0x43" +.LASF280: + .string "__DEC128_EPSILON__ 1E-33DL" +.LASF312: + .string "HAVE_CCONFIG_H 1" +.LASF47: + .string "__UINT16_TYPE__ short unsigned int" +.LASF1966: + .string "DMA_CNTR1_NDT ((uint16_t)0xFFFF)" +.LASF1208: + .string "INTPTR_MAX (__INTPTR_MAX__)" +.LASF1451: + .string "ADC_CAL ((uint32_t)0x00000004)" +.LASF2807: + .string "RCC_IOPAEN ((uint32_t)0x00000004)" +.LASF4103: + .string "TIM_OCClear_Enable ((uint16_t)0x0080)" +.LASF150: + .string "__FLT_MIN_EXP__ (-125)" +.LASF74: + .string "__LONG_MAX__ 0x7fffffffL" +.LASF2460: + .string "AFIO_EXTICR1_EXTI2_PF ((uint16_t)0x0500)" +.LASF2262: + .string "GPIO_INDR_IDR3 ((uint16_t)0x0008)" +.LASF271: + .string "__DEC64_MIN__ 1E-383DD" +.LASF1403: + .string "DMA1_Channel3 ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE)" +.LASF2402: + .string "AFIO_PCFR1_TIM1_REMAP_FULLREMAP ((uint32_t)0x000000C0)" +.LASF3038: + .string "TIM_OC3M_1 ((uint16_t)0x0020)" +.LASF2341: + .string "GPIO_LCK2 ((uint32_t)0x00000004)" +.LASF2029: + .string "EXTI_RTENR_TR2 ((uint32_t)0x00000004)" +.LASF4357: + .string "RB_UH_R_AUTO_TOG 0x10" +.LASF1535: + .string "ADC_SMP8_2 ((uint32_t)0x04000000)" +.LASF2701: + .string "RCC_PPRE1_1 ((uint32_t)0x00000200)" +.LASF1658: + .string "ADC_JSQ2_4 ((uint32_t)0x00000200)" +.LASF295: + .string "__GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1" +.LASF335: + .string "RT_USING_MAILBOX " +.LASF2622: + .string "I2C_STAR1_BERR ((uint16_t)0x0100)" +.LASF868: + .string "_REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)" +.LASF485: + .string "RT_IPC_FLAG_FIFO 0x00" +.LASF1407: + .string "DMA1_Channel7 ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE)" +.LASF109: + .string "__INT_LEAST8_WIDTH__ 8" +.LASF3238: + .string "ADC_ExternalTrigConv_Ext_IT11_TIM8_TRGO ((uint32_t)0x000C0000)" +.LASF1277: + .string "NVIC_KEY3 ((uint32_t)0xBEEF0000)" +.LASF980: + .string "_SYS_TIMESPEC_H_ " +.LASF3187: + .string "WWDG_CTLR_T4 ((uint8_t)0x10)" +.LASF529: + .string "RTGRAPHIC_CTRL_RECT_UPDATE 0" +.LASF1753: + .string "DAC_BOFF2 ((uint32_t)0x00020000)" +.LASF4314: + .string "R16_UEP1_DMA (*((PUINT16V)(0x40023414)))" +.LASF3351: + .string "DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00000004)" +.LASF4633: + .string "_result_k" +.LASF1744: + .string "DAC_WAVE1_0 ((uint32_t)0x00000040)" +.LASF2677: + .string "RCC_SW_HSE ((uint32_t)0x00000001)" +.LASF800: + .string "__lock_init_recursive(lock) __retarget_lock_init_recursive(&lock)" +.LASF2173: + .string "GPIO_CFGLR_MODE4_0 ((uint32_t)0x00010000)" +.LASF607: + .string "__EXP(x) __ ##x ##__" +.LASF1214: + .string "INT_LEAST8_MAX (__INT_LEAST8_MAX__)" +.LASF4622: + .string "_errno" +.LASF4525: + .string "ERR_USB_DISK_ERR 0x1F" +.LASF4509: + .string "pEP6_OUT_DataBuf (pEP6_RAM_Addr)" +.LASF4006: + .string "TIM_ICSelection_DirectTI ((uint16_t)0x0001)" +.LASF1978: + .string "DMA_PADDR6_PA ((uint32_t)0xFFFFFFFF)" +.LASF712: + .string "__P(protos) protos" +.LASF3815: + .string "RCC_APB2Periph_SPI1 ((uint32_t)0x00001000)" +.LASF2774: + .string "RCC_HSERDYC ((uint32_t)0x00080000)" +.LASF1595: + .string "ADC_SQ10_1 ((uint32_t)0x00010000)" +.LASF3129: + .string "USART_STATR_LBD ((uint16_t)0x0100)" +.LASF4527: + .string "ERR_USB_UNSUPPORT 0xFB" +.LASF4201: + .string "USART_FLAG_NE ((uint16_t)0x0004)" +.LASF1647: + .string "ADC_JSQ1 ((uint32_t)0x0000001F)" +.LASF2931: + .string "TIM_MMS_1 ((uint16_t)0x0020)" +.LASF2486: + .string "AFIO_EXTICR2_EXTI5_PG ((uint16_t)0x0060)" +.LASF3081: + .string "TIM_CC4NP ((uint16_t)0x8000)" +.LASF1943: + .string "DMA_CFG6_MSIZE_1 ((uint16_t)0x0800)" +.LASF1844: + .string "DMA_CFGR1_DIR ((uint16_t)0x0010)" +.LASF3124: + .string "USART_STATR_ORE ((uint16_t)0x0008)" +.LASF2139: + .string "FLASH_OBR_nRST_STOP ((uint16_t)0x0008)" +.LASF2338: + .string "GPIO_BCR_BR15 ((uint16_t)0x8000)" +.LASF1836: + .string "DMA_CGIF7 ((uint32_t)0x01000000)" +.LASF3420: + .string "DMA2_IT_GL3 ((uint32_t)0x10000100)" +.LASF3008: + .string "TIM_OC2FE ((uint16_t)0x0400)" +.LASF3866: + .string "SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB)" +.LASF3764: + .string "RCC_SYSCLK_Div1 ((uint32_t)0x00000000)" +.LASF3540: + .string "FLASH_WRProt_Pages124to127 ((uint32_t)0x80000000)" +.LASF4326: + .string "R32_USB_EP1_CTRL (*((PUINT32V)(0x40023434)))" +.LASF4517: + .string "EP5_GetINSta() (R8_UEP5_CTRL&UEP_T_RES_NAK)" +.LASF816: + .string "_TIME_T_ __int_least64_t" +.LASF2574: + .string "I2C_CTLR1_SMBUS ((uint16_t)0x0002)" +.LASF3929: + .string "SPI_I2S_DMAReq_Tx ((uint16_t)0x0002)" +.LASF513: + .string "RT_DEVICE_CTRL_RESUME 0x01" +.LASF4169: + .string "USART_CPHA_1Edge ((uint16_t)0x0000)" +.LASF2297: + .string "GPIO_BSHR_BS6 ((uint32_t)0x00000040)" +.LASF30: + .string "__BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__" +.LASF2427: + .string "AFIO_PCFR1_ADC2_ETRGINJ_REMAP ((uint32_t)0x00080000)" +.LASF2220: + .string "GPIO_CFGHR_MODE11_0 ((uint32_t)0x00001000)" +.LASF2005: + .string "EXTI_INTENR_MR18 ((uint32_t)0x00040000)" +.LASF2960: + .string "TIM_UIE ((uint16_t)0x0001)" +.LASF3592: + .string "GPIO_FullRemap_TIM3 ((uint32_t)0x001A0C00)" +.LASF2560: + .string "AFIO_EXTICR4_EXTI15_PC ((uint16_t)0x2000)" +.LASF3845: + .string "RCC_APB1Periph_CAN2 ((uint32_t)0x04000000)" +.LASF2766: + .string "RCC_LSIRDYIE ((uint32_t)0x00000100)" +.LASF3273: + .string "ADC_ExternalTrigInjecConv_T3_CC4 ((uint32_t)0x00004000)" +.LASF2762: + .string "RCC_HSIRDYF ((uint32_t)0x00000004)" +.LASF354: + .string "FINSH_THREAD_STACK_SIZE 1024" +.LASF1080: + .string "FOPEN _FOPEN" +.LASF2725: + .string "RCC_PLLXTPRE ((uint32_t)0x00020000)" +.LASF876: + .string "__need_size_t " +.LASF3631: + .string "I2C_Mode_SMBusDevice ((uint16_t)0x0002)" +.LASF2325: + .string "GPIO_BCR_BR2 ((uint16_t)0x0004)" +.LASF2706: + .string "RCC_PPRE1_DIV8 ((uint32_t)0x00000600)" +.LASF1162: + .string "__CH32V10x_H " +.LASF0: + .string "__STDC__ 1" +.LASF2781: + .string "RCC_IOPDRST ((uint32_t)0x00000020)" +.LASF782: + .string "__trylocks_shared(...) __lock_annotate(shared_trylock_function(__VA_ARGS__))" +.LASF3834: + .string "RCC_APB1Periph_WWDG ((uint32_t)0x00000800)" +.LASF2163: + .string "GPIO_CFGLR_MODE1 ((uint32_t)0x00000030)" +.LASF3649: + .string "I2C_Register_RTR ((uint8_t)0x20)" +.LASF1388: + .string "TIM1 ((TIM_TypeDef *) TIM1_BASE)" +.LASF4657: + .string "_r48" +.LASF1295: + .string "TIM12_BASE (APB1PERIPH_BASE + 0x1800)" +.LASF3043: + .string "TIM_CC4S_1 ((uint16_t)0x0200)" +.LASF4484: + .string "DEFAULT_ENDP0_SIZE 8" +.LASF2968: + .string "TIM_UDE ((uint16_t)0x0100)" +.LASF2491: + .string "AFIO_EXTICR2_EXTI6_PE ((uint16_t)0x0400)" +.LASF4753: + .string "SCTLR" +.LASF4143: + .string "TIM_DMABurstLength_13Bytes TIM_DMABurstLength_13Transfers" +.LASF2699: + .string "RCC_PPRE1 ((uint32_t)0x00000700)" +.LASF2474: + .string "AFIO_EXTICR2_EXTI4_PB ((uint16_t)0x0001)" +.LASF437: + .string "RT_EOK 0" +.LASF965: + .string "_SYS_SCHED_H_ " +.LASF3098: + .string "TIM_DTG_7 ((uint16_t)0x0080)" +.LASF1358: + .string "TIM6 ((TIM_TypeDef *) TIM6_BASE)" +.LASF452: + .string "RT_OBJECT_HOOK_CALL(func,argv) do { if ((func) != RT_NULL) func argv; } while (0)" +.LASF3696: + .string "I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED ((uint32_t)0x00030002)" +.LASF2016: + .string "EXTI_EVENR_MR9 ((uint32_t)0x00000200)" +.LASF2729: + .string "RCC_PLLMULL_2 ((uint32_t)0x00100000)" +.LASF4674: + .string "__locale_t" +.LASF3747: + .string "RCC_PLLMul_3 ((uint32_t)0x00040000)" +.LASF2271: + .string "GPIO_INDR_IDR12 ((uint16_t)0x1000)" +.LASF1005: + .string "S_IEXEC 0000100" +.LASF1378: + .string "EXTI ((EXTI_TypeDef *) EXTI_BASE)" +.LASF435: + .string "RT_KERNEL_FREE(ptr) rt_free(ptr)" +.LASF2839: + .string "RCC_PINRSTF ((uint32_t)0x04000000)" +.LASF4384: + .string "USB_PID_OUT 0x01" +.LASF4267: + .string "RB_UIF_TRANSFER 0x02" +.LASF3371: + .string "DMA_MemoryDataSize_HalfWord ((uint32_t)0x00000400)" +.LASF4774: + .string "GpHUBPortNum" +.LASF2966: + .string "TIM_TIE ((uint16_t)0x0040)" +.LASF4347: + .string "RB_UH_PRE_PID_EN 0x80" +.LASF3304: + .string "BKP_RTCOutputSource_Second ((uint16_t)0x0300)" +.LASF2698: + .string "RCC_HPRE_DIV512 ((uint32_t)0x000000F0)" +.LASF1833: + .string "DMA_CTCIF6 ((uint32_t)0x00200000)" +.LASF1398: + .string "TIM11 ((TIM_TypeDef *) TIM11_BASE)" +.LASF2590: + .string "I2C_CTLR2_FREQ_2 ((uint16_t)0x0004)" +.LASF1674: + .string "ADC_IDATAR1_JDATA ((uint16_t)0xFFFF)" +.LASF2009: + .string "EXTI_EVENR_MR2 ((uint32_t)0x00000004)" +.LASF3713: + .string "IWDG_WriteAccess_Disable ((uint16_t)0x0000)" +.LASF344: + .string "RT_USING_COMPONENTS_INIT " +.LASF1155: + .string "RT_DECLARE_SPINLOCK(x) rt_ubase_t x" +.LASF3863: + .string "RCC_FLAG_IWDGRST ((uint8_t)0x7D)" +.LASF284: + .string "__GNUC_STDC_INLINE__ 1" +.LASF2290: + .string "GPIO_OUTDR_ODR15 ((uint16_t)0x8000)" +.LASF815: + .string "_CLOCK_T_ unsigned long" +.LASF207: + .string "__FLT64_MIN_EXP__ (-1021)" +.LASF2619: + .string "I2C_STAR1_STOPF ((uint16_t)0x0010)" +.LASF1375: + .string "PWR ((PWR_TypeDef *) PWR_BASE)" +.LASF1695: + .string "BKP_DATAR16_D ((uint16_t)0xFFFF)" +.LASF2227: + .string "GPIO_CFGHR_MODE13_1 ((uint32_t)0x00200000)" +.LASF3939: + .string "SPI_I2S_IT_ERR ((uint8_t)0x50)" +.LASF2549: + .string "AFIO_EXTICR4_EXTI13_PF ((uint16_t)0x0050)" +.LASF2354: + .string "GPIO_LCK15 ((uint32_t)0x00008000)" +.LASF4124: + .string "TIM_FLAG_COM ((uint16_t)0x0020)" +.LASF19: + .string "__SIZEOF_LONG_LONG__ 8" +.LASF4273: + .string "RB_UIS_TOKEN1 0x20" +.LASF1412: + .string "DMA2_Channel5 ((DMA_Channel_TypeDef *) DMA2_Channel5_BASE)" +.LASF3041: + .string "TIM_CC4S ((uint16_t)0x0300)" +.LASF1562: + .string "ADC_SQ15_3 ((uint32_t)0x00002000)" +.LASF3793: + .string "RCC_RTCCLKSource_LSE ((uint32_t)0x00000100)" +.LASF2454: + .string "AFIO_EXTICR1_EXTI1_PG ((uint16_t)0x0060)" +.LASF3363: + .string "DMA_PeripheralInc_Enable ((uint32_t)0x00000040)" +.LASF777: + .string "__lock_annotate(x) " +.LASF3281: + .string "ADC_InjectedChannel_3 ((uint8_t)0x1C)" +.LASF215: + .string "__FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64" +.LASF3294: + .string "ADC_FLAG_EOC ((uint8_t)0x02)" +.LASF1073: + .string "FNDELAY _FNDELAY" +.LASF356: + .string "FINSH_USING_MSH " +.LASF2130: + .string "FLASH_CTLR_PAGE_PG ((uint16_t)0x00010000)" +.LASF1659: + .string "ADC_JSQ3 ((uint32_t)0x00007C00)" +.LASF1635: + .string "ADC_SQ5 ((uint32_t)0x01F00000)" +.LASF2219: + .string "GPIO_CFGHR_MODE11 ((uint32_t)0x00003000)" +.LASF964: + .string "_SYS__PTHREADTYPES_H_ " +.LASF683: + .string "__unbounded " +.LASF1453: + .string "ADC_DMA ((uint32_t)0x00000100)" +.LASF4499: + .string "pEP1_OUT_DataBuf (pEP1_RAM_Addr)" +.LASF2918: + .string "TIM_DIR ((uint16_t)0x0010)" +.LASF3000: + .string "TIM_OC1M ((uint16_t)0x0070)" +.LASF3913: + .string "I2S_DataFormat_24b ((uint16_t)0x0003)" +.LASF283: + .string "__USER_LABEL_PREFIX__ " +.LASF4163: + .string "USART_HardwareFlowControl_CTS ((uint16_t)0x0200)" +.LASF3620: + .string "GPIO_PinSource7 ((uint8_t)0x07)" +.LASF6: + .string "__GNUC_MINOR__ 2" +.LASF1747: + .string "DAC_MAMP1_0 ((uint32_t)0x00000100)" +.LASF1880: + .string "DMA_CFGR3_DIR ((uint16_t)0x0010)" +.LASF2890: + .string "SPI_STATR_MODF ((uint8_t)0x20)" +.LASF2463: + .string "AFIO_EXTICR1_EXTI3_PB ((uint16_t)0x1000)" +.LASF1128: + .string "rt_list_for_each_entry_safe(pos,n,head,member) for (pos = rt_list_entry((head)->next, typeof(*pos), member), n = rt_list_entry(pos->member.next, typeof(*pos), member); &pos->member != (head); pos = n, n = rt_list_entry(n->member.next, typeof(*n), member))" +.LASF1383: + .string "GPIOE ((GPIO_TypeDef *) GPIOE_BASE)" +.LASF4708: + .string "DMA1_Channel5_IRQn" +.LASF1429: + .string "ADC_AWDCH_4 ((uint32_t)0x00000010)" +.LASF4171: + .string "USART_LastBit_Disable ((uint16_t)0x0000)" +.LASF709: + .string "__CC_SUPPORTS_WARNING 1" +.LASF537: + .string "RTGRAPHIC_CTRL_GET_MODE 8" +.LASF4113: + .string "TIM_SlaveMode_Reset ((uint16_t)0x0004)" +.LASF3374: + .string "DMA_Mode_Normal ((uint32_t)0x00000000)" +.LASF4446: + .string "HUB_C_PORT_CONNECTION 16" +.LASF2913: + .string "SPI_I2SPR_MCKOE ((uint16_t)0x0200)" +.LASF4617: + .string "_data" +.LASF259: + .string "__FLT64X_HAS_INFINITY__ 1" +.LASF1515: + .string "ADC_SMP3_2 ((uint32_t)0x00000800)" +.LASF1247: + .string "INTMAX_MIN (-INTMAX_MAX - 1)" +.LASF1622: + .string "ADC_SQ2_4 ((uint32_t)0x00000200)" +.LASF801: + .string "__lock_close(lock) __retarget_lock_close(lock)" +.LASF2763: + .string "RCC_HSERDYF ((uint32_t)0x00000008)" +.LASF1279: + .string "__SYSTEM_CH32V10x_H " +.LASF3240: + .string "ADC_ExternalTrigConv_None ((uint32_t)0x000E0000)" +.LASF1428: + .string "ADC_AWDCH_3 ((uint32_t)0x00000008)" +.LASF3970: + .string "TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020)" +.LASF181: + .string "__LDBL_MAX_10_EXP__ 4932" +.LASF657: + .string "_BSD_WCHAR_T_ " +.LASF88: + .string "__WINT_WIDTH__ 32" +.LASF781: + .string "__trylocks_exclusive(...) __lock_annotate(exclusive_trylock_function(__VA_ARGS__))" +.LASF669: + .string "__need_NULL" +.LASF4032: + .string "TIM_DMABase_ARR ((uint16_t)0x000B)" +.LASF1024: + .string "S_IROTH 0000004" +.LASF2099: + .string "EXTI_INTF_INTF12 ((uint32_t)0x00001000)" +.LASF4725: + .string "SPI2_IRQn" +.LASF1420: + .string "ADC_EOC ((uint8_t)0x02)" +.LASF1542: + .string "ADC_JOFFSET3 ((uint16_t)0x0FFF)" +.LASF4248: + .string "RB_UDA_GP_BIT 0x80" +.LASF68: + .string "__has_include(STR) __has_include__(STR)" +.LASF4167: + .string "USART_CPOL_Low ((uint16_t)0x0000)" +.LASF2166: + .string "GPIO_CFGLR_MODE2 ((uint32_t)0x00000300)" +.LASF2593: + .string "I2C_CTLR2_FREQ_5 ((uint16_t)0x0020)" +.LASF587: + .string "__XSI_VISIBLE 0" +.LASF1082: + .string "FTRUNC _FTRUNC" +.LASF3877: + .string "__CH32V10x_SPI_H " +.LASF2322: + .string "GPIO_BSHR_BR15 ((uint32_t)0x80000000)" +.LASF1212: + .string "UINT8_MAX (__UINT8_MAX__)" +.LASF254: + .string "__FLT64X_MAX__ 1.18973149535723176508575932662800702e+4932F64x" +.LASF3388: + .string "DMA1_IT_GL2 ((uint32_t)0x00000010)" +.LASF1640: + .string "ADC_SQ5_4 ((uint32_t)0x01000000)" +.LASF3850: + .string "RCC_MCO_NoClock ((uint8_t)0x00)" +.LASF2490: + .string "AFIO_EXTICR2_EXTI6_PD ((uint16_t)0x0300)" +.LASF2984: + .string "TIM_CC2OF ((uint16_t)0x0400)" +.LASF692: + .string "__GNUCLIKE___TYPEOF 1" +.LASF4718: + .string "TIM3_IRQn" +.LASF556: + .string "HAVE_INITFINI_ARRAY 1" +.LASF1405: + .string "DMA1_Channel5 ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE)" +.LASF1415: + .string "FLASH ((FLASH_TypeDef *) FLASH_R_BASE)" +.LASF1500: + .string "ADC_SMP0 ((uint32_t)0x00000007)" +.LASF795: + .string "__SYS_LOCK_H__ " +.LASF2371: + .string "AFIO_ECR_PIN_PX10 ((uint8_t)0x0A)" +.LASF1876: + .string "DMA_CFGR3_EN ((uint16_t)0x0001)" +.LASF4670: + .string "_nextf" +.LASF1035: + .string "S_ISLNK(m) (((m)&_IFMT) == _IFLNK)" +.LASF2051: + .string "EXTI_FTENR_TR4 ((uint32_t)0x00000010)" +.LASF3687: + .string "I2C_FLAG_TXE ((uint32_t)0x10000080)" +.LASF544: + .string "_ANSIDECL_H_ " +.LASF3429: + .string "DMA2_IT_TC5 ((uint32_t)0x10020000)" +.LASF916: + .string "__htons(_x) __bswap16(_x)" +.LASF591: + .string "__RAND_MAX" +.LASF2497: + .string "AFIO_EXTICR2_EXTI7_PD ((uint16_t)0x3000)" +.LASF1842: + .string "DMA_CFGR1_HTIE ((uint16_t)0x0004)" +.LASF4598: + .string "_atexit" +.LASF4081: + .string "TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000)" +.LASF594: + .string "__IMPORT " +.LASF3012: + .string "TIM_OC2M_1 ((uint16_t)0x2000)" +.LASF1056: + .string "_FNOCTTY 0x8000" +.LASF1855: + .string "DMA_CFGR1_PL_0 ((uint16_t)0x1000)" +.LASF4701: + .string "EXTI2_IRQn" +.LASF4127: + .string "TIM_FLAG_CC1OF ((uint16_t)0x0200)" +.LASF4478: + .string "USB_ENDP_TYPE_MASK 0x03" +.LASF2332: + .string "GPIO_BCR_BR9 ((uint16_t)0x0200)" +.LASF3783: + .string "RCC_IT_CSS ((uint8_t)0x80)" +.LASF1002: + .string "S_ISVTX 0001000" +.LASF2596: + .string "I2C_CTLR2_ITBUFEN ((uint16_t)0x0400)" +.LASF2676: + .string "RCC_SW_HSI ((uint32_t)0x00000000)" +.LASF4264: + .string "RB_UIF_FIFO_OV 0x10" +.LASF1312: + .string "AFIO_BASE (APB2PERIPH_BASE + 0x0000)" +.LASF2816: + .string "RCC_TIM2EN ((uint32_t)0x00000001)" +.LASF4345: + .string "UEP_T_RES_STALL 0x03" +.LASF2268: + .string "GPIO_INDR_IDR9 ((uint16_t)0x0200)" +.LASF1287: + .string "APB2PERIPH_BASE (PERIPH_BASE + 0x10000)" +.LASF255: + .string "__FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x" +.LASF675: + .string "__ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname" +.LASF2204: + .string "GPIO_CFGLR_CNF6_0 ((uint32_t)0x04000000)" +.LASF3310: + .string "BKP_DR6 ((uint16_t)0x0018)" +.LASF3445: + .string "DMA1_FLAG_TC4 ((uint32_t)0x00002000)" +.LASF187: + .string "__LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L" +.LASF1779: + .string "DAC_LD12BDHR_DACC2DHR ((uint32_t)0xFFF00000)" +.LASF4433: + .string "HUB_GET_PORT_STATUS 0xA3" +.LASF1559: + .string "ADC_SQ15_0 ((uint32_t)0x00000400)" +.LASF1694: + .string "BKP_DATAR15_D ((uint16_t)0xFFFF)" +.LASF167: + .string "__DBL_MAX_10_EXP__ 308" +.LASF2003: + .string "EXTI_INTENR_MR16 ((uint32_t)0x00010000)" +.LASF1078: + .string "FSHLOCK _FSHLOCK" +.LASF38: + .string "__UINTMAX_TYPE__ long long unsigned int" +.LASF3138: + .string "USART_CTLR1_IDLEIE ((uint16_t)0x0010)" +.LASF1774: + .string "DAC_DHR12L2 ((uint16_t)0xFFF0)" +.LASF2533: + .string "AFIO_EXTICR4_EXTI12 ((uint16_t)0x000F)" +.LASF1637: + .string "ADC_SQ5_1 ((uint32_t)0x00200000)" +.LASF895: + .string "_UINT64_T_DECLARED " +.LASF2202: + .string "GPIO_CFGLR_CNF5_1 ((uint32_t)0x00800000)" +.LASF2396: + .string "AFIO_PCFR1_USART3_REMAP_FULLREMAP ((uint32_t)0x00000030)" +.LASF4019: + .string "TIM_IT_Trigger ((uint16_t)0x0040)" +.LASF3676: + .string "I2C_FLAG_GENCALL ((uint32_t)0x00100000)" +.LASF1447: + .string "ADC_JAWDEN ((uint32_t)0x00400000)" +.LASF103: + .string "__UINT8_MAX__ 0xff" +.LASF1418: + .string "EXTEN ((EXTEN_TypeDef *) EXTEN_BASE)" +.LASF798: + .string "__LOCK_INIT_RECURSIVE(class,lock) __LOCK_INIT(class,lock)" +.LASF2494: + .string "AFIO_EXTICR2_EXTI7_PA ((uint16_t)0x0000)" +.LASF3585: + .string "GPIO_FullRemap_USART3 ((uint32_t)0x00140030)" +.LASF1464: + .string "ADC_EXTTRIG ((uint32_t)0x00100000)" +.LASF3143: + .string "USART_CTLR1_PS ((uint16_t)0x0200)" +.LASF866: + .string "_REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_new._reent._wcsrtombs_state)" +.LASF1916: + .string "DMA_CFG5_DIR ((uint16_t)0x0010)" +.LASF4593: + .string "_on_exit_args" +.LASF2900: + .string "SPI_I2SCFGR_DATLEN_1 ((uint16_t)0x0004)" +.LASF1485: + .string "ADC_SMP14_0 ((uint32_t)0x00001000)" +.LASF1113: + .string "LOCK_NB 0x04" +.LASF1948: + .string "DMA_CFG7_EN ((uint16_t)0x0001)" +.LASF1776: + .string "DAC_RD12BDHR_DACC1DHR ((uint32_t)0x00000FFF)" +.LASF4301: + .string "RB_UH_EP_RBUF_MOD 0x01" +.LASF794: + .string "_MACHINE__TYPES_H " +.LASF3045: + .string "TIM_OC4PE ((uint16_t)0x0800)" +.LASF3915: + .string "I2S_MCLKOutput_Enable ((uint16_t)0x0200)" +.LASF3290: + .string "ADC_IT_EOC ((uint16_t)0x0220)" +.LASF269: + .string "__DEC64_MIN_EXP__ (-382)" +.LASF3032: + .string "TIM_CC3S_0 ((uint16_t)0x0001)" +.LASF57: + .string "__UINT_LEAST64_TYPE__ long long unsigned int" +.LASF3390: + .string "DMA1_IT_HT2 ((uint32_t)0x00000040)" +.LASF828: + .string "_RAND48_MULT_0 (0xe66d)" +.LASF3802: + .string "RCC_AHBPeriph_SDIO ((uint32_t)0x00000400)" +.LASF3679: + .string "I2C_FLAG_MSL ((uint32_t)0x00010000)" +.LASF224: + .string "__FLT128_MAX_10_EXP__ 4932" +.LASF2581: + .string "I2C_CTLR1_STOP ((uint16_t)0x0200)" +.LASF1455: + .string "ADC_JEXTSEL ((uint32_t)0x00007000)" +.LASF671: + .string "_GCC_MAX_ALIGN_T " +.LASF3735: + .string "PWR_STOPEntry_WFE ((uint8_t)0x02)" +.LASF1937: + .string "DMA_CFG6_MINC ((uint16_t)0x0080)" +.LASF4535: + .string "DEV_TYPE_MOUSE ( USB_DEV_CLASS_HID | 0x30 )" +.LASF4214: + .string "RB_UC_HOST_MODE 0x80" +.LASF4332: + .string "RB_UEP_R_RES1 0x08" +.LASF2600: + .string "I2C_OADDR1_ADD8_9 ((uint16_t)0x0300)" +.LASF3272: + .string "ADC_ExternalTrigInjecConv_T2_CC1 ((uint32_t)0x00003000)" +.LASF4572: + .string "__wchb" +.LASF775: + .string "__arg_type_tag(arg_kind,arg_idx,type_tag_idx) " +.LASF2868: + .string "SPI_CTLR1_BR_2 ((uint16_t)0x0020)" +.LASF1171: + .string "_SYS__INTSUP_H " +.LASF4542: + .string "GET_INT_SP() asm(\"csrrw sp,mscratch,sp\")" +.LASF1054: + .string "_FNONBLOCK 0x4000" +.LASF4691: + .string "SysTicK_IRQn" +.LASF365: + .string "SOC_CH32V103R8T6 " +.LASF3677: + .string "I2C_FLAG_TRA ((uint32_t)0x00040000)" +.LASF3667: + .string "I2C_IT_RXNE ((uint32_t)0x06000040)" +.LASF451: + .string "RT_OBJECT_FLAG_MODULE 0x80" +.LASF2164: + .string "GPIO_CFGLR_MODE1_0 ((uint32_t)0x00000010)" +.LASF1540: + .string "ADC_JOFFSET1 ((uint16_t)0x0FFF)" +.LASF905: + .string "_BYTE_ORDER _LITTLE_ENDIAN" +.LASF860: + .string "_REENT_MBTOWC_STATE(ptr) ((ptr)->_new._reent._mbtowc_state)" +.LASF4174: + .string "USART_IT_TXE ((uint16_t)0x0727)" +.LASF4284: + .string "R8_UEP4_1_MOD (*((PUINT8V)(0x4002340c)))" +.LASF2826: + .string "RCC_LSEBYP ((uint32_t)0x00000004)" +.LASF1678: + .string "ADC_RDATAR_DATA ((uint32_t)0x0000FFFF)" +.LASF3535: + .string "FLASH_WRProt_Pages104to107 ((uint32_t)0x04000000)" +.LASF1700: + .string "BKP_DATAR21_D ((uint16_t)0xFFFF)" +.LASF2206: + .string "GPIO_CFGLR_CNF7 ((uint32_t)0xC0000000)" +.LASF3063: + .string "TIM_IC4F_0 ((uint16_t)0x1000)" +.LASF2105: + .string "EXTI_INTF_INTF18 ((uint32_t)0x00040000)" +.LASF2965: + .string "TIM_COMIE ((uint16_t)0x0020)" +.LASF2805: + .string "RCC_USBHD ((uint16_t)0x1000)" +.LASF2573: + .string "I2C_CTLR1_PE ((uint16_t)0x0001)" +.LASF4119: + .string "TIM_FLAG_Update ((uint16_t)0x0001)" +.LASF4323: + .string "R32_USB_EP0_CTRL (*((PUINT32V)(0x40023430)))" +.LASF2736: + .string "RCC_PLLMULL3 ((uint32_t)0x00040000)" +.LASF3433: + .string "DMA1_FLAG_TC1 ((uint32_t)0x00000002)" +.LASF461: + .string "RT_TIMER_CTRL_SET_ONESHOT 0x2" +.LASF3827: + .string "RCC_APB1Periph_TIM4 ((uint32_t)0x00000004)" +.LASF907: + .string "_QUAD_LOWWORD 0" +.LASF505: + .string "RT_DEVICE_FLAG_INT_TX 0x400" +.LASF1184: + .string "long +4" +.LASF1886: + .string "DMA_CFGR3_PSIZE_1 ((uint16_t)0x0200)" +.LASF2369: + .string "AFIO_ECR_PIN_PX8 ((uint8_t)0x08)" +.LASF1226: + .string "INT_LEAST32_MAX (__INT_LEAST32_MAX__)" +.LASF3055: + .string "TIM_IC3F_0 ((uint16_t)0x0010)" +.LASF2281: + .string "GPIO_OUTDR_ODR6 ((uint16_t)0x0040)" +.LASF2551: + .string "AFIO_EXTICR4_EXTI14_PA ((uint16_t)0x0000)" +.LASF4383: + .string "USB_PID_IN 0x09" +.LASF3130: + .string "USART_STATR_CTS ((uint16_t)0x0200)" +.LASF814: + .string "__need_wint_t" +.LASF161: + .string "__FLT_HAS_QUIET_NAN__ 1" +.LASF359: + .string "RT_USING_DEVICE_IPC " +.LASF3734: + .string "PWR_STOPEntry_WFI ((uint8_t)0x01)" +.LASF4775: + .string "_RootHubDev" +.LASF3884: + .string "SPI_DataSize_16b ((uint16_t)0x0800)" +.LASF4653: + .string "_asctime_buf" +.LASF3632: + .string "I2C_Mode_SMBusHost ((uint16_t)0x000A)" +.LASF3926: + .string "I2S_AudioFreq_Default ((uint32_t)2)" +.LASF3560: + .string "FLASH_FLAG_BANK1_PGERR FLASH_FLAG_PGERR" +.LASF4505: + .string "pEP4_OUT_DataBuf (pEP4_RAM_Addr)" +.LASF1223: + .string "INT32_MAX (__INT32_MAX__)" +.LASF1198: + .string "__LEAST64 \"ll\"" +.LASF4630: + .string "__sdidinit" +.LASF2065: + .string "EXTI_FTENR_TR18 ((uint32_t)0x00040000)" +.LASF3975: + .string "TIM_OCNPolarity_High ((uint16_t)0x0000)" +.LASF3231: + .string "ADC_Mode_SlowInterl ((uint32_t)0x00080000)" +.LASF332: + .string "RT_USING_SEMAPHORE " +.LASF1: + .string "__STDC_VERSION__ 201710L" +.LASF4207: + .string "WWDG_Prescaler_4 ((uint32_t)0x00000100)" +.LASF216: + .string "__FLT64_HAS_DENORM__ 1" +.LASF3914: + .string "I2S_DataFormat_32b ((uint16_t)0x0005)" +.LASF3418: + .string "DMA2_IT_HT2 ((uint32_t)0x10000040)" +.LASF1746: + .string "DAC_MAMP1 ((uint32_t)0x00000F00)" +.LASF1471: + .string "ADC_SMP10_2 ((uint32_t)0x00000004)" +.LASF3513: + .string "FLASH_WRProt_Pages16to19 ((uint32_t)0x00000010)" +.LASF1952: + .string "DMA_CFG7_DIR ((uint16_t)0x0010)" +.LASF717: + .string "__const const" +.LASF592: + .string "__RAND_MAX 0x7fffffff" +.LASF3385: + .string "DMA1_IT_TC1 ((uint32_t)0x00000002)" +.LASF3171: + .string "USART_CTLR3_ONEBIT ((uint16_t)0x0800)" +.LASF3865: + .string "RCC_FLAG_LPWRRST ((uint8_t)0x7F)" +.LASF719: + .string "__volatile volatile" +.LASF139: + .string "__INTPTR_MAX__ 0x7fffffff" +.LASF2404: + .string "AFIO_PCFR1_TIM2_REMAP_0 ((uint32_t)0x00000100)" +.LASF3653: + .string "I2C_PECPosition_Current ((uint16_t)0xF7FF)" +.LASF2922: + .string "TIM_ARPE ((uint16_t)0x0080)" +.LASF1331: + .string "TIM9_BASE (APB2PERIPH_BASE + 0x4C00)" +.LASF2542: + .string "AFIO_EXTICR4_EXTI12_PF ((uint16_t)0x0005)" +.LASF1663: + .string "ADC_JSQ3_3 ((uint32_t)0x00002000)" +.LASF1310: + .string "PWR_BASE (APB1PERIPH_BASE + 0x7000)" +.LASF208: + .string "__FLT64_MIN_10_EXP__ (-307)" +.LASF2638: + .string "I2C_CKCFGR_DUTY ((uint16_t)0x4000)" +.LASF3299: + .string "BKP_TamperPinLevel_High ((uint16_t)0x0000)" +.LASF2813: + .string "RCC_TIM1EN ((uint32_t)0x00000800)" +.LASF2352: + .string "GPIO_LCK13 ((uint32_t)0x00002000)" +.LASF4060: + .string "TIM_DMA_CC2 ((uint16_t)0x0400)" +.LASF4650: + .string "_add" +.LASF3706: + .string "I2C_EVENT_SLAVE_BYTE_RECEIVED ((uint32_t)0x00020040)" +.LASF4534: + .string "DEV_TYPE_KEYBOARD ( USB_DEV_CLASS_HID | 0x20 )" +.LASF3478: + .string "DMA2_FLAG_HT5 ((uint32_t)0x10040000)" +.LASF2424: + .string "AFIO_PCFR1_TIM5CH4_IREMAP ((uint32_t)0x00010000)" +.LASF1587: + .string "ADC_SQ9 ((uint32_t)0x00007C00)" +.LASF515: + .string "RT_DEVICE_CTRL_CONFIG 0x03" +.LASF2981: + .string "TIM_TIF ((uint16_t)0x0040)" +.LASF210: + .string "__FLT64_MAX_10_EXP__ 308" +.LASF1101: + .string "F_DUPFD_CLOEXEC 14" +.LASF1138: + .string "rt_spin_lock_init(lock) " +.LASF2803: + .string "RCC_FLITFEN ((uint16_t)0x0010)" +.LASF4531: + .string "ROOT_DEV_CONNECTED 1" +.LASF1145: + .string "FINSH_VAR_EXPORT(name,type,desc) const char __vsym_ ##name ##_name[] = #name; RT_USED const struct finsh_sysvar __vsym_ ##name RT_SECTION(\"VSymTab\")= { __vsym_ ##name ##_name, type, (void*)&name };" +.LASF4672: + .string "_unused" +.LASF562: + .string "_UNBUF_STREAM_OPT 1" +.LASF4131: + .string "TIM_DMABurstLength_1Byte TIM_DMABurstLength_1Transfer" +.LASF4139: + .string "TIM_DMABurstLength_9Bytes TIM_DMABurstLength_9Transfers" +.LASF4563: + .string "__uint8_t" +.LASF1097: + .string "F_RGETLK 10" +.LASF3642: + .string "I2C_Register_CTLR2 ((uint8_t)0x04)" +.LASF3662: + .string "I2C_IT_OVR ((uint32_t)0x01000800)" +.LASF3705: + .string "I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED ((uint32_t)0x00120000)" +.LASF3971: + .string "TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040)" +.LASF875: + .string "_GLOBAL_ATEXIT (_GLOBAL_REENT->_atexit)" +.LASF799: + .string "__lock_init(lock) __retarget_lock_init(&lock)" +.LASF3336: + .string "BKP_DR32 ((uint16_t)0x0094)" +.LASF8: + .string "__VERSION__ \"8.2.0\"" +.LASF3160: + .string "USART_CTLR3_EIE ((uint16_t)0x0001)" +.LASF2230: + .string "GPIO_CFGHR_MODE14_1 ((uint32_t)0x02000000)" +.LASF959: + .string "_CLOCKID_T_DECLARED " +.LASF667: + .string "NULL" +.LASF3980: + .string "TIM_OutputNState_Enable ((uint16_t)0x0004)" +.LASF4300: + .string "RB_UH_EP_RX_EN 0x08" +.LASF3252: + .string "ADC_Channel_9 ((uint8_t)0x09)" +.LASF120: + .string "__UINT8_C(c) c" +.LASF805: + .string "__lock_try_acquire(lock) __retarget_lock_try_acquire(lock)" +.LASF1805: + .string "DMA_TCIF6 ((uint32_t)0x00200000)" +.LASF2257: + .string "GPIO_CFGHR_CNF15_0 ((uint32_t)0x40000000)" +.LASF1269: + .string "__I volatile const" +.LASF2406: + .string "AFIO_PCFR1_TIM2_REMAP_NOREMAP ((uint32_t)0x00000000)" +.LASF3408: + .string "DMA1_IT_GL7 ((uint32_t)0x01000000)" +.LASF2879: + .string "SPI_CTLR2_RXDMAEN ((uint8_t)0x01)" +.LASF2907: + .string "SPI_I2SCFGR_I2SCFG_0 ((uint16_t)0x0100)" +.LASF2324: + .string "GPIO_BCR_BR1 ((uint16_t)0x0002)" +.LASF2728: + .string "RCC_PLLMULL_1 ((uint32_t)0x00080000)" +.LASF4342: + .string "UEP_T_RES_ACK 0x00" +.LASF3832: + .string "RCC_APB1Periph_TIM13 ((uint32_t)0x00000080)" +.LASF2979: + .string "TIM_CC4IF ((uint16_t)0x0010)" +.LASF4288: + .string "RB_UEP4_RX_EN 0x08" +.LASF2287: + .string "GPIO_OUTDR_ODR12 ((uint16_t)0x1000)" +.LASF1571: + .string "ADC_L_0 ((uint32_t)0x00100000)" +.LASF212: + .string "__FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64" +.LASF2260: + .string "GPIO_INDR_IDR1 ((uint16_t)0x0002)" +.LASF4417: + .string "USB_REQ_TYP_WRITE 0x00" +.LASF177: + .string "__LDBL_DIG__ 33" +.LASF2695: + .string "RCC_HPRE_DIV64 ((uint32_t)0x000000C0)" +.LASF966: + .string "_SYS__TIMESPEC_H_ " +.LASF4111: + .string "TIM_TRGOSource_OC3Ref ((uint16_t)0x0060)" +.LASF1204: + .string "__int_fast16_t_defined 1" +.LASF2870: + .string "SPI_CTLR1_LSBFIRST ((uint16_t)0x0080)" +.LASF1722: + .string "BKP_CAL ((uint16_t)0x007F)" +.LASF4293: + .string "RB_UEP3_BUF_MOD 0x10" +.LASF35: + .string "__WCHAR_TYPE__ int" +.LASF2653: + .string "PWR_CTLR_PLS_2V5 ((uint16_t)0x0060)" +.LASF1932: + .string "DMA_CFG6_HTIE ((uint16_t)0x0004)" +.LASF1821: + .string "DMA_CTCIF3 ((uint32_t)0x00000200)" +.LASF4217: + .string "RB_UC_SYS_CTRL1 0x20" +.LASF1964: + .string "DMA_CFG7_PL_1 ((uint16_t)0x2000)" +.LASF1795: + .string "DMA_TEIF3 ((uint32_t)0x00000800)" +.LASF750: + .string "__containerof(x,s,m) ({ const volatile __typeof(((s *)0)->m) *__x = (x); __DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));})" +.LASF3533: + .string "FLASH_WRProt_Pages96to99 ((uint32_t)0x01000000)" +.LASF974: + .string "PTHREAD_CREATE_DETACHED 0" +.LASF2205: + .string "GPIO_CFGLR_CNF6_1 ((uint32_t)0x08000000)" +.LASF3483: + .string "EXTI_Line2 ((uint32_t)0x00004)" +.LASF4470: + .string "USB_DEV_CLASS_PHYSIC_IF 0x05" +.LASF4377: + .string "R8_UEP7_T_LEN (*((PUINT8V)(0x4002344c)))" +.LASF1754: + .string "DAC_TEN2 ((uint32_t)0x00040000)" +.LASF496: + .string "RT_DEVICE_FLAG_WRONLY 0x002" +.LASF1501: + .string "ADC_SMP0_0 ((uint32_t)0x00000001)" +.LASF3982: + .string "TIM_CCx_Disable ((uint16_t)0x0000)" +.LASF3962: + .string "TIM_Channel_2 ((uint16_t)0x0004)" +.LASF910: + .string "PDP_ENDIAN _PDP_ENDIAN" +.LASF2355: + .string "GPIO_LCKK ((uint32_t)0x00010000)" +.LASF973: + .string "PTHREAD_EXPLICIT_SCHED 2" +.LASF4793: + .string "rt_hw_cpu_shutdown" +.LASF1332: + .string "TIM10_BASE (APB2PERIPH_BASE + 0x5000)" +.LASF982: + .string "TIMESPEC_TO_TIMEVAL(tv,ts) do { (tv)->tv_sec = (ts)->tv_sec; (tv)->tv_usec = (ts)->tv_nsec / 1000; } while (0)" +.LASF4765: + .string "pEP6_RAM_Addr" +.LASF4123: + .string "TIM_FLAG_CC4 ((uint16_t)0x0010)" +.LASF4241: + .string "RB_UIE_FIFO_OV 0x10" +.LASF2797: + .string "RCC_SPI2RST ((uint32_t)0x00004000)" +.LASF676: + .string "__ptr_t void *" +.LASF2313: + .string "GPIO_BSHR_BR6 ((uint32_t)0x00400000)" +.LASF688: + .string "__BEGIN_DECLS " +.LASF3942: + .string "SPI_IT_CRCERR ((uint8_t)0x54)" +.LASF391: + .string "RT_TRUE 1" +.LASF827: + .string "_RAND48_SEED_2 (0x1234)" +.LASF2815: + .string "RCC_USART1EN ((uint32_t)0x00004000)" +.LASF4213: + .string "R8_USB_CTRL (*((PUINT8V)(0x40023400)))" +.LASF4012: + .string "TIM_ICPSC_DIV8 ((uint16_t)0x000C)" +.LASF84: + .string "__INT_WIDTH__ 32" +.LASF2792: + .string "RCC_I2C1RST ((uint32_t)0x00200000)" +.LASF2177: + .string "GPIO_CFGLR_MODE5_1 ((uint32_t)0x00200000)" +.LASF3581: + .string "GPIO_Remap_I2C1 ((uint32_t)0x00000002)" +.LASF2103: + .string "EXTI_INTF_INTF16 ((uint32_t)0x00010000)" +.LASF1717: + .string "BKP_DATAR38_D ((uint16_t)0xFFFF)" +.LASF2711: + .string "RCC_PPRE2_2 ((uint32_t)0x00002000)" +.LASF1660: + .string "ADC_JSQ3_0 ((uint32_t)0x00000400)" +.LASF1003: + .string "S_IREAD 0000400" +.LASF3095: + .string "TIM_DTG_4 ((uint16_t)0x0010)" +.LASF1194: + .string "__FAST64 \"ll\"" +.LASF2349: + .string "GPIO_LCK10 ((uint32_t)0x00000400)" +.LASF4758: + .string "PUINT8" +.LASF174: + .string "__DBL_HAS_INFINITY__ 1" +.LASF4540: + .string "pSetupReq ((PUSB_SETUP_REQ)pHOST_TX_RAM_Addr)" +.LASF145: + .string "__FLT_EVAL_METHOD_TS_18661_3__ 0" +.LASF422: + .string "RTT_API " +.LASF1112: + .string "LOCK_EX 0x02" +.LASF3443: + .string "DMA1_FLAG_TE3 ((uint32_t)0x00000800)" +.LASF3557: + .string "FLASH_FLAG_OPTERR ((uint32_t)0x00000001)" +.LASF3609: + .string "GPIO_PortSourceGPIOD ((uint8_t)0x03)" +.LASF34: + .string "__PTRDIFF_TYPE__ int" +.LASF4642: + .string "__sf" +.LASF1873: + .string "DMA_CFGR2_PL_0 ((uint16_t)0x1000)" +.LASF2642: + .string "PWR_CTLR_PDDS ((uint16_t)0x0002)" +.LASF2243: + .string "GPIO_CFGHR_CNF10_1 ((uint32_t)0x00000800)" +.LASF497: + .string "RT_DEVICE_FLAG_RDWR 0x003" +.LASF4286: + .string "RB_UEP1_TX_EN 0x40" +.LASF3366: + .string "DMA_MemoryInc_Disable ((uint32_t)0x00000000)" +.LASF3763: + .string "RCC_SYSCLKSource_PLLCLK ((uint32_t)0x00000002)" +.LASF4493: + .string "USB_BO_CSW_SIG1 0x53" +.LASF116: + .string "__INT_LEAST64_MAX__ 0x7fffffffffffffffLL" +.LASF96: + .string "__SIG_ATOMIC_MAX__ 0x7fffffff" +.LASF3702: + .string "I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED ((uint32_t)0x00060082)" +.LASF522: + .string "RT_DEVICE_CTRL_BLK_SYNC 0x11" +.LASF1598: + .string "ADC_SQ10_4 ((uint32_t)0x00080000)" +.LASF4304: + .string "RB_UEP6_TX_EN 0x40" +.LASF2063: + .string "EXTI_FTENR_TR16 ((uint32_t)0x00010000)" +.LASF2832: + .string "RCC_RTCSEL_LSI ((uint32_t)0x00000200)" +.LASF1627: + .string "ADC_SQ3_3 ((uint32_t)0x00002000)" +.LASF3006: + .string "TIM_CC2S_0 ((uint16_t)0x0100)" +.LASF3383: + .string "DMA_IT_TE ((uint32_t)0x00000008)" +.LASF1516: + .string "ADC_SMP4 ((uint32_t)0x00007000)" +.LASF949: + .string "_OFF_T_DECLARED " +.LASF2789: + .string "RCC_TIM3RST ((uint32_t)0x00000002)" +.LASF4798: + .string "stack_addr" +.LASF3818: + .string "RCC_APB2Periph_ADC3 ((uint32_t)0x00008000)" +.LASF4054: + .string "TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00)" +.LASF4093: + .string "TIM_EventSource_CC4 ((uint16_t)0x0010)" +.LASF4221: + .string "RB_UC_RESET_SIE 0x04" +.LASF2831: + .string "RCC_RTCSEL_LSE ((uint32_t)0x00000100)" +.LASF3297: + .string "ADC_FLAG_STRT ((uint8_t)0x10)" +.LASF3031: + .string "TIM_CC3S ((uint16_t)0x0003)" +.LASF1055: + .string "_FNDELAY _FNONBLOCK" +.LASF1843: + .string "DMA_CFGR1_TEIE ((uint16_t)0x0008)" +.LASF3921: + .string "I2S_AudioFreq_32k ((uint32_t)32000)" +.LASF2910: + .string "SPI_I2SCFGR_I2SMOD ((uint16_t)0x0800)" +.LASF1931: + .string "DMA_CFG6_TCIE ((uint16_t)0x0002)" +.LASF1025: + .string "S_IWOTH 0000002" +.LASF3626: + .string "GPIO_PinSource13 ((uint8_t)0x0D)" +.LASF3596: + .string "GPIO_Remap_PD01 ((uint32_t)0x00008000)" +.LASF3056: + .string "TIM_IC3F_1 ((uint16_t)0x0020)" +.LASF3753: + .string "RCC_PLLMul_9 ((uint32_t)0x001C0000)" +.LASF1183: + .string "int +2" +.LASF1803: + .string "DMA_TEIF5 ((uint32_t)0x00080000)" +.LASF1958: + .string "DMA_CFG7_PSIZE_1 ((uint16_t)0x0200)" +.LASF3776: + .string "RCC_HCLK_Div8 ((uint32_t)0x00000600)" +.LASF2757: + .string "RCC_CFGR0_MCO_HSI ((uint32_t)0x05000000)" +.LASF4583: + .string "__tm" +.LASF3083: + .string "TIM_PSC ((uint16_t)0xFFFF)" +.LASF821: + .string "_ATEXIT_SIZE 32" +.LASF2477: + .string "AFIO_EXTICR2_EXTI4_PE ((uint16_t)0x0004)" +.LASF4460: + .string "USB_DESCR_TYP_REPORT 0x22" +.LASF642: + .string "_SIZE_T_DEFINED " +.LASF3024: + .string "TIM_IC2PSC_0 ((uint16_t)0x0400)" +.LASF341: + .string "RT_CONSOLEBUF_SIZE 128" +.LASF925: + .string "FD_SET(n,p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))" +.LASF2974: + .string "TIM_TDE ((uint16_t)0x4000)" +.LASF3672: + .string "I2C_IT_SB ((uint32_t)0x02000001)" +.LASF4689: + .string "NonMaskableInt_IRQn" +.LASF2170: + .string "GPIO_CFGLR_MODE3_0 ((uint32_t)0x00001000)" +.LASF4419: + .string "USB_REQ_TYP_STANDARD 0x00" +.LASF4126: + .string "TIM_FLAG_Break ((uint16_t)0x0080)" +.LASF985: + .string "CLOCK_ENABLED 1" +.LASF2452: + .string "AFIO_EXTICR1_EXTI1_PE ((uint16_t)0x0040)" +.LASF939: + .string "_BLKSIZE_T_DECLARED " +.LASF85: + .string "__LONG_WIDTH__ 32" +.LASF789: + .string "__no_lock_analysis __lock_annotate(no_thread_safety_analysis)" +.LASF18: + .string "__SIZEOF_LONG__ 4" +.LASF2303: + .string "GPIO_BSHR_BS12 ((uint32_t)0x00001000)" +.LASF4545: + .string "NVIC_PriorityGroup_0 ((uint32_t)0x00)" +.LASF3651: + .string "I2C_SMBusAlert_High ((uint16_t)0xDFFF)" +.LASF4336: + .string "UEP_R_RES_TOUT 0x04" +.LASF3164: + .string "USART_CTLR3_NACK ((uint16_t)0x0010)" +.LASF1189: + .string "__INT32 \"l\"" +.LASF190: + .string "__LDBL_HAS_QUIET_NAN__ 1" +.LASF578: + .string "_ATFILE_SOURCE 1" +.LASF4058: + .string "TIM_DMA_Update ((uint16_t)0x0100)" +.LASF2865: + .string "SPI_CTLR1_BR ((uint16_t)0x0038)" +.LASF372: + .string "RT_DEBUG_MEMHEAP 0" +.LASF1976: + .string "DMA_PADDR4_PA ((uint32_t)0xFFFFFFFF)" +.LASF1290: + .string "TIM3_BASE (APB1PERIPH_BASE + 0x0400)" +.LASF2845: + .string "RTC_CTLRH_SECIE ((uint8_t)0x01)" +.LASF3416: + .string "DMA2_IT_GL2 ((uint32_t)0x10000010)" +.LASF490: + .string "RT_WAITING_NO 0" +.LASF1038: + .string "_SYS_FCNTL_H_ " +.LASF4607: + .string "_lbfsize" +.LASF689: + .string "__END_DECLS " +.LASF1759: + .string "DAC_WAVE2 ((uint32_t)0x00C00000)" +.LASF3591: + .string "GPIO_PartialRemap_TIM3 ((uint32_t)0x001A0800)" +.LASF4693: + .string "WWDG_IRQn" +.LASF3989: + .string "TIM_AutomaticOutput_Enable ((uint16_t)0x4000)" +.LASF3242: + .string "ADC_DataAlign_Left ((uint32_t)0x00000800)" +.LASF3145: + .string "USART_CTLR1_WAKE ((uint16_t)0x0800)" +.LASF2520: + .string "AFIO_EXTICR3_EXTI10_PB ((uint16_t)0x0100)" +.LASF1069: + .string "FSYNC _FSYNC" +.LASF663: + .string "_GCC_WCHAR_T " +.LASF829: + .string "_RAND48_MULT_1 (0xdeec)" +.LASF4096: + .string "TIM_EventSource_Break ((uint16_t)0x0080)" +.LASF4045: + .string "TIM_DMABurstLength_6Transfers ((uint16_t)0x0500)" +.LASF1565: + .string "ADC_SQ16_0 ((uint32_t)0x00008000)" +.LASF2165: + .string "GPIO_CFGLR_MODE1_1 ((uint32_t)0x00000020)" +.LASF1908: + .string "DMA_CFG4_PL ((uint16_t)0x3000)" +.LASF4190: + .string "USART_LINBreakDetectLength_10b ((uint16_t)0x0000)" +.LASF1712: + .string "BKP_DATAR33_D ((uint16_t)0xFFFF)" +.LASF1470: + .string "ADC_SMP10_1 ((uint32_t)0x00000002)" +.LASF570: + .string "__GNUC_PREREQ__(ma,mi) __GNUC_PREREQ(ma, mi)" +.LASF2373: + .string "AFIO_ECR_PIN_PX12 ((uint8_t)0x0C)" +.LASF1409: + .string "DMA2_Channel2 ((DMA_Channel_TypeDef *) DMA2_Channel2_BASE)" +.LASF4275: + .string "MASK_UIS_TOKEN 0x30" +.LASF4438: + .string "HUB_C_HUB_OVER_CURRENT 1" +.LASF610: + .string "___int8_t_defined 1" +.LASF4100: + .string "TIM_OCPreload_Disable ((uint16_t)0x0000)" +.LASF1517: + .string "ADC_SMP4_0 ((uint32_t)0x00001000)" +.LASF2500: + .string "AFIO_EXTICR2_EXTI7_PG ((uint16_t)0x6000)" +.LASF1237: + .string "INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)" +.LASF921: + .string "NBBY 8" +.LASF69: + .string "__has_include_next(STR) __has_include_next__(STR)" +.LASF3074: + .string "TIM_CC2NP ((uint16_t)0x0080)" +.LASF3320: + .string "BKP_DR16 ((uint16_t)0x0054)" +.LASF1291: + .string "TIM4_BASE (APB1PERIPH_BASE + 0x0800)" +.LASF3185: + .string "WWDG_CTLR_T2 ((uint8_t)0x04)" +.LASF1217: + .string "INT16_MAX (__INT16_MAX__)" +.LASF115: + .string "__INT_LEAST32_WIDTH__ 32" +.LASF4628: + .string "_unspecified_locale_info" +.LASF3411: + .string "DMA1_IT_TE7 ((uint32_t)0x08000000)" +.LASF2095: + .string "EXTI_INTF_INTF8 ((uint32_t)0x00000100)" +.LASF4609: + .string "_read" +.LASF4605: + .string "_flags" +.LASF3991: + .string "TIM_LOCKLevel_OFF ((uint16_t)0x0000)" +.LASF4324: + .string "R8_UEP0_T_LEN (*((PUINT8V)(0x40023430)))" +.LASF319: + .string "RT_ALIGN_SIZE 4" +.LASF3361: + .string "DMA_DIR_PeripheralDST ((uint32_t)0x00000010)" +.LASF4746: + .string "RESERVED4" +.LASF1118: + .string "DT_UNKNOWN 0x00" +.LASF4748: + .string "RESERVED5" +.LASF1326: + .string "USART1_BASE (APB2PERIPH_BASE + 0x3800)" +.LASF3899: + .string "SPI_BaudRatePrescaler_256 ((uint16_t)0x0038)" +.LASF2375: + .string "AFIO_ECR_PIN_PX14 ((uint8_t)0x0E)" +.LASF1897: + .string "DMA_CFG4_TEIE ((uint16_t)0x0008)" +.LASF3622: + .string "GPIO_PinSource9 ((uint8_t)0x09)" +.LASF2820: + .string "RCC_I2C1EN ((uint32_t)0x00200000)" +.LASF978: + .string "_PTHREAD_ONCE_INIT { 1, 0 }" +.LASF4387: + .string "USB_PID_STALL 0x0E" +.LASF2943: + .string "TIM_SMS_1 ((uint16_t)0x0002)" +.LASF1782: + .string "DAC_DACC1DOR ((uint16_t)0x0FFF)" +.LASF2953: + .string "TIM_ETF_2 ((uint16_t)0x0400)" +.LASF4671: + .string "_nmalloc" +.LASF1585: + .string "ADC_SQ8_3 ((uint32_t)0x00000100)" +.LASF3799: + .string "RCC_AHBPeriph_FLITF ((uint32_t)0x00000010)" +.LASF2380: + .string "AFIO_ECR_PORT_2 ((uint8_t)0x40)" +.LASF242: + .string "__FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x" +.LASF2724: + .string "RCC_PLLSRC ((uint32_t)0x00010000)" +.LASF4436: + .string "HUB_SET_PORT_FEATURE 0x23" +.LASF4418: + .string "USB_REQ_TYP_MASK 0x60" +.LASF609: + .string "__have_long32 1" +.LASF1480: + .string "ADC_SMP13 ((uint32_t)0x00000E00)" +.LASF830: + .string "_RAND48_MULT_2 (0x0005)" +.LASF1730: + .string "BKP_TPIE ((uint16_t)0x0004)" +.LASF1641: + .string "ADC_SQ6 ((uint32_t)0x3E000000)" +.LASF2098: + .string "EXTI_INTF_INTF11 ((uint32_t)0x00000800)" +.LASF623: + .string "_T_PTRDIFF_ " +.LASF862: + .string "_REENT_MBRLEN_STATE(ptr) ((ptr)->_new._reent._mbrlen_state)" +.LASF4385: + .string "USB_PID_ACK 0x02" +.LASF3004: + .string "TIM_OC1CE ((uint16_t)0x0080)" +.LASF705: + .string "__CC_SUPPORTS_INLINE 1" +.LASF4800: + .string "level" +.LASF3833: + .string "RCC_APB1Periph_TIM14 ((uint32_t)0x00000100)" +.LASF3736: + .string "PWR_FLAG_WU ((uint32_t)0x00000001)" +.LASF818: + .string "_TIMER_T_ unsigned long" +.LASF4154: + .string "USART_StopBits_2 ((uint16_t)0x2000)" +.LASF971: + .string "PTHREAD_SCOPE_SYSTEM 1" +.LASF3247: + .string "ADC_Channel_4 ((uint8_t)0x04)" +.LASF4772: + .string "DevicePID" +.LASF1245: + .string "UINT_FAST64_MAX (__UINT_FAST64_MAX__)" +.LASF1603: + .string "ADC_SQ11_3 ((uint32_t)0x00800000)" +.LASF1985: + .string "DMA_MADDR6_MA ((uint32_t)0xFFFFFFFF)" +.LASF1457: + .string "ADC_JEXTSEL_1 ((uint32_t)0x00002000)" +.LASF2277: + .string "GPIO_OUTDR_ODR2 ((uint16_t)0x0004)" +.LASF4302: + .string "R8_UEP5_6_MOD (*((PUINT8V)(0x4002340e)))" +.LASF1624: + .string "ADC_SQ3_0 ((uint32_t)0x00000400)" +.LASF514: + .string "RT_DEVICE_CTRL_SUSPEND 0x02" +.LASF3463: + .string "DMA2_FLAG_TE1 ((uint32_t)0x10000008)" +.LASF3502: + .string "FLASH_Latency_0 ((uint32_t)0x00000000)" +.LASF1918: + .string "DMA_CFG5_PINC ((uint16_t)0x0040)" +.LASF54: + .string "__UINT_LEAST8_TYPE__ unsigned char" +.LASF645: + .string "___int_size_t_h " +.LASF4636: + .string "_cvtlen" +.LASF2837: + .string "RCC_LSIRDY ((uint32_t)0x00000002)" +.LASF1040: + .string "_FOPEN (-1)" +.LASF2146: + .string "FLASH_USER_nUSER ((uint32_t)0xFF000000)" +.LASF2858: + .string "RTC_CNTH_RTC_CNT ((uint16_t)0xFFFF)" +.LASF4114: + .string "TIM_SlaveMode_Gated ((uint16_t)0x0005)" +.LASF3847: + .string "RCC_APB1Periph_PWR ((uint32_t)0x10000000)" +.LASF214: + .string "__FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64" +.LASF2385: + .string "AFIO_ECR_PORT_PE ((uint8_t)0x40)" +.LASF3606: + .string "GPIO_PortSourceGPIOA ((uint8_t)0x00)" +.LASF779: + .string "__locks_exclusive(...) __lock_annotate(exclusive_lock_function(__VA_ARGS__))" +.LASF1533: + .string "ADC_SMP8_0 ((uint32_t)0x01000000)" +.LASF1369: + .string "USART3 ((USART_TypeDef *) USART3_BASE)" +.LASF1852: + .string "DMA_CFGR1_MSIZE_0 ((uint16_t)0x0400)" +.LASF4755: + .string "SystemCoreClock" +.LASF4156: + .string "USART_Parity_No ((uint16_t)0x0000)" +.LASF2232: + .string "GPIO_CFGHR_MODE15_0 ((uint32_t)0x10000000)" +.LASF737: + .string "__nonnull_all __attribute__((__nonnull__))" +.LASF2422: + .string "AFIO_PCFR1_CAN_REMAP_REMAP3 ((uint32_t)0x00006000)" +.LASF840: + .string "_REENT_CHECK_MP(ptr) " +.LASF4130: + .string "TIM_FLAG_CC4OF ((uint16_t)0x1000)" +.LASF2554: + .string "AFIO_EXTICR4_EXTI14_PD ((uint16_t)0x0300)" +.LASF4412: + .string "HID_SET_IDLE 0x0A" +.LASF1313: + .string "EXTI_BASE (APB2PERIPH_BASE + 0x0400)" +.LASF4473: + .string "USB_DEV_CLASS_STORAGE 0x08" +.LASF2982: + .string "TIM_BIF ((uint16_t)0x0080)" +.LASF1552: + .string "ADC_SQ14 ((uint32_t)0x000003E0)" +.LASF2752: + .string "RCC_MCO_0 ((uint32_t)0x01000000)" +.LASF1130: + .string "RT_SLIST_OBJECT_INIT(object) { RT_NULL }" +.LASF3610: + .string "GPIO_PortSourceGPIOE ((uint8_t)0x04)" +.LASF2854: + .string "RTC_PSCH_PRL ((uint16_t)0x000F)" +.LASF3810: + .string "RCC_APB2Periph_GPIOF ((uint32_t)0x00000080)" +.LASF2515: + .string "AFIO_EXTICR3_EXTI9_PD ((uint16_t)0x0030)" +.LASF596: + .string "_BEGIN_STD_C " +.LASF4660: + .string "_wctomb_state" +.LASF2152: + .string "FLASH_WRPR0_nWRPR0 ((uint32_t)0x0000FF00)" +.LASF1990: + .string "EXTI_INTENR_MR3 ((uint32_t)0x00000008)" +.LASF160: + .string "__FLT_HAS_INFINITY__ 1" +.LASF619: + .string "_STDDEF_H " +.LASF4199: + .string "USART_FLAG_IDLE ((uint16_t)0x0010)" +.LASF2859: + .string "RTC_CNTL_RTC_CNT ((uint16_t)0xFFFF)" +.LASF4407: + .string "HUB_SET_DESCRIPTOR 0x07" +.LASF1793: + .string "DMA_TCIF3 ((uint32_t)0x00000200)" +.LASF2658: + .string "PWR_CTLR_DBP ((uint16_t)0x0100)" +.LASF4686: + .string "func" +.LASF2817: + .string "RCC_TIM3EN ((uint32_t)0x00000002)" +.LASF3919: + .string "I2S_AudioFreq_48k ((uint32_t)48000)" +.LASF76: + .string "__WCHAR_MAX__ 0x7fffffff" +.LASF4646: + .string "_iobs" +.LASF1393: + .string "TIM15 ((TIM_TypeDef *) TIM15_BASE)" +.LASF3548: + .string "OB_STDBY_RST ((uint16_t)0x0000)" +.LASF983: + .string "_XLOCALE_H " +.LASF4024: + .string "TIM_DMABase_DIER ((uint16_t)0x0003)" +.LASF2137: + .string "FLASH_OBR_USER ((uint16_t)0x03FC)" +.LASF3623: + .string "GPIO_PinSource10 ((uint8_t)0x0A)" +.LASF4490: + .string "USB_BO_CBW_SIG2 0x42" +.LASF3694: + .string "I2C_EVENT_MASTER_MODE_SELECT ((uint32_t)0x00030001)" +.LASF3176: + .string "USART_GPR_PSC_3 ((uint16_t)0x0008)" +.LASF3784: + .string "RCC_USBCLKSource_PLLCLK_1Div5 ((uint8_t)0x00)" +.LASF3389: + .string "DMA1_IT_TC2 ((uint32_t)0x00000020)" +.LASF2620: + .string "I2C_STAR1_RXNE ((uint16_t)0x0040)" +.LASF1921: + .string "DMA_CFG5_PSIZE_0 ((uint16_t)0x0100)" +.LASF194: + .string "__FLT32_MIN_10_EXP__ (-37)" +.LASF557: + .string "_HAVE_LONG_DOUBLE 1" +.LASF1812: + .string "DMA_CGIF1 ((uint32_t)0x00000001)" +.LASF125: + .string "__UINT_LEAST64_MAX__ 0xffffffffffffffffULL" +.LASF853: + .string "_REENT_MP_P5S(ptr) ((ptr)->_p5s)" +.LASF3276: + .string "ADC_ExternalTrigInjecConv_T1_TRGO ((uint32_t)0x00000000)" +.LASF4420: + .string "USB_REQ_TYP_CLASS 0x20" +.LASF1849: + .string "DMA_CFGR1_PSIZE_0 ((uint16_t)0x0100)" +.LASF1651: + .string "ADC_JSQ1_3 ((uint32_t)0x00000008)" +.LASF3172: + .string "USART_GPR_PSC ((uint16_t)0x00FF)" +.LASF250: + .string "__FLT64X_MIN_10_EXP__ (-4931)" +.LASF4640: + .string "_sig_func" +.LASF3413: + .string "DMA2_IT_TC1 ((uint32_t)0x10000002)" +.LASF305: + .string "__riscv_mul 1" +.LASF4272: + .string "RB_UIS_TOG_OK 0x40" +.LASF3266: + .string "ADC_SampleTime_28Cycles5 ((uint8_t)0x03)" +.LASF65: + .string "__UINT_FAST64_TYPE__ long long unsigned int" +.LASF1554: + .string "ADC_SQ14_1 ((uint32_t)0x00000040)" +.LASF3109: + .string "TIM_DBA_0 ((uint16_t)0x0001)" +.LASF2175: + .string "GPIO_CFGLR_MODE5 ((uint32_t)0x00300000)" +.LASF2559: + .string "AFIO_EXTICR4_EXTI15_PB ((uint16_t)0x1000)" +.LASF3981: + .string "TIM_CCx_Enable ((uint16_t)0x0001)" +.LASF780: + .string "__locks_shared(...) __lock_annotate(shared_lock_function(__VA_ARGS__))" +.LASF3189: + .string "WWDG_CTLR_T6 ((uint8_t)0x40)" +.LASF1316: + .string "GPIOC_BASE (APB2PERIPH_BASE + 0x1000)" +.LASF955: + .string "_SSIZE_T_DECLARED " +.LASF1135: + .string "rt_slist_tail_entry(ptr,type,member) rt_slist_entry(rt_slist_tail(ptr), type, member)" +.LASF149: + .string "__FLT_DIG__ 6" +.LASF3268: + .string "ADC_SampleTime_55Cycles5 ((uint8_t)0x05)" +.LASF2430: + .string "AFIO_PCFR1_SWJ_CFG_0 ((uint32_t)0x01000000)" +.LASF1576: + .string "ADC_SQ7_0 ((uint32_t)0x00000001)" +.LASF1232: + .string "INT_LEAST64_MAX (__INT_LEAST64_MAX__)" +.LASF4000: + .string "TIM_OCIdleState_Reset ((uint16_t)0x0000)" +.LASF256: + .string "__FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x" +.LASF716: + .string "__XSTRING(x) __STRING(x)" +.LASF4321: + .string "R16_UEP7_DMA (*((PUINT16V)(0x4002342c)))" +.LASF2739: + .string "RCC_PLLMULL6 ((uint32_t)0x00100000)" +.LASF2850: + .string "RTC_CTLRL_OWF ((uint8_t)0x04)" +.LASF2996: + .string "TIM_CC1S_0 ((uint16_t)0x0001)" +.LASF126: + .string "__UINT64_C(c) c ## ULL" +.LASF3184: + .string "WWDG_CTLR_T1 ((uint8_t)0x02)" +.LASF597: + .string "_END_STD_C " +.LASF2787: + .string "RCC_IOPERST ((uint32_t)0x00000040)" +.LASF951: + .string "_UID_T_DECLARED " +.LASF2001: + .string "EXTI_INTENR_MR14 ((uint32_t)0x00004000)" +.LASF4424: + .string "USB_REQ_RECIP_DEVICE 0x00" +.LASF2666: + .string "RCC_HSICAL ((uint32_t)0x0000FF00)" +.LASF1267: + .string "UINTMAX_C(x) __UINTMAX_C(x)" +.LASF1137: + .string "RTM_EXPORT(symbol) " +.LASF2388: + .string "AFIO_PCFR1_I2C1_REMAP ((uint32_t)0x00000002)" +.LASF3737: + .string "PWR_FLAG_SB ((uint32_t)0x00000002)" +.LASF4243: + .string "RB_UIE_SUSPEND 0x04" +.LASF2022: + .string "EXTI_EVENR_MR15 ((uint32_t)0x00008000)" +.LASF2750: + .string "RCC_USBPRE ((uint32_t)0x00400000)" +.LASF2458: + .string "AFIO_EXTICR1_EXTI2_PD ((uint16_t)0x0300)" +.LASF2274: + .string "GPIO_INDR_IDR15 ((uint16_t)0x8000)" +.LASF864: + .string "_REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_new._reent._mbsrtowcs_state)" +.LASF180: + .string "__LDBL_MAX_EXP__ 16384" +.LASF383: + .string "RT_ASSERT(EX) if (!(EX)) { rt_assert_handler(#EX, __FUNCTION__, __LINE__); }" +.LASF4355: + .string "R8_UH_RX_CTRL R8_UEP2_CTRL" +.LASF4735: + .string "FIBADDRR" +.LASF2450: + .string "AFIO_EXTICR1_EXTI1_PC ((uint16_t)0x0020)" +.LASF2440: + .string "AFIO_EXTICR1_EXTI3 ((uint16_t)0xF000)" +.LASF2633: + .string "I2C_STAR2_SMBDEFAULT ((uint16_t)0x0020)" +.LASF306: + .string "__riscv_div 1" +.LASF3121: + .string "USART_STATR_PE ((uint16_t)0x0001)" +.LASF1374: + .string "BKP ((BKP_TypeDef *) BKP_BASE)" +.LASF880: + .string "CLOCKS_PER_SEC _CLOCKS_PER_SEC_" +.LASF3895: + .string "SPI_BaudRatePrescaler_16 ((uint16_t)0x0018)" +.LASF942: + .string "__time_t_defined " +.LASF3757: + .string "RCC_PLLMul_13 ((uint32_t)0x002C0000)" +.LASF869: + .string "_REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))" +.LASF3175: + .string "USART_GPR_PSC_2 ((uint16_t)0x0004)" +.LASF3263: + .string "ADC_SampleTime_1Cycles5 ((uint8_t)0x00)" +.LASF682: + .string "__bounded " +.LASF1376: + .string "DAC ((DAC_TypeDef *) DAC_BASE)" +.LASF3280: + .string "ADC_InjectedChannel_2 ((uint8_t)0x18)" +.LASF237: + .string "__FLT32X_MAX_EXP__ 1024" +.LASF758: + .string "__weak_reference(sym,alias) __asm__(\".weak \" #alias); __asm__(\".equ \" #alias \", \" #sym)" +.LASF4309: + .string "R8_UEP7_MOD (*((PUINT8V)(0x4002340f)))" +.LASF3139: + .string "USART_CTLR1_RXNEIE ((uint16_t)0x0020)" +.LASF1281: + .string "HSE_Value HSE_VALUE" +.LASF2751: + .string "RCC_CFGR0_MCO ((uint32_t)0x07000000)" +.LASF4349: + .string "R32_USB_EP2_CTRL (*((PUINT32V)(0x40023438)))" +.LASF366: + .string "BSP_USING_UART_CONSOLE " +.LASF111: + .string "__INT16_C(c) c" +.LASF1446: + .string "ADC_DUALMOD_3 ((uint32_t)0x00080000)" +.LASF4698: + .string "RCC_IRQn" +.LASF107: + .string "__INT_LEAST8_MAX__ 0x7f" +.LASF659: + .string "_WCHAR_T_DEFINED " +.LASF2681: + .string "RCC_SWS_1 ((uint32_t)0x00000008)" +.LASF1177: + .string "long" +.LASF835: + .string "_N_LISTS 30" +.LASF2108: + .string "FLASH_ACTLR_LATENCY_0 ((uint8_t)0x00)" +.LASF2525: + .string "AFIO_EXTICR3_EXTI10_PG ((uint16_t)0x0600)" +.LASF4204: + .string "__CH32V10x_WWDG_H " +.LASF3386: + .string "DMA1_IT_HT1 ((uint32_t)0x00000004)" +.LASF1826: + .string "DMA_CHTIF4 ((uint32_t)0x00004000)" +.LASF2113: + .string "FLASH_ACTLR_PRFTBS ((uint8_t)0x20)" +.LASF2245: + .string "GPIO_CFGHR_CNF11_0 ((uint32_t)0x00004000)" +.LASF2407: + .string "AFIO_PCFR1_TIM2_REMAP_PARTIALREMAP1 ((uint32_t)0x00000100)" +.LASF4453: + .string "USB_DESCR_TYP_STRING 0x03" +.LASF2183: + .string "GPIO_CFGLR_MODE7_1 ((uint32_t)0x20000000)" +.LASF186: + .string "__LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L" +.LASF4790: + .string "rt_hw_stack_frame" +.LASF3874: + .string "RTC_FLAG_OW ((uint16_t)0x0004)" +.LASF1308: + .string "I2C2_BASE (APB1PERIPH_BASE + 0x5800)" +.LASF2823: + .string "RCC_USBEN ((uint32_t)0x00800000)" +.LASF4451: + .string "USB_DESCR_TYP_DEVICE 0x01" +.LASF3856: + .string "RCC_FLAG_HSERDY ((uint8_t)0x31)" +.LASF4378: + .string "R8_UEP7_CTRL (*((PUINT8V)(0x4002344e)))" +.LASF1686: + .string "BKP_DATAR7_D ((uint16_t)0xFFFF)" +.LASF1863: + .string "DMA_CFGR2_CIRC ((uint16_t)0x0020)" +.LASF2767: + .string "RCC_LSERDYIE ((uint32_t)0x00000200)" +.LASF2240: + .string "GPIO_CFGHR_CNF9_1 ((uint32_t)0x00000080)" +.LASF4115: + .string "TIM_SlaveMode_Trigger ((uint16_t)0x0006)" +.LASF1314: + .string "GPIOA_BASE (APB2PERIPH_BASE + 0x0800)" +.LASF4447: + .string "HUB_C_PORT_ENABLE 17" +.LASF1430: + .string "ADC_EOCIE ((uint32_t)0x00000020)" +.LASF3127: + .string "USART_STATR_TC ((uint16_t)0x0040)" +.LASF766: + .string "__COPYRIGHT(s) struct __hack" +.LASF2863: + .string "SPI_CTLR1_CPOL ((uint16_t)0x0002)" +.LASF64: + .string "__UINT_FAST32_TYPE__ unsigned int" +.LASF1309: + .string "BKP_BASE (APB1PERIPH_BASE + 0x6C00)" +.LASF1450: + .string "ADC_CONT ((uint32_t)0x00000002)" +.LASF1124: + .string "rt_list_entry(node,type,member) rt_container_of(node, type, member)" +.LASF2462: + .string "AFIO_EXTICR1_EXTI3_PA ((uint16_t)0x0000)" +.LASF50: + .string "__INT_LEAST8_TYPE__ signed char" +.LASF1924: + .string "DMA_CFG5_MSIZE_0 ((uint16_t)0x0400)" +.LASF3590: + .string "GPIO_FullRemap_TIM2 ((uint32_t)0x00180300)" +.LASF1760: + .string "DAC_WAVE2_0 ((uint32_t)0x00400000)" +.LASF1586: + .string "ADC_SQ8_4 ((uint32_t)0x00000200)" +.LASF2333: + .string "GPIO_BCR_BR10 ((uint16_t)0x0400)" +.LASF327: + .string "IDLE_THREAD_STACK_SIZE 256" +.LASF1258: + .string "INT8_C(x) __INT8_C(x)" +.LASF2905: + .string "SPI_I2SCFGR_PCMSYNC ((uint16_t)0x0080)" +.LASF2903: + .string "SPI_I2SCFGR_I2SSTD_0 ((uint16_t)0x0010)" +.LASF723: + .string "__unused __attribute__((__unused__))" +.LASF1666: + .string "ADC_JSQ4_0 ((uint32_t)0x00008000)" +.LASF625: + .string "__PTRDIFF_T " +.LASF235: + .string "__FLT32X_MIN_EXP__ (-1021)" +.LASF2168: + .string "GPIO_CFGLR_MODE2_1 ((uint32_t)0x00000200)" +.LASF3504: + .string "FLASH_Latency_2 ((uint32_t)0x00000002)" +.LASF498: + .string "RT_DEVICE_FLAG_REMOVABLE 0x004" +.LASF2599: + .string "I2C_OADDR1_ADD1_7 ((uint16_t)0x00FE)" +.LASF3353: + .string "DBGMCU_TIM1_STOP ((uint32_t)0x00000010)" +.LASF2513: + .string "AFIO_EXTICR3_EXTI9_PB ((uint16_t)0x0010)" +.LASF613: + .string "___int64_t_defined 1" +.LASF1677: + .string "ADC_IDATAR4_JDATA ((uint16_t)0xFFFF)" +.LASF3860: + .string "RCC_FLAG_PINRST ((uint8_t)0x7A)" +.LASF2612: + .string "I2C_OADDR2_ENDUAL ((uint8_t)0x01)" +.LASF4716: + .string "TIM1_CC_IRQn" +.LASF299: + .string "__SIZEOF_WCHAR_T__ 4" +.LASF3016: + .string "TIM_IC1PSC_0 ((uint16_t)0x0004)" +.LASF2187: + .string "GPIO_CFGLR_CNF0_1 ((uint32_t)0x00000008)" +.LASF2531: + .string "AFIO_EXTICR3_EXTI11_PF ((uint16_t)0x5000)" +.LASF2589: + .string "I2C_CTLR2_FREQ_1 ((uint16_t)0x0002)" +.LASF4266: + .string "RB_UIF_SUSPEND 0x04" +.LASF2279: + .string "GPIO_OUTDR_ODR4 ((uint16_t)0x0010)" +.LASF4712: + .string "EXTI9_5_IRQn" +.LASF1854: + .string "DMA_CFGR1_PL ((uint16_t)0x3000)" +.LASF1995: + .string "EXTI_INTENR_MR8 ((uint32_t)0x00000100)" +.LASF1923: + .string "DMA_CFG5_MSIZE ((uint16_t)0x0C00)" +.LASF4227: + .string "RB_UD_DM_PIN 0x10" +.LASF1233: + .string "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)" +.LASF4117: + .string "TIM_MasterSlaveMode_Enable ((uint16_t)0x0080)" +.LASF1067: + .string "O_NOCTTY _FNOCTTY" +.LASF2053: + .string "EXTI_FTENR_TR6 ((uint32_t)0x00000040)" +.LASF3665: + .string "I2C_IT_BERR ((uint32_t)0x01000100)" +.LASF3125: + .string "USART_STATR_IDLE ((uint16_t)0x0010)" +.LASF2735: + .string "RCC_PLLMULL2 ((uint32_t)0x00000000)" +.LASF362: + .string "RT_SERIAL_RB_BUFSZ 64" +.LASF3503: + .string "FLASH_Latency_1 ((uint32_t)0x00000001)" +.LASF3658: + .string "I2C_IT_ERR ((uint16_t)0x0100)" +.LASF4511: + .string "pEP7_OUT_DataBuf (pEP7_RAM_Addr)" +.LASF1085: + .string "FNONBLOCK _FNONBLOCK" +.LASF3760: + .string "RCC_PLLMul_16 ((uint32_t)0x00380000)" +.LASF2844: + .string "RCC_LPWRRSTF ((uint32_t)0x80000000)" +.LASF952: + .string "_GID_T_DECLARED " +.LASF4344: + .string "UEP_T_RES_NAK 0x02" +.LASF1399: + .string "DMA1 ((DMA_TypeDef *) DMA1_BASE)" +.LASF3573: + .string "GPIO_Pin_10 ((uint16_t)0x0400)" +.LASF2714: + .string "RCC_PPRE2_DIV4 ((uint32_t)0x00002800)" +.LASF3994: + .string "TIM_LOCKLevel_3 ((uint16_t)0x0300)" +.LASF1440: + .string "ADC_DISCNUM_1 ((uint32_t)0x00004000)" +.LASF3526: + .string "FLASH_WRProt_Pages68to71 ((uint32_t)0x00020000)" +.LASF4082: + .string "TIM_PSCReloadMode_Update ((uint16_t)0x0000)" +.LASF2420: + .string "AFIO_PCFR1_CAN_REMAP_REMAP1 ((uint32_t)0x00000000)" +.LASF2194: + .string "GPIO_CFGLR_CNF3 ((uint32_t)0x0000C000)" +.LASF225: + .string "__FLT128_DECIMAL_DIG__ 36" +.LASF2990: + .string "TIM_CC3G ((uint8_t)0x08)" +.LASF769: + .string "__DEQUALIFY(type,var) ((type)(__uintptr_t)(const volatile void *)(var))" +.LASF4381: + .string "USB_PID_SOF 0x05" +.LASF3094: + .string "TIM_DTG_3 ((uint16_t)0x0008)" +.LASF4621: + .string "_reent" +.LASF397: + .string "RT_SEM_VALUE_MAX RT_UINT16_MAX" +.LASF3608: + .string "GPIO_PortSourceGPIOC ((uint8_t)0x02)" +.LASF73: + .string "__INT_MAX__ 0x7fffffff" +.LASF3506: + .string "FLASH_HalfCycleAccess_Disable ((uint32_t)0x00000000)" +.LASF4339: + .string "RB_UEP_T_RES1 0x02" +.LASF3011: + .string "TIM_OC2M_0 ((uint16_t)0x1000)" +.LASF4121: + .string "TIM_FLAG_CC2 ((uint16_t)0x0004)" +.LASF3128: + .string "USART_STATR_TXE ((uint16_t)0x0080)" +.LASF465: + .string "RT_TIMER_SKIP_LIST_MASK 0x3" +.LASF2644: + .string "PWR_CTLR_CSBF ((uint16_t)0x0008)" +.LASF3690: + .string "I2C_FLAG_ADD10 ((uint32_t)0x10000008)" +.LASF4616: + .string "_offset" +.LASF1838: + .string "DMA_CHTIF7 ((uint32_t)0x04000000)" +.LASF4721: + .string "I2C1_ER_IRQn" +.LASF136: + .string "__UINT_FAST16_MAX__ 0xffffffffU" +.LASF698: + .string "__GNUCLIKE_BUILTIN_STDARG 1" +.LASF2345: + .string "GPIO_LCK6 ((uint32_t)0x00000040)" +.LASF1479: + .string "ADC_SMP12_2 ((uint32_t)0x00000100)" +.LASF2302: + .string "GPIO_BSHR_BS11 ((uint32_t)0x00000800)" +.LASF1847: + .string "DMA_CFGR1_MINC ((uint16_t)0x0080)" +.LASF1600: + .string "ADC_SQ11_0 ((uint32_t)0x00100000)" +.LASF3082: + .string "TIM_CNT ((uint16_t)0xFFFF)" +.LASF4767: + .string "DeviceStatus" +.LASF4016: + .string "TIM_IT_CC3 ((uint16_t)0x0008)" +.LASF1917: + .string "DMA_CFG5_CIRC ((uint16_t)0x0020)" +.LASF468: + .string "RT_THREAD_SUSPEND 0x02" +.LASF1767: + .string "DAC_DMAEN2 ((uint32_t)0x10000000)" +.LASF3601: + .string "GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400)" +.LASF4676: + .string "_global_impure_ptr" +.LASF680: + .string "__attribute_format_strfmon__(a,b) " +.LASF2382: + .string "AFIO_ECR_PORT_PB ((uint8_t)0x10)" +.LASF379: + .string "RT_DEBUG_IPC 0" +.LASF3293: + .string "ADC_FLAG_AWD ((uint8_t)0x01)" +.LASF3155: + .string "USART_CTLR2_CLKEN ((uint16_t)0x0800)" +.LASF3093: + .string "TIM_DTG_2 ((uint16_t)0x0004)" +.LASF1673: + .string "ADC_JL_1 ((uint32_t)0x00200000)" +.LASF4182: + .string "USART_IT_ORE_ER ((uint16_t)0x0360)" +.LASF1225: + .string "INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)" +.LASF189: + .string "__LDBL_HAS_INFINITY__ 1" +.LASF4666: + .string "_mbsrtowcs_state" +.LASF1209: + .string "UINTPTR_MAX (__UINTPTR_MAX__)" +.LASF2873: + .string "SPI_CTLR1_RXONLY ((uint16_t)0x0400)" +.LASF20: + .string "__SIZEOF_SHORT__ 2" +.LASF2785: + .string "RCC_SPI1RST ((uint32_t)0x00001000)" +.LASF1681: + .string "BKP_DATAR2_D ((uint16_t)0xFFFF)" +.LASF1993: + .string "EXTI_INTENR_MR6 ((uint32_t)0x00000040)" +.LASF4064: + .string "TIM_DMA_Trigger ((uint16_t)0x4000)" +.LASF3699: + .string "I2C_EVENT_MASTER_BYTE_TRANSMITTING ((uint32_t)0x00070080)" +.LASF887: + .string "__int8_t_defined 1" +.LASF402: + .string "_STDARG_H " +.LASF2216: + .string "GPIO_CFGHR_MODE10 ((uint32_t)0x00000300)" +.LASF1504: + .string "ADC_SMP1 ((uint32_t)0x00000038)" +.LASF36: + .string "__WINT_TYPE__ unsigned int" +.LASF3861: + .string "RCC_FLAG_PORRST ((uint8_t)0x7B)" +.LASF2364: + .string "AFIO_ECR_PIN_PX3 ((uint8_t)0x03)" +.LASF1596: + .string "ADC_SQ10_2 ((uint32_t)0x00020000)" +.LASF4164: + .string "USART_HardwareFlowControl_RTS_CTS ((uint16_t)0x0300)" +.LASF3723: + .string "__CH32V10x_PWR_H " +.LASF4532: + .string "ROOT_DEV_FAILED 2" +.LASF1330: + .string "TIM17_BASE (APB2PERIPH_BASE + 0x4800)" +.LASF1877: + .string "DMA_CFGR3_TCIE ((uint16_t)0x0002)" +.LASF113: + .string "__INT_LEAST32_MAX__ 0x7fffffffL" +.LASF561: + .string "_WIDE_ORIENT 1" +.LASF989: + .string "CLOCK_REALTIME (clockid_t)1" +.LASF4356: + .string "RB_UH_R_TOG 0x80" +.LASF2185: + .string "GPIO_CFGLR_CNF0 ((uint32_t)0x0000000C)" +.LASF1816: + .string "DMA_CGIF2 ((uint32_t)0x00000010)" +.LASF1926: + .string "DMA_CFG5_PL ((uint16_t)0x3000)" +.LASF3341: + .string "BKP_DR37 ((uint16_t)0x00A8)" +.LASF2156: + .string "FLASH_WRPR2_nWRPR2 ((uint32_t)0x0000FF00)" +.LASF3883: + .string "SPI_Mode_Slave ((uint16_t)0x0000)" +.LASF2129: + .string "FLASH_CTLR_EOPIE ((uint16_t)0x1000)" +.LASF2158: + .string "FLASH_WRPR3_nWRPR3 ((uint32_t)0xFF000000)" +.LASF151: + .string "__FLT_MIN_10_EXP__ (-37)" +.LASF511: + .string "RT_DEVICE_OFLAG_OPEN 0x008" +.LASF42: + .string "__INT8_TYPE__ signed char" +.LASF1385: + .string "GPIOG ((GPIO_TypeDef *) GPIOG_BASE)" +.LASF1306: + .string "UART5_BASE (APB1PERIPH_BASE + 0x5000)" +.LASF3973: + .string "TIM_OCPolarity_High ((uint16_t)0x0000)" +.LASF3182: + .string "WWDG_CTLR_T ((uint8_t)0x7F)" +.LASF1655: + .string "ADC_JSQ2_1 ((uint32_t)0x00000040)" +.LASF3448: + .string "DMA1_FLAG_GL5 ((uint32_t)0x00010000)" +.LASF1723: + .string "BKP_CCO ((uint16_t)0x0080)" +.LASF4638: + .string "_new" +.LASF1413: + .string "RCC ((RCC_TypeDef *) RCC_BASE)" +.LASF2226: + .string "GPIO_CFGHR_MODE13_0 ((uint32_t)0x00100000)" +.LASF933: + .string "__u_char_defined " +.LASF3233: + .string "ADC_ExternalTrigConv_T1_CC1 ((uint32_t)0x00000000)" +.LASF1578: + .string "ADC_SQ7_2 ((uint32_t)0x00000004)" +.LASF517: + .string "RT_DEVICE_CTRL_SET_INT 0x10" +.LASF3744: + .string "RCC_PLLSource_HSE_Div1 ((uint32_t)0x00010000)" +.LASF1357: + .string "TIM5 ((TIM_TypeDef *) TIM5_BASE)" +.LASF4047: + .string "TIM_DMABurstLength_8Transfers ((uint16_t)0x0700)" +.LASF3451: + .string "DMA1_FLAG_TE5 ((uint32_t)0x00080000)" +.LASF3979: + .string "TIM_OutputNState_Disable ((uint16_t)0x0000)" +.LASF2731: + .string "RCC_PLLSRC_HSI_Div2 ((uint32_t)0x00000000)" +.LASF3460: + .string "DMA2_FLAG_GL1 ((uint32_t)0x10000001)" +.LASF3885: + .string "SPI_DataSize_8b ((uint16_t)0x0000)" +.LASF2977: + .string "TIM_CC2IF ((uint16_t)0x0004)" +.LASF527: + .string "RT_DEVICE_CTRL_CURSOR_SET_POSITION 0x10" +.LASF2488: + .string "AFIO_EXTICR2_EXTI6_PB ((uint16_t)0x0100)" +.LASF3521: + .string "FLASH_WRProt_Pages48to51 ((uint32_t)0x00001000)" +.LASF2707: + .string "RCC_PPRE1_DIV16 ((uint32_t)0x00000700)" +.LASF3289: + .string "ADC_AnalogWatchdog_None ((uint32_t)0x00000000)" +.LASF1630: + .string "ADC_SQ4_0 ((uint32_t)0x00008000)" +.LASF2689: + .string "RCC_HPRE_3 ((uint32_t)0x00000080)" +.LASF4739: + .string "FIOFADDRR" +.LASF4048: + .string "TIM_DMABurstLength_9Transfers ((uint16_t)0x0800)" +.LASF2157: + .string "FLASH_WRPR3_WRPR3 ((uint32_t)0x00FF0000)" +.LASF760: + .string "__sym_compat(sym,impl,verid) __asm__(\".symver \" #impl \", \" #sym \"@\" #verid)" +.LASF718: + .string "__signed signed" +.LASF1278: + .string "SysTick ((SysTick_Type *) 0xE000F000)" +.LASF3274: + .string "ADC_ExternalTrigInjecConv_T4_TRGO ((uint32_t)0x00005000)" +.LASF1629: + .string "ADC_SQ4 ((uint32_t)0x000F8000)" +.LASF1807: + .string "DMA_TEIF6 ((uint32_t)0x00800000)" +.LASF2892: + .string "SPI_STATR_BSY ((uint8_t)0x80)" +.LASF2771: + .string "RCC_LSIRDYC ((uint32_t)0x00010000)" +.LASF2896: + .string "SPI_TCRCR_TXCRC ((uint16_t)0xFFFF)" +.LASF1334: + .string "DMA1_BASE (AHBPERIPH_BASE + 0x0000)" +.LASF3391: + .string "DMA1_IT_TE2 ((uint32_t)0x00000080)" +.LASF2661: + .string "PWR_CSR_PVDO ((uint16_t)0x0004)" +.LASF2846: + .string "RTC_CTLRH_ALRIE ((uint8_t)0x02)" +.LASF2810: + .string "RCC_IOPDEN ((uint32_t)0x00000020)" +.LASF2334: + .string "GPIO_BCR_BR11 ((uint16_t)0x0800)" +.LASF3954: + .string "TIM_OCMode_Active ((uint16_t)0x0010)" +.LASF3265: + .string "ADC_SampleTime_13Cycles5 ((uint8_t)0x02)" +.LASF3180: + .string "USART_GPR_PSC_7 ((uint16_t)0x0080)" +.LASF3984: + .string "TIM_CCxN_Disable ((uint16_t)0x0000)" +.LASF2247: + .string "GPIO_CFGHR_CNF12 ((uint32_t)0x000C0000)" +.LASF2818: + .string "RCC_WWDGEN ((uint32_t)0x00000800)" +.LASF649: + .string "__need_size_t" +.LASF589: + .string "_READ_WRITE_RETURN_TYPE _ssize_t" +.LASF724: + .string "__used __attribute__((__used__))" +.LASF2942: + .string "TIM_SMS_0 ((uint16_t)0x0001)" +.LASF218: + .string "__FLT64_HAS_QUIET_NAN__ 1" +.LASF3135: + .string "USART_CTLR1_RWU ((uint16_t)0x0002)" +.LASF2765: + .string "RCC_CSSF ((uint32_t)0x00000080)" +.LASF2898: + .string "SPI_I2SCFGR_DATLEN ((uint16_t)0x0006)" +.LASF124: + .string "__UINT32_C(c) c ## UL" +.LASF2621: + .string "I2C_STAR1_TXE ((uint16_t)0x0080)" +.LASF1263: + .string "UINT32_C(x) __UINT32_C(x)" +.LASF2020: + .string "EXTI_EVENR_MR13 ((uint32_t)0x00002000)" +.LASF2068: + .string "EXTI_SWIEVR_SWIEVR1 ((uint32_t)0x00000002)" +.LASF4644: + .string "_glue" +.LASF220: + .string "__FLT128_DIG__ 33" +.LASF363: + .string "RT_USING_PIN " +.LASF3459: + .string "DMA1_FLAG_TE7 ((uint32_t)0x08000000)" +.LASF3551: + .string "FLASH_IT_BANK1_ERROR FLASH_IT_ERROR" +.LASF2951: + .string "TIM_ETF_0 ((uint16_t)0x0100)" +.LASF4779: + .string "pHOST_RX_RAM_Addr" +.LASF3781: + .string "RCC_IT_HSERDY ((uint8_t)0x08)" +.LASF4578: + .string "_next" +.LASF430: + .string "RT_EVENT_LENGTH 32" +.LASF4172: + .string "USART_LastBit_Enable ((uint16_t)0x0100)" +.LASF466: + .string "RT_THREAD_INIT 0x00" +.LASF3625: + .string "GPIO_PinSource12 ((uint8_t)0x0C)" +.LASF1416: + .string "OB ((OB_TypeDef *) OB_BASE)" +.LASF4017: + .string "TIM_IT_CC4 ((uint16_t)0x0010)" +.LASF4348: + .string "RB_UH_SOF_EN 0x40" +.LASF2190: + .string "GPIO_CFGLR_CNF1_1 ((uint32_t)0x00000080)" +.LASF2436: + .string "AFIO_PCFR1_SWJ_CFG_DISABLE ((uint32_t)0x04000000)" +.LASF3603: + .string "GPIO_Remap_TIM1_DMA ((uint32_t)0x80000010)" +.LASF987: + .string "CLOCK_ALLOWED 1" +.LASF3482: + .string "EXTI_Line1 ((uint32_t)0x00002)" +.LASF4027: + .string "TIM_DMABase_CCMR1 ((uint16_t)0x0006)" +.LASF3396: + .string "DMA1_IT_GL4 ((uint32_t)0x00001000)" +.LASF345: + .string "RT_USING_USER_MAIN " +.LASF588: + .string "__SSP_FORTIFY_LEVEL 0" +.LASF3440: + .string "DMA1_FLAG_GL3 ((uint32_t)0x00000100)" +.LASF313: + .string "__RTTHREAD__ 1" +.LASF380: + .string "RT_DEBUG_INIT 0" +.LASF434: + .string "RT_KERNEL_MALLOC(sz) rt_malloc(sz)" +.LASF999: + .string "S_BLKSIZE 1024" +.LASF1075: + .string "FWRITE _FWRITE" +.LASF4441: + .string "HUB_PORT_SUSPEND 2" +.LASF4392: + .string "USB_CLEAR_FEATURE 0x01" +.LASF1373: + .string "I2C2 ((I2C_TypeDef *) I2C2_BASE)" +.LASF3950: + .string "SPI_I2S_FLAG_OVR ((uint16_t)0x0040)" +.LASF1608: + .string "ADC_SQ12_2 ((uint32_t)0x08000000)" +.LASF4697: + .string "FLASH_IRQn" +.LASF300: + .string "__SIZEOF_WINT_T__ 4" +.LASF787: + .string "__requires_shared(...) __lock_annotate(shared_locks_required(__VA_ARGS__))" +.LASF4468: + .string "USB_DEV_CLASS_HID 0x03" +.LASF239: + .string "__FLT32X_DECIMAL_DIG__ 17" +.LASF3438: + .string "DMA1_FLAG_HT2 ((uint32_t)0x00000040)" +.LASF4308: + .string "RB_UEP5_BUF_MOD 0x01" +.LASF4620: + .string "_flags2" +.LASF1920: + .string "DMA_CFG5_PSIZE ((uint16_t)0x0300)" +.LASF340: + .string "RT_USING_CONSOLE " +.LASF4269: + .string "RB_UIF_BUS_RST 0x01" +.LASF307: + .string "__riscv_muldiv 1" +.LASF3907: + .string "I2S_Standard_MSB ((uint16_t)0x0010)" +.LASF524: + .string "RT_DEVICE_CTRL_BLK_AUTOREFRESH 0x13" +.LASF1899: + .string "DMA_CFG4_CIRC ((uint16_t)0x0020)" +.LASF512: + .string "RT_DEVICE_OFLAG_MASK 0xf0f" +.LASF4146: + .string "TIM_DMABurstLength_16Bytes TIM_DMABurstLength_16Transfers" +.LASF4762: + .string "pEP3_RAM_Addr" +.LASF3073: + .string "TIM_CC2NE ((uint16_t)0x0040)" +.LASF3937: + .string "SPI_I2S_IT_TXE ((uint8_t)0x71)" +.LASF4537: + .string "DEV_TYPE_UNKNOW 0xFF" +.LASF459: + .string "RT_TIMER_CTRL_SET_TIME 0x0" +.LASF3203: + .string "WWDG_STATR_EWIF ((uint8_t)0x01)" +.LASF2013: + .string "EXTI_EVENR_MR6 ((uint32_t)0x00000040)" +.LASF3340: + .string "BKP_DR36 ((uint16_t)0x00A4)" +.LASF2734: + .string "RCC_PLLXTPRE_HSE_Div2 ((uint32_t)0x00020000)" +.LASF1817: + .string "DMA_CTCIF2 ((uint32_t)0x00000020)" +.LASF697: + .string "__GNUCLIKE_BUILTIN_VARARGS 1" +.LASF3643: + .string "I2C_Register_OADDR1 ((uint8_t)0x08)" +.LASF4720: + .string "I2C1_EV_IRQn" +.LASF720: + .string "__weak_symbol __attribute__((__weak__))" +.LASF449: + .string "RT_ALIGN_DOWN(size,align) ((size) & ~((align) - 1))" +.LASF39: + .string "__CHAR16_TYPE__ short unsigned int" +.LASF1798: + .string "DMA_HTIF4 ((uint32_t)0x00004000)" +.LASF2285: + .string "GPIO_OUTDR_ODR10 ((uint16_t)0x0400)" +.LASF3165: + .string "USART_CTLR3_SCEN ((uint16_t)0x0020)" +.LASF3938: + .string "SPI_I2S_IT_RXNE ((uint8_t)0x60)" +.LASF4101: + .string "TIM_OCFast_Enable ((uint16_t)0x0004)" +.LASF104: + .string "__UINT16_MAX__ 0xffff" +.LASF1628: + .string "ADC_SQ3_4 ((uint32_t)0x00004000)" +.LASF1488: + .string "ADC_SMP15 ((uint32_t)0x00038000)" +.LASF483: + .string "RT_THREAD_CTRL_INFO 0x03" +.LASF4513: + .string "EP1_GetINSta() (R8_UEP1_CTRL&UEP_T_RES_NAK)" +.LASF3087: + .string "TIM_CCR2 ((uint16_t)0xFFFF)" +.LASF1951: + .string "DMA_CFG7_TEIE ((uint16_t)0x0008)" +.LASF251: + .string "__FLT64X_MAX_EXP__ 16384" +.LASF3933: + .string "SPI_CRC_Tx ((uint8_t)0x00)" +.LASF1497: + .string "ADC_SMP17_0 ((uint32_t)0x00200000)" +.LASF2721: + .string "RCC_ADCPRE_DIV4 ((uint32_t)0x00004000)" +.LASF3326: + .string "BKP_DR22 ((uint16_t)0x006C)" +.LASF850: + .string "_REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)" +.LASF4276: + .string "UIS_TOKEN_OUT 0x00" +.LASF2119: + .string "FLASH_STATR_EOP ((uint8_t)0x20)" +.LASF2957: + .string "TIM_ETPS_1 ((uint16_t)0x2000)" +.LASF1498: + .string "ADC_SMP17_1 ((uint32_t)0x00400000)" +.LASF3: + .string "__STDC_UTF_32__ 1" +.LASF1406: + .string "DMA1_Channel6 ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE)" +.LASF559: + .string "_FVWRITE_IN_STREAMIO 1" +.LASF3119: + .string "TIM_DBL_4 ((uint16_t)0x1000)" +.LASF2545: + .string "AFIO_EXTICR4_EXTI13_PB ((uint16_t)0x0010)" +.LASF566: + .string "__OBSOLETE_MATH_DEFAULT 1" +.LASF2999: + .string "TIM_OC1PE ((uint16_t)0x0008)" +.LASF4226: + .string "RB_UD_DP_PIN 0x20" +.LASF3708: + .string "I2C_EVENT_SLAVE_BYTE_TRANSMITTED ((uint32_t)0x00060084)" +.LASF1619: + .string "ADC_SQ2_1 ((uint32_t)0x00000040)" +.LASF3380: + .string "DMA_M2M_Disable ((uint32_t)0x00000000)" +.LASF3417: + .string "DMA2_IT_TC2 ((uint32_t)0x10000020)" +.LASF474: + .string "RT_THREAD_STAT_YIELD_MASK RT_THREAD_STAT_YIELD" +.LASF2445: + .string "AFIO_EXTICR1_EXTI0_PE ((uint16_t)0x0004)" +.LASF458: + .string "RT_TIMER_FLAG_SOFT_TIMER 0x4" +.LASF3568: + .string "GPIO_Pin_5 ((uint16_t)0x0020)" +.LASF4603: + .string "_size" +.LASF1784: + .string "DMA_GIF1 ((uint32_t)0x00000001)" +.LASF410: + .string "__va_copy(d,s) __builtin_va_copy(d,s)" +.LASF2432: + .string "AFIO_PCFR1_SWJ_CFG_2 ((uint32_t)0x04000000)" +.LASF696: + .string "__GNUCLIKE_BUILTIN_CONSTANT_P 1" +.LASF3808: + .string "RCC_APB2Periph_GPIOD ((uint32_t)0x00000020)" +.LASF969: + .string "SCHED_RR 2" +.LASF217: + .string "__FLT64_HAS_INFINITY__ 1" +.LASF946: + .string "_FSBLKCNT_T_DECLARED " +.LASF157: + .string "__FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F" +.LASF1199: + .string "__int_least8_t_defined 1" +.LASF232: + .string "__FLT128_HAS_QUIET_NAN__ 1" +.LASF1484: + .string "ADC_SMP14 ((uint32_t)0x00007000)" +.LASF3527: + .string "FLASH_WRProt_Pages72to75 ((uint32_t)0x00040000)" +.LASF714: + .string "__CONCAT(x,y) __CONCAT1(x,y)" +.LASF3216: + .string "EXTEN_SHORT_WAKE ((uint32_t)0x00008000)" +.LASF1353: + .string "EXTEN_BASE ((uint32_t)0x40023800)" +.LASF1961: + .string "DMA_CFG7_MSIZE_1 ((uint16_t)0x0800)" +.LASF1974: + .string "DMA_PADDR2_PA ((uint32_t)0xFFFFFFFF)" +.LASF616: + .string "___int_least32_t_defined 1" +.LASF1074: + .string "FREAD _FREAD" +.LASF3010: + .string "TIM_OC2M ((uint16_t)0x7000)" +.LASF3888: + .string "SPI_CPHA_1Edge ((uint16_t)0x0000)" +.LASF4587: + .string "__tm_mday" +.LASF2218: + .string "GPIO_CFGHR_MODE10_1 ((uint32_t)0x00000200)" +.LASF325: + .string "RT_USING_IDLE_HOOK " +.LASF1689: + .string "BKP_DATAR10_D ((uint16_t)0xFFFF)" +.LASF3403: + .string "DMA1_IT_TE5 ((uint32_t)0x00080000)" +.LASF3198: + .string "WWDG_CFGR_W6 ((uint16_t)0x0040)" +.LASF4149: + .string "__CH32V10x_USART_H " +.LASF2395: + .string "AFIO_PCFR1_USART3_REMAP_PARTIALREMAP ((uint32_t)0x00000010)" +.LASF3657: + .string "I2C_IT_EVT ((uint16_t)0x0200)" +.LASF4294: + .string "RB_UEP2_RX_EN 0x08" +.LASF4528: + .string "ERR_USB_UNKNOWN 0xFE" +.LASF2529: + .string "AFIO_EXTICR3_EXTI11_PD ((uint16_t)0x3000)" +.LASF413: + .string "_VA_LIST_DEFINED " +.LASF967: + .string "SCHED_OTHER 0" +.LASF1837: + .string "DMA_CTCIF7 ((uint32_t)0x02000000)" +.LASF4009: + .string "TIM_ICPSC_DIV1 ((uint16_t)0x0000)" +.LASF4228: + .string "RB_UD_LOW_SPEED 0x04" +.LASF4654: + .string "_localtime_buf" +.LASF1365: + .string "IWDG ((IWDG_TypeDef *) IWDG_BASE)" +.LASF4230: + .string "RB_UD_PORT_EN 0x01" +.LASF1266: + .string "INTMAX_C(x) __INTMAX_C(x)" +.LASF1872: + .string "DMA_CFGR2_PL ((uint16_t)0x3000)" +.LASF1548: + .string "ADC_SQ13_1 ((uint32_t)0x00000002)" +.LASF3319: + .string "BKP_DR15 ((uint16_t)0x0050)" +.LASF684: + .string "__ptrvalue " +.LASF4013: + .string "TIM_IT_Update ((uint16_t)0x0001)" +.LASF2645: + .string "PWR_CTLR_PVDE ((uint16_t)0x0010)" +.LASF2654: + .string "PWR_CTLR_PLS_2V6 ((uint16_t)0x0080)" +.LASF2182: + .string "GPIO_CFGLR_MODE7_0 ((uint32_t)0x10000000)" +.LASF3501: + .string "__CH32V10x_FLASH_H " +.LASF488: + .string "RT_IPC_CMD_RESET 0x01" +.LASF2128: + .string "FLASH_CTLR_ERRIE ((uint16_t)0x0400)" +.LASF3338: + .string "BKP_DR34 ((uint16_t)0x009C)" +.LASF4805: + .string "GNU C17 8.2.0 -march=rv32imac -mabi=ilp32 -msmall-data-limit= 8 -mno-save-restore -g3 -Os -O -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections" +.LASF2535: + .string "AFIO_EXTICR4_EXTI14 ((uint16_t)0x0F00)" +.LASF2468: + .string "AFIO_EXTICR1_EXTI3_PG ((uint16_t)0x6000)" +.LASF914: + .string "__bswap64(_x) __builtin_bswap64(_x)" +.LASF4298: + .string "RB_UH_EP_TX_EN 0x40" +.LASF2719: + .string "RCC_ADCPRE_1 ((uint32_t)0x00008000)" +.LASF2571: + .string "IWDG_PVU ((uint8_t)0x01)" +.LASF1178: + .string "signed +0" +.LASF538: + .string "RTGRAPHIC_CTRL_GET_STATUS 9" +.LASF3541: + .string "FLASH_WRProt_Pages62to255 ((uint32_t)0x80000000)" +.LASF1913: + .string "DMA_CFG5_TCIE ((uint16_t)0x0002)" +.LASF2604: + .string "I2C_OADDR1_ADD3 ((uint16_t)0x0008)" +.LASF1887: + .string "DMA_CFGR3_MSIZE ((uint16_t)0x0C00)" +.LASF2550: + .string "AFIO_EXTICR4_EXTI13_PG ((uint16_t)0x0060)" +.LASF4202: + .string "USART_FLAG_FE ((uint16_t)0x0002)" +.LASF1983: + .string "DMA_MADDR4_MA ((uint32_t)0xFFFFFFFF)" +.LASF4292: + .string "RB_UEP3_TX_EN 0x40" +.LASF3494: + .string "EXTI_Line13 ((uint32_t)0x02000)" +.LASF110: + .string "__INT_LEAST16_MAX__ 0x7fff" +.LASF3636: + .string "I2C_Ack_Disable ((uint16_t)0x0000)" +.LASF106: + .string "__UINT64_MAX__ 0xffffffffffffffffULL" +.LASF3943: + .string "I2S_IT_UDR ((uint8_t)0x53)" +.LASF4144: + .string "TIM_DMABurstLength_14Bytes TIM_DMABurstLength_14Transfers" +.LASF275: + .string "__DEC128_MANT_DIG__ 34" +.LASF948: + .string "_INO_T_DECLARED " +.LASF2131: + .string "FLASH_CTLR_PAGE_ER ((uint16_t)0x00020000)" +.LASF525: + .string "RT_DEVICE_CTRL_NETIF_GETMAC 0x10" +.LASF615: + .string "___int_least16_t_defined 1" +.LASF1053: + .string "_FSYNC 0x2000" +.LASF4480: + .string "USB_ENDP_TYPE_ISOCH 0x01" +.LASF1566: + .string "ADC_SQ16_1 ((uint32_t)0x00010000)" +.LASF891: + .string "_INT32_T_DECLARED " +.LASF3604: + .string "GPIO_Remap_TIM67_DAC_DMA ((uint32_t)0x80000800)" +.LASF1727: + .string "BKP_TPAL ((uint8_t)0x02)" +.LASF1592: + .string "ADC_SQ9_4 ((uint32_t)0x00004000)" +.LASF4592: + .string "__tm_isdst" +.LASF4010: + .string "TIM_ICPSC_DIV2 ((uint16_t)0x0004)" +.LASF890: + .string "__int16_t_defined 1" +.LASF1810: + .string "DMA_HTIF7 ((uint32_t)0x04000000)" +.LASF3879: + .string "SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400)" +.LASF351: + .string "FINSH_HISTORY_LINES 5" +.LASF3212: + .string "EXTEN_ULLDO_TRIM0 ((uint32_t)0x00000100)" +.LASF3275: + .string "ADC_ExternalTrigInjecConv_Ext_IT15_TIM8_CC4 ((uint32_t)0x00006000)" +.LASF3852: + .string "RCC_MCO_HSI ((uint8_t)0x05)" +.LASF1705: + .string "BKP_DATAR26_D ((uint16_t)0xFFFF)" +.LASF1364: + .string "WWDG ((WWDG_TypeDef *) WWDG_BASE)" +.LASF3430: + .string "DMA2_IT_HT5 ((uint32_t)0x10040000)" +.LASF1845: + .string "DMA_CFGR1_CIRC ((uint16_t)0x0020)" +.LASF1911: + .string "DMA_CFG4_MEM2MEM ((uint16_t)0x4000)" +.LASF3674: + .string "I2C_FLAG_SMBHOST ((uint32_t)0x00400000)" +.LASF870: + .string "_REENT_INIT_PTR(var) { memset((var), 0, sizeof(*(var))); _REENT_INIT_PTR_ZEROED(var); }" +.LASF4092: + .string "TIM_EventSource_CC3 ((uint16_t)0x0008)" +.LASF694: + .string "__GNUCLIKE___SECTION 1" +.LASF1276: + .string "NVIC_KEY2 ((uint32_t)0xBCAF0000)" +.LASF1827: + .string "DMA_CTEIF4 ((uint32_t)0x00008000)" +.LASF3770: + .string "RCC_SYSCLK_Div128 ((uint32_t)0x000000D0)" +.LASF1536: + .string "ADC_SMP9 ((uint32_t)0x38000000)" +.LASF462: + .string "RT_TIMER_CTRL_SET_PERIODIC 0x3" +.LASF1215: + .string "UINT_LEAST8_MAX (__UINT_LEAST8_MAX__)" +.LASF4494: + .string "USB_BO_CSW_SIG2 0x42" +.LASF2145: + .string "FLASH_USER_USER ((uint32_t)0x00FF0000)" +.LASF763: + .string "__RCSID(s) struct __hack" +.LASF2733: + .string "RCC_PLLXTPRE_HSE ((uint32_t)0x00000000)" +.LASF3804: + .string "RCC_APB2Periph_AFIO ((uint32_t)0x00000001)" +.LASF3873: + .string "RTC_FLAG_RSF ((uint16_t)0x0008)" +.LASF3617: + .string "GPIO_PinSource4 ((uint8_t)0x04)" +.LASF3564: + .string "GPIO_Pin_1 ((uint16_t)0x0002)" +.LASF665: + .string "_BSD_WCHAR_T_" +.LASF4724: + .string "SPI1_IRQn" +.LASF2356: + .string "AFIO_ECR_PIN ((uint8_t)0x0F)" +.LASF3324: + .string "BKP_DR20 ((uint16_t)0x0064)" +.LASF4088: + .string "TIM_EncoderMode_TI12 ((uint16_t)0x0003)" +.LASF1802: + .string "DMA_HTIF5 ((uint32_t)0x00040000)" +.LASF1511: + .string "ADC_SMP2_2 ((uint32_t)0x00000100)" +.LASF3029: + .string "TIM_IC2F_2 ((uint16_t)0x4000)" +.LASF3028: + .string "TIM_IC2F_1 ((uint16_t)0x2000)" +.LASF3213: + .string "EXTEN_ULLDO_TRIM1 ((uint32_t)0x00000200)" +.LASF1823: + .string "DMA_CTEIF3 ((uint32_t)0x00000800)" +.LASF2293: + .string "GPIO_BSHR_BS2 ((uint32_t)0x00000004)" +.LASF72: + .string "__SHRT_MAX__ 0x7fff" +.LASF4071: + .string "TIM_TS_ITR2 ((uint16_t)0x0020)" +.LASF1972: + .string "DMA_CNTR7_NDT ((uint16_t)0xFFFF)" +.LASF3307: + .string "BKP_DR3 ((uint16_t)0x000C)" +.LASF3689: + .string "I2C_FLAG_STOPF ((uint32_t)0x10000010)" +.LASF1444: + .string "ADC_DUALMOD_1 ((uint32_t)0x00020000)" +.LASF4421: + .string "USB_REQ_TYP_VENDOR 0x40" +.LASF4206: + .string "WWDG_Prescaler_2 ((uint32_t)0x00000080)" +.LASF2081: + .string "EXTI_SWIEVR_SWIEVR14 ((uint32_t)0x00004000)" +.LASF1344: + .string "DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C)" +.LASF2538: + .string "AFIO_EXTICR4_EXTI12_PB ((uint16_t)0x0001)" +.LASF3767: + .string "RCC_SYSCLK_Div8 ((uint32_t)0x000000A0)" +.LASF3288: + .string "ADC_AnalogWatchdog_AllRegAllInjecEnable ((uint32_t)0x00C00000)" +.LASF3158: + .string "USART_CTLR2_STOP_1 ((uint16_t)0x2000)" +.LASF2971: + .string "TIM_CC3DE ((uint16_t)0x0800)" +.LASF859: + .string "_REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)" +.LASF3335: + .string "BKP_DR31 ((uint16_t)0x0090)" +.LASF2919: + .string "TIM_CMS ((uint16_t)0x0060)" +.LASF1160: + .string "LOAD lw" +.LASF4749: + .string "IACTR" +.LASF75: + .string "__LONG_LONG_MAX__ 0x7fffffffffffffffLL" +.LASF3824: + .string "RCC_APB2Periph_TIM11 ((uint32_t)0x00200000)" +.LASF86: + .string "__LONG_LONG_WIDTH__ 64" +.LASF4195: + .string "USART_FLAG_LBD ((uint16_t)0x0100)" +.LASF2379: + .string "AFIO_ECR_PORT_1 ((uint8_t)0x20)" +.LASF46: + .string "__UINT8_TYPE__ unsigned char" +.LASF1491: + .string "ADC_SMP15_2 ((uint32_t)0x00020000)" +.LASF3685: + .string "I2C_FLAG_ARLO ((uint32_t)0x10000200)" +.LASF108: + .string "__INT8_C(c) c" +.LASF1192: + .string "__FAST16 " +.LASF1643: + .string "ADC_SQ6_1 ((uint32_t)0x04000000)" +.LASF4423: + .string "USB_REQ_RECIP_MASK 0x1F" +.LASF130: + .string "__INT_FAST16_WIDTH__ 32" +.LASF1352: + .string "DBGMCU_BASE ((uint32_t)0xE000D000)" +.LASF1324: + .string "SPI1_BASE (APB2PERIPH_BASE + 0x3000)" +.LASF2280: + .string "GPIO_OUTDR_ODR5 ((uint16_t)0x0020)" +.LASF132: + .string "__INT_FAST32_WIDTH__ 32" +.LASF2483: + .string "AFIO_EXTICR2_EXTI5_PD ((uint16_t)0x0030)" +.LASF4128: + .string "TIM_FLAG_CC2OF ((uint16_t)0x0400)" +.LASF783: + .string "__unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))" +.LASF2967: + .string "TIM_BIE ((uint16_t)0x0080)" +.LASF4707: + .string "DMA1_Channel4_IRQn" +.LASF290: + .string "__GCC_ATOMIC_WCHAR_T_LOCK_FREE 2" +.LASF2985: + .string "TIM_CC3OF ((uint16_t)0x0800)" +.LASF1794: + .string "DMA_HTIF3 ((uint32_t)0x00000400)" +.LASF4358: + .string "RB_UH_R_RES 0x04" +.LASF3359: + .string "DBGMCU_STANDBY ((uint32_t)0x00000004)" +.LASF4083: + .string "TIM_PSCReloadMode_Immediate ((uint16_t)0x0001)" +.LASF2499: + .string "AFIO_EXTICR2_EXTI7_PF ((uint16_t)0x5000)" +.LASF1220: + .string "INT_LEAST16_MAX (__INT_LEAST16_MAX__)" +.LASF241: + .string "__FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x" +.LASF226: + .string "__FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128" +.LASF4086: + .string "TIM_EncoderMode_TI1 ((uint16_t)0x0001)" +.LASF2508: + .string "AFIO_EXTICR3_EXTI8_PD ((uint16_t)0x0003)" +.LASF78: + .string "__WINT_MAX__ 0xffffffffU" +.LASF503: + .string "RT_DEVICE_FLAG_INT_RX 0x100" +.LASF924: + .string "fd_set _types_fd_set" +.LASF2210: + .string "GPIO_CFGHR_MODE8 ((uint32_t)0x00000003)" +.LASF4191: + .string "USART_LINBreakDetectLength_11b ((uint16_t)0x0020)" +.LASF101: + .string "__INT32_MAX__ 0x7fffffffL" +.LASF1070: + .string "FASYNC _FASYNC" +.LASF1463: + .string "ADC_EXTSEL_2 ((uint32_t)0x00080000)" +.LASF4049: + .string "TIM_DMABurstLength_10Transfers ((uint16_t)0x0900)" +.LASF756: + .string "__printf0like(fmtarg,firstvararg) " +.LASF4147: + .string "TIM_DMABurstLength_17Bytes TIM_DMABurstLength_17Transfers" +.LASF584: + .string "__MISC_VISIBLE 1" +.LASF2238: + .string "GPIO_CFGHR_CNF9 ((uint32_t)0x000000C0)" +.LASF2046: + .string "EXTI_RTENR_TR19 ((uint32_t)0x00080000)" +.LASF4370: + .string "R32_USB_EP5_CTRL (*((PUINT32V)(0x40023444)))" +.LASF1340: + .string "DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x006C)" +.LASF3497: + .string "EXTI_Line16 ((uint32_t)0x10000)" +.LASF3485: + .string "EXTI_Line4 ((uint32_t)0x00010)" +.LASF3078: + .string "TIM_CC3NP ((uint16_t)0x0800)" +.LASF1064: + .string "O_EXCL _FEXCL" +.LASF3235: + .string "ADC_ExternalTrigConv_T2_CC2 ((uint32_t)0x00060000)" +.LASF4631: + .string "__cleanup" +.LASF640: + .string "_BSD_SIZE_T_ " +.LASF3956: + .string "TIM_OCMode_Toggle ((uint16_t)0x0030)" +.LASF482: + .string "RT_THREAD_CTRL_CHANGE_PRIORITY 0x02" +.LASF4726: + .string "USART1_IRQn" +.LASF2434: + .string "AFIO_PCFR1_SWJ_CFG_NOJNTRST ((uint32_t)0x01000000)" +.LASF1690: + .string "BKP_DATAR11_D ((uint16_t)0xFFFF)" +.LASF4662: + .string "_signal_buf" +.LASF2070: + .string "EXTI_SWIEVR_SWIEVR3 ((uint32_t)0x00000008)" +.LASF2094: + .string "EXTI_INTF_INTF7 ((uint32_t)0x00000080)" +.LASF3514: + .string "FLASH_WRProt_Pages20to23 ((uint32_t)0x00000020)" +.LASF43: + .string "__INT16_TYPE__ short int" +.LASF917: + .string "__ntohl(_x) __bswap32(_x)" +.LASF1023: + .string "S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)" +.LASF2368: + .string "AFIO_ECR_PIN_PX7 ((uint8_t)0x07)" +.LASF3552: + .string "FLASH_IT_BANK1_EOP FLASH_IT_EOP" +.LASF3493: + .string "EXTI_Line12 ((uint32_t)0x01000)" +.LASF4237: + .string "RB_UH_PORT_EN 0x01" +.LASF4337: + .string "UEP_R_RES_NAK 0x08" +.LASF4250: + .string "R32_USB_STATUS (*((PUINT32V)(0x40023404)))" +.LASF1495: + .string "ADC_SMP16_2 ((uint32_t)0x00100000)" +.LASF753: + .string "__format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))" +.LASF4581: + .string "_wds" +.LASF3567: + .string "GPIO_Pin_4 ((uint16_t)0x0010)" +.LASF2587: + .string "I2C_CTLR2_FREQ ((uint16_t)0x003F)" +.LASF531: + .string "RTGRAPHIC_CTRL_POWEROFF 2" +.LASF1206: + .string "__int_fast64_t_defined 1" +.LASF3822: + .string "RCC_APB2Periph_TIM9 ((uint32_t)0x00080000)" +.LASF1333: + .string "TIM11_BASE (APB2PERIPH_BASE + 0x5400)" +.LASF3461: + .string "DMA2_FLAG_TC1 ((uint32_t)0x10000002)" +.LASF622: + .string "_PTRDIFF_T " +.LASF3582: + .string "GPIO_Remap_USART1 ((uint32_t)0x00000004)" +.LASF2148: + .string "FLASH_Data0_nData0 ((uint32_t)0x0000FF00)" +.LASF662: + .string "__INT_WCHAR_T_H " +.LASF3062: + .string "TIM_IC4F ((uint16_t)0xF000)" +.LASF2229: + .string "GPIO_CFGHR_MODE14_0 ((uint32_t)0x01000000)" +.LASF1304: + .string "USART3_BASE (APB1PERIPH_BASE + 0x4800)" +.LASF4025: + .string "TIM_DMABase_SR ((uint16_t)0x0004)" +.LASF2150: + .string "FLASH_Data1_nData1 ((uint32_t)0xFF000000)" +.LASF861: + .string "_REENT_WCTOMB_STATE(ptr) ((ptr)->_new._reent._wctomb_state)" +.LASF303: + .string "__riscv_compressed 1" +.LASF631: + .string "__need_ptrdiff_t" +.LASF564: + .string "__SYS_CONFIG_H__ " +.LASF3262: + .string "ADC_Channel_Vrefint ((uint8_t)ADC_Channel_17)" +.LASF1789: + .string "DMA_TCIF2 ((uint32_t)0x00000020)" +.LASF2048: + .string "EXTI_FTENR_TR1 ((uint32_t)0x00000002)" +.LASF3572: + .string "GPIO_Pin_9 ((uint16_t)0x0200)" +.LASF569: + .string "__GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))" +.LASF4363: + .string "R8_UH_TX_CTRL R8_UEP3_CTRL" +.LASF1884: + .string "DMA_CFGR3_PSIZE ((uint16_t)0x0300)" +.LASF1646: + .string "ADC_SQ6_4 ((uint32_t)0x20000000)" +.LASF77: + .string "__WCHAR_MIN__ (-__WCHAR_MAX__ - 1)" +.LASF3260: + .string "ADC_Channel_17 ((uint8_t)0x11)" +.LASF2249: + .string "GPIO_CFGHR_CNF12_1 ((uint32_t)0x00080000)" +.LASF4359: + .string "R32_USB_EP3_CTRL (*((PUINT32V)(0x4002343c)))" +.LASF1047: + .string "_FSHLOCK 0x0080" +.LASF3716: + .string "IWDG_Prescaler_16 ((uint8_t)0x02)" +.LASF2946: + .string "TIM_TS_0 ((uint16_t)0x0010)" +.LASF227: + .string "__FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128" +.LASF715: + .string "__STRING(x) #x" +.LASF1788: + .string "DMA_GIF2 ((uint32_t)0x00000010)" +.LASF1284: + .string "SRAM_BASE ((uint32_t)0x20000000)" +.LASF4129: + .string "TIM_FLAG_CC3OF ((uint16_t)0x0800)" +.LASF155: + .string "__FLT_MAX__ 3.40282346638528859811704183484516925e+38F" +.LASF540: + .string "rt_graphix_ops(device) ((struct rt_device_graphic_ops *)(device->user_data))" +.LASF3271: + .string "ADC_ExternalTrigInjecConv_T2_TRGO ((uint32_t)0x00002000)" +.LASF2239: + .string "GPIO_CFGHR_CNF9_0 ((uint32_t)0x00000040)" +.LASF897: + .string "_INTMAX_T_DECLARED " +.LASF3645: + .string "I2C_Register_DATAR ((uint8_t)0x10)" +.LASF112: + .string "__INT_LEAST16_WIDTH__ 16" +.LASF4051: + .string "TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00)" +.LASF2546: + .string "AFIO_EXTICR4_EXTI13_PC ((uint16_t)0x0020)" +.LASF742: + .string "__restrict restrict" +.LASF1030: + .string "S_ISBLK(m) (((m)&_IFMT) == _IFBLK)" +.LASF4379: + .string "__USB_TYPE__ " +.LASF3959: + .string "TIM_OPMode_Single ((uint16_t)0x0008)" +.LASF4398: + .string "USB_SET_CONFIGURATION 0x09" +.LASF885: + .string "_INT8_T_DECLARED " +.LASF1829: + .string "DMA_CTCIF5 ((uint32_t)0x00020000)" +.LASF3188: + .string "WWDG_CTLR_T5 ((uint8_t)0x20)" +.LASF2448: + .string "AFIO_EXTICR1_EXTI1_PA ((uint16_t)0x0000)" +.LASF748: + .string "__offsetof(type,field) offsetof(type, field)" +.LASF1360: + .string "TIM12 ((TIM_TypeDef *) TIM12_BASE)" +.LASF1131: + .string "rt_slist_entry(node,type,member) rt_container_of(node, type, member)" +.LASF3710: + .string "I2C_EVENT_SLAVE_ACK_FAILURE ((uint32_t)0x00000400)" +.LASF4658: + .string "_mblen_state" +.LASF3466: + .string "DMA2_FLAG_HT2 ((uint32_t)0x10000040)" +.LASF3113: + .string "TIM_DBA_4 ((uint16_t)0x0010)" +.LASF3046: + .string "TIM_OC4M ((uint16_t)0x7000)" +.LASF1611: + .string "ADC_SQ1 ((uint32_t)0x0000001F)" +.LASF825: + .string "_RAND48_SEED_0 (0x330e)" +.LASF2423: + .string "AFIO_PCFR1_PD01_REMAP ((uint32_t)0x00008000)" +.LASF670: + .string "offsetof(TYPE,MEMBER) __builtin_offsetof (TYPE, MEMBER)" +.LASF1496: + .string "ADC_SMP17 ((uint32_t)0x00E00000)" +.LASF1716: + .string "BKP_DATAR37_D ((uint16_t)0xFFFF)" +.LASF4797: + .string "parameter" +.LASF643: + .string "_BSD_SIZE_T_DEFINED_ " +.LASF2246: + .string "GPIO_CFGHR_CNF11_1 ((uint32_t)0x00008000)" +.LASF4516: + .string "EP4_GetINSta() (R8_UEP4_CTRL&UEP_T_RES_NAK)" +.LASF4258: + .string "RB_UMS_DM_LEVEL 0x02" +.LASF4042: + .string "TIM_DMABurstLength_3Transfers ((uint16_t)0x0200)" +.LASF3251: + .string "ADC_Channel_8 ((uint8_t)0x08)" +.LASF4694: + .string "PVD_IRQn" +.LASF3204: + .string "EXTEN_USBD_LS ((uint32_t)0x00000001)" +.LASF1894: + .string "DMA_CFG4_EN ((uint16_t)0x0001)" +.LASF1004: + .string "S_IWRITE 0000200" +.LASF1649: + .string "ADC_JSQ1_1 ((uint32_t)0x00000002)" +.LASF3192: + .string "WWDG_CFGR_W0 ((uint16_t)0x0001)" +.LASF1020: + .string "S_IRGRP 0000040" +.LASF1806: + .string "DMA_HTIF6 ((uint32_t)0x00400000)" +.LASF4684: + .string "finsh_syscall" +.LASF2580: + .string "I2C_CTLR1_START ((uint16_t)0x0100)" +.LASF746: + .string "__exported __attribute__((__visibility__(\"default\")))" +.LASF2869: + .string "SPI_CTLR1_SPE ((uint16_t)0x0040)" +.LASF2317: + .string "GPIO_BSHR_BR10 ((uint32_t)0x04000000)" +.LASF1370: + .string "UART4 ((USART_TypeDef *) UART4_BASE)" +.LASF184: + .string "__LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L" +.LASF3618: + .string "GPIO_PinSource5 ((uint8_t)0x05)" +.LASF282: + .string "__REGISTER_PREFIX__ " +.LASF3178: + .string "USART_GPR_PSC_5 ((uint16_t)0x0020)" +.LASF938: + .string "_BLKCNT_T_DECLARED " +.LASF1671: + .string "ADC_JL ((uint32_t)0x00300000)" +.LASF378: + .string "RT_DEBUG_IRQ 0" +.LASF1063: + .string "O_TRUNC _FTRUNC" +.LASF2193: + .string "GPIO_CFGLR_CNF2_1 ((uint32_t)0x00000800)" +.LASF4153: + .string "USART_StopBits_0_5 ((uint16_t)0x1000)" +.LASF134: + .string "__INT_FAST64_WIDTH__ 64" +.LASF1809: + .string "DMA_TCIF7 ((uint32_t)0x02000000)" +.LASF2473: + .string "AFIO_EXTICR2_EXTI4_PA ((uint16_t)0x0000)" +.LASF3075: + .string "TIM_CC3E ((uint16_t)0x0100)" +.LASF2558: + .string "AFIO_EXTICR4_EXTI15_PA ((uint16_t)0x0000)" +.LASF3790: + .string "RCC_LSE_OFF ((uint8_t)0x00)" +.LASF61: + .string "__INT_FAST64_TYPE__ long long int" +.LASF740: + .string "__returns_twice __attribute__((__returns_twice__))" +.LASF2755: + .string "RCC_MCO_NOCLOCK ((uint32_t)0x00000000)" +.LASF4444: + .string "HUB_PORT_POWER 8" +.LASF4618: + .string "_lock" +.LASF4679: + .string "_timezone" +.LASF99: + .string "__INT8_MAX__ 0x7f" +.LASF771: + .string "_Nullable " +.LASF4089: + .string "TIM_EventSource_Update ((uint16_t)0x0001)" +.LASF3930: + .string "SPI_I2S_DMAReq_Rx ((uint16_t)0x0001)" +.LASF1367: + .string "SPI3 ((SPI_TypeDef *) SPI3_BASE)" +.LASF2176: + .string "GPIO_CFGLR_MODE5_0 ((uint32_t)0x00100000)" +.LASF2162: + .string "GPIO_CFGLR_MODE0_1 ((uint32_t)0x00000002)" +.LASF3267: + .string "ADC_SampleTime_41Cycles5 ((uint8_t)0x04)" +.LASF3453: + .string "DMA1_FLAG_TC6 ((uint32_t)0x00200000)" +.LASF2442: + .string "AFIO_EXTICR1_EXTI0_PB ((uint16_t)0x0001)" +.LASF901: + .string "__MACHINE_ENDIAN_H__ " +.LASF2503: + .string "AFIO_EXTICR3_EXTI10 ((uint16_t)0x0F00)" +.LASF790: + .string "__guarded_by(x) __lock_annotate(guarded_by(x))" +.LASF2021: + .string "EXTI_EVENR_MR14 ((uint32_t)0x00004000)" +.LASF2760: + .string "RCC_LSIRDYF ((uint32_t)0x00000001)" +.LASF728: + .string "__alloc_size(x) __attribute__((__alloc_size__ x))" +.LASF3126: + .string "USART_STATR_RXNE ((uint16_t)0x0020)" +.LASF1049: + .string "_FCREAT 0x0200" +.LASF1864: + .string "DMA_CFGR2_PINC ((uint16_t)0x0040)" +.LASF2409: + .string "AFIO_PCFR1_TIM2_REMAP_FULLREMAP ((uint32_t)0x00000300)" +.LASF3332: + .string "BKP_DR28 ((uint16_t)0x0084)" +.LASF55: + .string "__UINT_LEAST16_TYPE__ short unsigned int" +.LASF3909: + .string "I2S_Standard_PCMShort ((uint16_t)0x0030)" +.LASF3955: + .string "TIM_OCMode_Inactive ((uint16_t)0x0020)" +.LASF713: + .string "__CONCAT1(x,y) x ## y" +.LASF3309: + .string "BKP_DR5 ((uint16_t)0x0014)" +.LASF2087: + .string "EXTI_INTF_INTF0 ((uint32_t)0x00000001)" +.LASF2727: + .string "RCC_PLLMULL_0 ((uint32_t)0x00040000)" +.LASF3167: + .string "USART_CTLR3_DMAT ((uint16_t)0x0080)" +.LASF841: + .string "_REENT_CHECK_TM(ptr) " +.LASF3477: + .string "DMA2_FLAG_TC5 ((uint32_t)0x10020000)" +.LASF4329: + .string "RB_UEP_R_TOG 0x80" +.LASF4619: + .string "_mbstate" +.LASF3292: + .string "ADC_IT_JEOC ((uint16_t)0x0480)" +.LASF1441: + .string "ADC_DISCNUM_2 ((uint32_t)0x00008000)" +.LASF1433: + .string "ADC_SCAN ((uint32_t)0x00000100)" +.LASF2421: + .string "AFIO_PCFR1_CAN_REMAP_REMAP2 ((uint32_t)0x00004000)" +.LASF3934: + .string "SPI_CRC_Rx ((uint8_t)0x01)" +.LASF4194: + .string "USART_FLAG_CTS ((uint16_t)0x0200)" +.LASF4788: + .string "rt_interrupt_to_thread" +.LASF2416: + .string "AFIO_PCFR1_TIM4_REMAP ((uint32_t)0x00001000)" +.LASF3595: + .string "GPIO_Remap2_CAN1 ((uint32_t)0x001D6000)" +.LASF3692: + .string "I2C_FLAG_ADDR ((uint32_t)0x10000002)" +.LASF1889: + .string "DMA_CFGR3_MSIZE_1 ((uint16_t)0x0800)" +.LASF3328: + .string "BKP_DR24 ((uint16_t)0x0074)" +.LASF2601: + .string "I2C_OADDR1_ADD0 ((uint16_t)0x0001)" +.LASF4510: + .string "pEP6_IN_DataBuf (pEP6_RAM_Addr+64)" +.LASF1830: + .string "DMA_CHTIF5 ((uint32_t)0x00040000)" +.LASF423: + .string "INIT_EXPORT(fn,level) RT_USED const init_fn_t __rt_init_ ##fn RT_SECTION(\".rti_fn.\" level) = fn" +.LASF2504: + .string "AFIO_EXTICR3_EXTI11 ((uint16_t)0xF000)" +.LASF2948: + .string "TIM_TS_2 ((uint16_t)0x0040)" +.LASF1286: + .string "APB1PERIPH_BASE (PERIPH_BASE)" +.LASF3452: + .string "DMA1_FLAG_GL6 ((uint32_t)0x00100000)" +.LASF2932: + .string "TIM_MMS_2 ((uint16_t)0x0040)" +.LASF4371: + .string "R8_UEP5_T_LEN (*((PUINT8V)(0x40023444)))" +.LASF630: + .string "_PTRDIFF_T_DECLARED " +.LASF403: + .string "_ANSI_STDARG_H_ " +.LASF846: + .string "_REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)" +.LASF1213: + .string "INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)" +.LASF244: + .string "__FLT32X_HAS_DENORM__ 1" +.LASF3357: + .string "DBGMCU_SLEEP ((uint32_t)0x00000001)" +.LASF4402: + .string "HUB_GET_STATUS 0x00" +.LASF4567: + .string "_off_t" +.LASF1799: + .string "DMA_TEIF4 ((uint32_t)0x00008000)" +.LASF1551: + .string "ADC_SQ13_4 ((uint32_t)0x00000010)" +.LASF523: + .string "RT_DEVICE_CTRL_BLK_ERASE 0x12" +.LASF2085: + .string "EXTI_SWIEVR_SWIEVR18 ((uint32_t)0x00040000)" +.LASF3257: + .string "ADC_Channel_14 ((uint8_t)0x0E)" +.LASF196: + .string "__FLT32_MAX_10_EXP__ 38" +.LASF481: + .string "RT_THREAD_CTRL_CLOSE 0x01" +.LASF992: + .string "_IFDIR 0040000" +.LASF1711: + .string "BKP_DATAR32_D ((uint16_t)0xFFFF)" +.LASF2295: + .string "GPIO_BSHR_BS4 ((uint32_t)0x00000010)" +.LASF3015: + .string "TIM_IC1PSC ((uint16_t)0x000C)" +.LASF2311: + .string "GPIO_BSHR_BR4 ((uint32_t)0x00100000)" +.LASF199: + .string "__FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32" +.LASF541: + .string "RTLIBC_H__ " +.LASF3654: + .string "I2C_NACKPosition_Next ((uint16_t)0x0800)" +.LASF3218: + .string "EXTEN_FLASH_CLK_TRIM0 ((uint32_t)0x00010000)" +.LASF1550: + .string "ADC_SQ13_3 ((uint32_t)0x00000008)" +.LASF192: + .string "__FLT32_DIG__ 6" +.LASF1769: + .string "DAC_SWTRIG2 ((uint8_t)0x02)" +.LASF3399: + .string "DMA1_IT_TE4 ((uint32_t)0x00008000)" +.LASF291: + .string "__GCC_ATOMIC_SHORT_LOCK_FREE 1" +.LASF4546: + .string "NVIC_PriorityGroup_1 ((uint32_t)0x01)" +.LASF382: + .string "RT_DEBUG_LOG(type,message) do { if (type) rt_kprintf message; } while (0)" +.LASF1051: + .string "_FEXCL 0x0800" +.LASF2294: + .string "GPIO_BSHR_BS3 ((uint32_t)0x00000008)" +.LASF536: + .string "RTGRAPHIC_CTRL_GET_BRIGHTNESS 7" +.LASF1133: + .string "rt_slist_for_each_entry(pos,head,member) for (pos = rt_slist_entry((head)->next, typeof(*pos), member); &pos->member != (RT_NULL); pos = rt_slist_entry(pos->member.next, typeof(*pos), member))" +.LASF2023: + .string "EXTI_EVENR_MR16 ((uint32_t)0x00010000)" +.LASF2412: + .string "AFIO_PCFR1_TIM3_REMAP_1 ((uint32_t)0x00000800)" +.LASF1955: + .string "DMA_CFG7_MINC ((uint16_t)0x0080)" +.LASF2874: + .string "SPI_CTLR1_DFF ((uint16_t)0x0800)" +.LASF4179: + .string "USART_IT_LBD ((uint16_t)0x0846)" +.LASF176: + .string "__LDBL_MANT_DIG__ 113" +.LASF2225: + .string "GPIO_CFGHR_MODE13 ((uint32_t)0x00300000)" +.LASF3021: + .string "TIM_IC1F_2 ((uint16_t)0x0040)" +.LASF2472: + .string "AFIO_EXTICR2_EXTI7 ((uint16_t)0xF000)" +.LASF3576: + .string "GPIO_Pin_13 ((uint16_t)0x2000)" +.LASF3546: + .string "OB_STOP_RST ((uint16_t)0x0000)" +.LASF3362: + .string "DMA_DIR_PeripheralSRC ((uint32_t)0x00000000)" +.LASF2124: + .string "FLASH_CTLR_OPTER ((uint16_t)0x0020)" +.LASF838: + .ascii "_REENT_INIT_PTR_ZEROED(var) { (var)->_stdin = _REENT_STDIO_S" + .ascii "TREAM(var, 0); (var)->_stdout = _REENT_STDIO_STREAM(var, 1);" + .ascii " (var)->_stderr = _REENT_STDIO_STREAM(var, 2); (var)->_new._" + .ascii "reent._rand_next = 1; (var)->_new._reent._r48._seed[0] = _RA" + .ascii "ND48_SEED_0; (var)->_new._reent._r48._seed[1] = _RAND48_S" + .string "EED_1; (var)->_new._reent._r48._seed[2] = _RAND48_SEED_2; (var)->_new._reent._r48._mult[0] = _RAND48_MULT_0; (var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; (var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; (var)->_new._reent._r48._add = _RAND48_ADD; }" +.LASF1010: + .string "S_IFBLK _IFBLK" +.LASF2800: + .string "RCC_USBRST ((uint32_t)0x00800000)" +.LASF3426: + .string "DMA2_IT_HT4 ((uint32_t)0x10004000)" +.LASF4738: + .string "RESERVED0" +.LASF4740: + .string "RESERVED1" +.LASF4742: + .string "RESERVED2" +.LASF4744: + .string "RESERVED3" +.LASF1739: + .string "DAC_TSEL1 ((uint32_t)0x00000038)" +.LASF328: + .string "RT_USING_TIMER_SOFT " +.LASF4750: + .string "RESERVED6" +.LASF4752: + .string "RESERVED7" +.LASF2072: + .string "EXTI_SWIEVR_SWIEVR5 ((uint32_t)0x00000020)" +.LASF1885: + .string "DMA_CFGR3_PSIZE_0 ((uint16_t)0x0100)" +.LASF2758: + .string "RCC_CFGR0_MCO_HSE ((uint32_t)0x06000000)" +.LASF374: + .string "RT_DEBUG_SCHEDULER 0" +.LASF4723: + .string "I2C2_ER_IRQn" +.LASF2387: + .string "AFIO_PCFR1_SPI1_REMAP ((uint32_t)0x00000001)" +.LASF2111: + .string "FLASH_ACTLR_HLFCYA ((uint8_t)0x08)" +.LASF2663: + .string "RCC_HSION ((uint32_t)0x00000001)" +.LASF2685: + .string "RCC_HPRE ((uint32_t)0x000000F0)" +.LASF3096: + .string "TIM_DTG_5 ((uint16_t)0x0020)" +.LASF1193: + .string "__FAST32 " +.LASF2530: + .string "AFIO_EXTICR3_EXTI11_PE ((uint16_t)0x4000)" +.LASF927: + .string "FD_ISSET(n,p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS)))" +.LASF67: + .string "__UINTPTR_TYPE__ unsigned int" +.LASF3563: + .string "GPIO_Pin_0 ((uint16_t)0x0001)" +.LASF852: + .string "_REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)" +.LASF4730: + .string "RTCAlarm_IRQn" +.LASF302: + .string "__riscv 1" +.LASF500: + .string "RT_DEVICE_FLAG_ACTIVATED 0x010" +.LASF981: + .string "TIMEVAL_TO_TIMESPEC(tv,ts) do { (ts)->tv_sec = (tv)->tv_sec; (ts)->tv_nsec = (tv)->tv_usec * 1000; } while (0)" +.LASF148: + .string "__FLT_MANT_DIG__ 24" +.LASF677: + .string "__long_double_t long double" +.LASF2626: + .string "I2C_STAR1_PECERR ((uint16_t)0x1000)" +.LASF1029: + .string "DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)" +.LASF3768: + .string "RCC_SYSCLK_Div16 ((uint32_t)0x000000B0)" +.LASF3013: + .string "TIM_OC2M_2 ((uint16_t)0x4000)" +.LASF2939: + .string "TIM_OIS3N ((uint16_t)0x2000)" +.LASF4704: + .string "DMA1_Channel1_IRQn" +.LASF433: + .string "RT_MM_PAGE_BITS 12" +.LASF894: + .string "_INT64_T_DECLARED " +.LASF1021: + .string "S_IWGRP 0000020" +.LASF2899: + .string "SPI_I2SCFGR_DATLEN_0 ((uint16_t)0x0002)" +.LASF1946: + .string "DMA_CFG6_PL_1 ((uint16_t)0x2000)" +.LASF881: + .string "CLK_TCK CLOCKS_PER_SEC" +.LASF3400: + .string "DMA1_IT_GL5 ((uint32_t)0x00010000)" +.LASF598: + .string "_NOTHROW " +.LASF3951: + .string "SPI_I2S_FLAG_BSY ((uint16_t)0x0080)" +.LASF4406: + .string "HUB_GET_DESCRIPTOR 0x06" +.LASF3952: + .string "__CH32V10x_TIM_H " +.LASF2389: + .string "AFIO_PCFR1_USART1_REMAP ((uint32_t)0x00000004)" +.LASF4208: + .string "WWDG_Prescaler_8 ((uint32_t)0x00000180)" +.LASF2456: + .string "AFIO_EXTICR1_EXTI2_PB ((uint16_t)0x0100)" +.LASF3318: + .string "BKP_DR14 ((uint16_t)0x004C)" +.LASF2039: + .string "EXTI_RTENR_TR12 ((uint32_t)0x00001000)" +.LASF2608: + .string "I2C_OADDR1_ADD7 ((uint16_t)0x0080)" +.LASF2348: + .string "GPIO_LCK9 ((uint32_t)0x00000200)" +.LASF3480: + .string "__CH32V10x_EXTI_H " +.LASF1613: + .string "ADC_SQ1_1 ((uint32_t)0x00000002)" +.LASF4166: + .string "USART_Clock_Enable ((uint16_t)0x0800)" +.LASF920: + .string "FD_SETSIZE 32" +.LASF4568: + .string "_fpos_t" +.LASF4702: + .string "EXTI3_IRQn" +.LASF3828: + .string "RCC_APB1Periph_TIM5 ((uint32_t)0x00000008)" +.LASF744: + .string "__predict_false(exp) __builtin_expect((exp), 0)" +.LASF441: + .string "RT_EEMPTY 4" +.LASF1173: + .string "signed" +.LASF1597: + .string "ADC_SQ10_3 ((uint32_t)0x00040000)" +.LASF1523: + .string "ADC_SMP5_2 ((uint32_t)0x00020000)" +.LASF1478: + .string "ADC_SMP12_1 ((uint32_t)0x00000080)" +.LASF4176: + .string "USART_IT_RXNE ((uint16_t)0x0525)" +.LASF4200: + .string "USART_FLAG_ORE ((uint16_t)0x0008)" +.LASF581: + .string "__GNU_VISIBLE 0" +.LASF4448: + .string "HUB_C_PORT_SUSPEND 18" +.LASF3731: + .string "PWR_PVDLevel_2V9 ((uint32_t)0x000000E0)" +.LASF690: + .string "__GNUCLIKE_ASM 3" +.LASF2269: + .string "GPIO_INDR_IDR10 ((uint16_t)0x0400)" +.LASF3511: + .string "FLASH_WRProt_Pages8to11 ((uint32_t)0x00000004)" +.LASF4719: + .string "TIM4_IRQn" +.LASF1892: + .string "DMA_CFGR3_PL_1 ((uint16_t)0x2000)" +.LASF3286: + .string "ADC_AnalogWatchdog_AllRegEnable ((uint32_t)0x00800000)" +.LASF2834: + .string "RCC_RTCEN ((uint32_t)0x00008000)" +.LASF3844: + .string "RCC_APB1Periph_CAN1 ((uint32_t)0x02000000)" +.LASF2901: + .string "SPI_I2SCFGR_CKPOL ((uint16_t)0x0008)" +.LASF1561: + .string "ADC_SQ15_2 ((uint32_t)0x00001000)" +.LASF3621: + .string "GPIO_PinSource8 ((uint8_t)0x08)" +.LASF3484: + .string "EXTI_Line3 ((uint32_t)0x00008)" +.LASF2523: + .string "AFIO_EXTICR3_EXTI10_PE ((uint16_t)0x0400)" +.LASF3684: + .string "I2C_FLAG_AF ((uint32_t)0x10000400)" +.LASF1494: + .string "ADC_SMP16_1 ((uint32_t)0x00080000)" +.LASF1904: + .string "DMA_CFG4_PSIZE_1 ((uint16_t)0x0200)" +.LASF4571: + .string "__wch" +.LASF3673: + .string "I2C_FLAG_DUALF ((uint32_t)0x00800000)" +.LASF2836: + .string "RCC_LSION ((uint32_t)0x00000001)" +.LASF206: + .string "__FLT64_DIG__ 15" +.LASF1033: + .string "S_ISFIFO(m) (((m)&_IFMT) == _IFIFO)" +.LASF3183: + .string "WWDG_CTLR_T0 ((uint8_t)0x01)" +.LASF3444: + .string "DMA1_FLAG_GL4 ((uint32_t)0x00001000)" +.LASF2120: + .string "FLASH_CTLR_PG ((uint16_t)0x0001)" +.LASF1771: + .string "DAC_DHR12L1 ((uint16_t)0xFFF0)" +.LASF4232: + .string "RB_UH_PD_DIS 0x80" +.LASF3795: + .string "RCC_RTCCLKSource_HSE_Div128 ((uint32_t)0x00000300)" +.LASF3137: + .string "USART_CTLR1_TE ((uint16_t)0x0008)" +.LASF1761: + .string "DAC_WAVE2_1 ((uint32_t)0x00800000)" +.LASF3215: + .string "EXTEN_WRITE_EN ((uint32_t)0x00004000)" +.LASF4: + .string "__STDC_HOSTED__ 1" +.LASF3282: + .string "ADC_InjectedChannel_4 ((uint8_t)0x20)" +.LASF573: + .string "_POSIX_SOURCE" +.LASF4526: + .string "ERR_USB_TRANSFER 0x20" +.LASF4074: + .string "TIM_TS_TI1FP1 ((uint16_t)0x0050)" +.LASF1196: + .string "__LEAST16 \"h\"" +.LASF4422: + .string "USB_REQ_TYP_RESERVED 0x60" +.LASF3196: + .string "WWDG_CFGR_W4 ((uint16_t)0x0010)" +.LASF4277: + .string "UIS_TOKEN_SOF 0x10" +.LASF2628: + .string "I2C_STAR1_SMBALERT ((uint16_t)0x8000)" +.LASF4305: + .string "RB_UEP6_BUF_MOD 0x10" +.LASF2799: + .string "RCC_I2C2RST ((uint32_t)0x00400000)" +.LASF4239: + .string "RB_UIE_DEV_SOF 0x80" +.LASF2357: + .string "AFIO_ECR_PIN_0 ((uint8_t)0x01)" +.LASF796: + .string "_LOCK_RECURSIVE_T _LOCK_T" +.LASF2980: + .string "TIM_COMIF ((uint16_t)0x0020)" +.LASF471: + .string "RT_THREAD_CLOSE 0x04" +.LASF3720: + .string "IWDG_Prescaler_256 ((uint8_t)0x06)" +.LASF455: + .string "RT_TIMER_FLAG_ONE_SHOT 0x0" +.LASF1532: + .string "ADC_SMP8 ((uint32_t)0x07000000)" +.LASF2374: + .string "AFIO_ECR_PIN_PX13 ((uint8_t)0x0D)" +.LASF2096: + .string "EXTI_INTF_INTF9 ((uint32_t)0x00000200)" +.LASF4242: + .string "RB_UIE_HST_SOF 0x08" +.LASF1801: + .string "DMA_TCIF5 ((uint32_t)0x00020000)" +.LASF105: + .string "__UINT32_MAX__ 0xffffffffUL" +.LASF4659: + .string "_mbtowc_state" +.LASF1071: + .string "FNBIO _FNBIO" +.LASF1954: + .string "DMA_CFG7_PINC ((uint16_t)0x0040)" +.LASF2717: + .string "RCC_ADCPRE ((uint32_t)0x0000C000)" +.LASF1253: + .string "PTRDIFF_MIN (-PTRDIFF_MAX - 1)" +.LASF1527: + .string "ADC_SMP6_2 ((uint32_t)0x00100000)" +.LASF848: + .string "_REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)" +.LASF492: + .string "RT_EVENT_FLAG_OR 0x02" +.LASF4574: + .string "__value" +.LASF3161: + .string "USART_CTLR3_IREN ((uint16_t)0x0002)" +.LASF2278: + .string "GPIO_OUTDR_ODR3 ((uint16_t)0x0008)" +.LASF2089: + .string "EXTI_INTF_INTF2 ((uint32_t)0x00000004)" +.LASF918: + .string "__ntohs(_x) __bswap16(_x)" +.LASF3151: + .string "USART_CTLR2_LBDIE ((uint16_t)0x0040)" +.LASF469: + .string "RT_THREAD_RUNNING 0x03" +.LASF819: + .string "_NULL 0" +.LASF4218: + .string "RB_UC_SYS_CTRL0 0x10" +.LASF4450: + .string "HUB_C_PORT_RESET 20" +.LASF585: + .string "__POSIX_VISIBLE 200809" +.LASF3634: + .string "I2C_DutyCycle_2 ((uint16_t)0xBFFF)" +.LASF4369: + .string "R8_UEP4_CTRL (*((PUINT8V)(0x40023442)))" +.LASF4734: + .string "ITHRESDR" +.LASF3800: + .string "RCC_AHBPeriph_CRC ((uint32_t)0x00000040)" +.LASF754: + .string "__strfmonlike(fmtarg,firstvararg) __attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))" +.LASF3961: + .string "TIM_Channel_1 ((uint16_t)0x0000)" +.LASF4732: + .string "USBHD_IRQn" +.LASF27: + .string "__ORDER_LITTLE_ENDIAN__ 1234" +.LASF704: + .string "__GNUCLIKE_BUILTIN_MEMCPY 1" +.LASF3545: + .string "OB_STOP_NoRST ((uint16_t)0x0002)" +.LASF3069: + .string "TIM_CC1NE ((uint16_t)0x0004)" +.LASF1439: + .string "ADC_DISCNUM_0 ((uint32_t)0x00002000)" +.LASF4367: + .string "R32_USB_EP4_CTRL (*((PUINT32V)(0x40023440)))" +.LASF3992: + .string "TIM_LOCKLevel_1 ((uint16_t)0x0100)" +.LASF755: + .string "__strftimelike(fmtarg,firstvararg) __attribute__((__format__ (__strftime__, fmtarg, firstvararg)))" +.LASF3499: + .string "EXTI_Line18 ((uint32_t)0x40000)" +.LASF317: + .string "RT_CONFIG_H__ " +.LASF438: + .string "RT_ERROR 1" +.LASF2575: + .string "I2C_CTLR1_SMBTYPE ((uint16_t)0x0008)" +.LASF3003: + .string "TIM_OC1M_2 ((uint16_t)0x0040)" +.LASF2673: + .string "RCC_SW ((uint32_t)0x00000003)" +.LASF2768: + .string "RCC_HSIRDYIE ((uint32_t)0x00000400)" +.LASF464: + .string "RT_TIMER_SKIP_LIST_LEVEL 1" +.LASF3587: + .string "GPIO_FullRemap_TIM1 ((uint32_t)0x001600C0)" +.LASF4211: + .string "CONST const" +.LASF1144: + .string "FINSH_FUNCTION_EXPORT_CMD(name,cmd,desc) const char __fsym_ ##cmd ##_name[] = #cmd; RT_USED const struct finsh_syscall __fsym_ ##cmd RT_SECTION(\"FSymTab\")= { __fsym_ ##cmd ##_name, (syscall_func)&name };" +.LASF2609: + .string "I2C_OADDR1_ADD8 ((uint16_t)0x0100)" +.LASF3259: + .string "ADC_Channel_16 ((uint8_t)0x10)" +.LASF1436: + .string "ADC_DISCEN ((uint32_t)0x00000800)" +.LASF1645: + .string "ADC_SQ6_3 ((uint32_t)0x10000000)" +.LASF2469: + .string "AFIO_EXTICR2_EXTI4 ((uint16_t)0x000F)" +.LASF2541: + .string "AFIO_EXTICR4_EXTI12_PE ((uint16_t)0x0004)" +.LASF4787: + .string "rt_interrupt_from_thread" +.LASF1086: + .string "FD_CLOEXEC 1" +.LASF602: + .string "_NOINLINE __attribute__ ((__noinline__))" +.LASF3798: + .string "RCC_AHBPeriph_SRAM ((uint32_t)0x00000004)" +.LASF2969: + .string "TIM_CC1DE ((uint16_t)0x0200)" +.LASF3376: + .string "DMA_Priority_High ((uint32_t)0x00002000)" +.LASF4665: + .string "_mbrtowc_state" +.LASF4134: + .string "TIM_DMABurstLength_4Bytes TIM_DMABurstLength_4Transfers" +.LASF1679: + .string "ADC_RDATAR_ADC2DATA ((uint32_t)0xFFFF0000)" +.LASF4263: + .string "RB_U_SIE_FREE 0x20" +.LASF1285: + .string "PERIPH_BASE ((uint32_t)0x40000000)" +.LASF836: + .string "_REENT_STDIO_STREAM(var,index) &(var)->__sf[index]" +.LASF2064: + .string "EXTI_FTENR_TR17 ((uint32_t)0x00020000)" +.LASF1835: + .string "DMA_CTEIF6 ((uint32_t)0x00800000)" +.LASF1503: + .string "ADC_SMP0_2 ((uint32_t)0x00000004)" +.LASF3254: + .string "ADC_Channel_11 ((uint8_t)0x0B)" +.LASF4715: + .string "TIM1_TRG_COM_IRQn" +.LASF3960: + .string "TIM_OPMode_Repetitive ((uint16_t)0x0000)" +.LASF3279: + .string "ADC_InjectedChannel_1 ((uint8_t)0x14)" +.LASF1783: + .string "DAC_DACC2DOR ((uint16_t)0x0FFF)" +.LASF4589: + .string "__tm_year" +.LASF4573: + .string "__count" +.LASF4552: + .string "unsigned char" +.LASF3780: + .string "RCC_IT_HSIRDY ((uint8_t)0x04)" +.LASF2061: + .string "EXTI_FTENR_TR14 ((uint32_t)0x00004000)" +.LASF3520: + .string "FLASH_WRProt_Pages44to47 ((uint32_t)0x00000800)" +.LASF230: + .string "__FLT128_HAS_DENORM__ 1" +.LASF2101: + .string "EXTI_INTF_INTF14 ((uint32_t)0x00004000)" +.LASF1840: + .string "DMA_CFGR1_EN ((uint16_t)0x0001)" +.LASF4254: + .string "RB_UMS_SIE_FREE 0x20" +.LASF419: + .string "ALIGN(n) __attribute__((aligned(n)))" +.LASF1270: + .string "__O volatile" +.LASF1098: + .string "F_RSETLK 11" +.LASF3150: + .string "USART_CTLR2_LBDL ((uint16_t)0x0020)" +.LASF1755: + .string "DAC_TSEL2 ((uint32_t)0x00380000)" +.LASF856: + .string "_REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)" +.LASF1714: + .string "BKP_DATAR35_D ((uint16_t)0xFFFF)" +.LASF2511: + .string "AFIO_EXTICR3_EXTI8_PG ((uint16_t)0x0006)" +.LASF334: + .string "RT_USING_EVENT " +.LASF4150: + .string "USART_WordLength_8b ((uint16_t)0x0000)" +.LASF2675: + .string "RCC_SW_1 ((uint32_t)0x00000002)" +.LASF4766: + .string "pEP7_RAM_Addr" +.LASF1461: + .string "ADC_EXTSEL_0 ((uint32_t)0x00020000)" +.LASF3510: + .string "FLASH_WRProt_Pages4to7 ((uint32_t)0x00000002)" +.LASF1766: + .string "DAC_MAMP2_3 ((uint32_t)0x08000000)" +.LASF3801: + .string "RCC_AHBPeriph_FSMC ((uint32_t)0x00000100)" +.LASF3153: + .string "USART_CTLR2_CPHA ((uint16_t)0x0200)" +.LASF2044: + .string "EXTI_RTENR_TR17 ((uint32_t)0x00020000)" +.LASF119: + .string "__UINT_LEAST8_MAX__ 0xff" +.LASF535: + .string "RTGRAPHIC_CTRL_SET_BRIGHTNESS 6" +.LASF700: + .string "__GNUC_VA_LIST_COMPATIBILITY 1" +.LASF1685: + .string "BKP_DATAR6_D ((uint16_t)0xFFFF)" +.LASF2909: + .string "SPI_I2SCFGR_I2SE ((uint16_t)0x0400)" +.LASF2323: + .string "GPIO_BCR_BR0 ((uint16_t)0x0001)" +.LASF3337: + .string "BKP_DR33 ((uint16_t)0x0098)" +.LASF813: + .string "_WINT_T " +.LASF2956: + .string "TIM_ETPS_0 ((uint16_t)0x1000)" +.LASF442: + .string "RT_ENOMEM 5" +.LASF913: + .string "__bswap32(_x) __builtin_bswap32(_x)" +.LASF4157: + .string "USART_Parity_Even ((uint16_t)0x0400)" +.LASF2259: + .string "GPIO_INDR_IDR0 ((uint16_t)0x0001)" +.LASF2284: + .string "GPIO_OUTDR_ODR9 ((uint16_t)0x0200)" +.LASF2516: + .string "AFIO_EXTICR3_EXTI9_PE ((uint16_t)0x0040)" +.LASF988: + .string "CLOCK_DISALLOWED 0" +.LASF3490: + .string "EXTI_Line9 ((uint32_t)0x00200)" +.LASF3317: + .string "BKP_DR13 ((uint16_t)0x0048)" +.LASF2564: + .string "AFIO_EXTICR4_EXTI15_PG ((uint16_t)0x6000)" +.LASF4393: + .string "USB_SET_FEATURE 0x03" +.LASF3441: + .string "DMA1_FLAG_TC3 ((uint32_t)0x00000200)" +.LASF879: + .string "_CLOCKS_PER_SEC_ RT_TICK_PER_SECOND" +.LASF1241: + .string "INT_FAST32_MAX (__INT_FAST32_MAX__)" +.LASF264: + .string "__DEC32_MIN__ 1E-95DF" +.LASF1472: + .string "ADC_SMP11 ((uint32_t)0x00000038)" +.LASF1575: + .string "ADC_SQ7 ((uint32_t)0x0000001F)" +.LASF4561: + .string "long unsigned int" +.LASF3985: + .string "TIM_Break_Enable ((uint16_t)0x1000)" +.LASF2786: + .string "RCC_USART1RST ((uint32_t)0x00004000)" +.LASF2471: + .string "AFIO_EXTICR2_EXTI6 ((uint16_t)0x0F00)" +.LASF4643: + .string "__FILE" +.LASF2195: + .string "GPIO_CFGLR_CNF3_0 ((uint32_t)0x00004000)" +.LASF1981: + .string "DMA_MADDR2_MA ((uint32_t)0xFFFFFFFF)" +.LASF1733: + .string "CRC_DATAR_DR ((uint32_t)0xFFFFFFFF)" +.LASF371: + .string "RT_DEBUG_MEM 0" +.LASF3442: + .string "DMA1_FLAG_HT3 ((uint32_t)0x00000400)" +.LASF4197: + .string "USART_FLAG_TC ((uint16_t)0x0040)" +.LASF834: + .string "_REENT_SIGNAL_SIZE 24" +.LASF2296: + .string "GPIO_BSHR_BS5 ((uint32_t)0x00000020)" +.LASF1819: + .string "DMA_CTEIF2 ((uint32_t)0x00000080)" +.LASF4084: + .string "TIM_ForcedAction_Active ((uint16_t)0x0050)" +.LASF2963: + .string "TIM_CC3IE ((uint16_t)0x0008)" +.LASF4445: + .string "HUB_PORT_LOW_SPEED 9" +.LASF1870: + .string "DMA_CFGR2_MSIZE_0 ((uint16_t)0x0400)" +.LASF4590: + .string "__tm_wday" +.LASF2209: + .string "GPIO_CFGHR_MODE ((uint32_t)0x33333333)" +.LASF246: + .string "__FLT32X_HAS_QUIET_NAN__ 1" +.LASF1339: + .string "DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x0058)" +.LASF549: + .string "__NEWLIB_MINOR__ 0" +.LASF377: + .string "RT_DEBUG_TIMER 0" +.LASF3219: + .string "EXTEN_FLASH_CLK_TRIM1 ((uint32_t)0x00020000)" +.LASF2310: + .string "GPIO_BSHR_BR3 ((uint32_t)0x00080000)" +.LASF3635: + .string "I2C_Ack_Enable ((uint16_t)0x0400)" +.LASF347: + .string "RT_MAIN_THREAD_PRIORITY 10" +.LASF398: + .string "RT_MUTEX_VALUE_MAX RT_UINT16_MAX" +.LASF4649: + .string "_mult" +.LASF826: + .string "_RAND48_SEED_1 (0xabcd)" +.LASF2847: + .string "RTC_CTLRH_OWIE ((uint8_t)0x04)" +.LASF1197: + .string "__LEAST32 \"l\"" +.LASF2705: + .string "RCC_PPRE1_DIV4 ((uint32_t)0x00000500)" +.LASF4008: + .string "TIM_ICSelection_TRC ((uint16_t)0x0003)" +.LASF252: + .string "__FLT64X_MAX_10_EXP__ 4932" +.LASF2234: + .string "GPIO_CFGHR_CNF ((uint32_t)0xCCCCCCCC)" +.LASF3034: + .string "TIM_OC3FE ((uint16_t)0x0004)" +.LASF4520: + .string "__CH32V10x_USBHOST_H " +.LASF4488: + .string "USB_BO_CBW_SIG0 0x55" +.LASF2201: + .string "GPIO_CFGLR_CNF5_0 ((uint32_t)0x00400000)" +.LASF3905: + .string "I2S_Mode_MasterRx ((uint16_t)0x0300)" +.LASF1311: + .string "DAC_BASE (APB1PERIPH_BASE + 0x7400)" +.LASF4140: + .string "TIM_DMABurstLength_10Bytes TIM_DMABurstLength_10Transfers" +.LASF3820: + .string "RCC_APB2Periph_TIM16 ((uint32_t)0x00020000)" +.LASF4374: + .string "R8_UEP6_T_LEN (*((PUINT8V)(0x40023448)))" +.LASF416: + .string "RT_SECTION(x) __attribute__((section(x)))" +.LASF664: + .string "_WCHAR_T_DECLARED " +.LASF1996: + .string "EXTI_INTENR_MR9 ((uint32_t)0x00000200)" +.LASF2461: + .string "AFIO_EXTICR1_EXTI2_PG ((uint16_t)0x0600)" +.LASF3728: + .string "PWR_PVDLevel_2V6 ((uint32_t)0x00000080)" +.LASF3698: + .string "I2C_EVENT_MASTER_BYTE_RECEIVED ((uint32_t)0x00030040)" +.LASF576: + .string "_POSIX_C_SOURCE 200809L" +.LASF809: + .string "__size_t" +.LASF1698: + .string "BKP_DATAR19_D ((uint16_t)0xFFFF)" +.LASF342: + .string "RT_CONSOLE_DEVICE_NAME \"uart1\"" +.LASF963: + .string "_SUSECONDS_T_DECLARED " +.LASF405: + .string "__GNUC_VA_LIST " +.LASF1735: + .string "CRC_CTLR_RESET ((uint8_t)0x01)" +.LASF2408: + .string "AFIO_PCFR1_TIM2_REMAP_PARTIALREMAP2 ((uint32_t)0x00000200)" +.LASF4389: + .string "USB_PID_DATA1 0x0B" +.LASF3571: + .string "GPIO_Pin_8 ((uint16_t)0x0100)" +.LASF3476: + .string "DMA2_FLAG_GL5 ((uint32_t)0x10010000)" +.LASF2912: + .string "SPI_I2SPR_ODD ((uint16_t)0x0100)" +.LASF4770: + .string "DeviceType" +.LASF4411: + .string "HID_SET_REPORT 0x09" +.LASF4811: + .string "NVIC_SetPendingIRQ" +.LASF2082: + .string "EXTI_SWIEVR_SWIEVR15 ((uint32_t)0x00008000)" +.LASF1264: + .string "INT64_C(x) __INT64_C(x)" +.LASF2179: + .string "GPIO_CFGLR_MODE6_0 ((uint32_t)0x01000000)" +.LASF3988: + .string "TIM_BreakPolarity_High ((uint16_t)0x2000)" +.LASF2852: + .string "RTC_CTLRL_CNF ((uint8_t)0x10)" +.LASF170: + .string "__DBL_MIN__ ((double)2.22507385850720138309023271733240406e-308L)" +.LASF2122: + .string "FLASH_CTLR_MER ((uint16_t)0x0004)" +.LASF3688: + .string "I2C_FLAG_RXNE ((uint32_t)0x10000040)" +.LASF3479: + .string "DMA2_FLAG_TE5 ((uint32_t)0x10080000)" +.LASF1867: + .string "DMA_CFGR2_PSIZE_0 ((uint16_t)0x0100)" +.LASF2586: + .string "I2C_CTLR1_SWRST ((uint16_t)0x8000)" +.LASF298: + .string "__PRAGMA_REDEFINE_EXTNAME 1" +.LASF445: + .string "RT_EIO 8" +.LASF4757: + .string "UINT16" +.LASF4683: + .string "syscall_func" +.LASF2759: + .string "RCC_CFGR0_MCO_PLL ((uint32_t)0x07000000)" +.LASF1662: + .string "ADC_JSQ3_2 ((uint32_t)0x00001000)" +.LASF3830: + .string "RCC_APB1Periph_TIM7 ((uint32_t)0x00000020)" +.LASF1860: + .string "DMA_CFGR2_HTIE ((uint16_t)0x0004)" +.LASF4094: + .string "TIM_EventSource_COM ((uint16_t)0x0020)" +.LASF608: + .string "__have_longlong64 1" +.LASF4116: + .string "TIM_SlaveMode_External1 ((uint16_t)0x0007)" +.LASF2351: + .string "GPIO_LCK12 ((uint32_t)0x00001000)" +.LASF2213: + .string "GPIO_CFGHR_MODE9 ((uint32_t)0x00000030)" +.LASF1445: + .string "ADC_DUALMOD_2 ((uint32_t)0x00040000)" +.LASF3421: + .string "DMA2_IT_TC3 ((uint32_t)0x10000200)" +.LASF2451: + .string "AFIO_EXTICR1_EXTI1_PD ((uint16_t)0x0030)" +.LASF1680: + .string "BKP_DATAR1_D ((uint16_t)0xFFFF)" +.LASF2191: + .string "GPIO_CFGLR_CNF2 ((uint32_t)0x00000C00)" +.LASF4018: + .string "TIM_IT_COM ((uint16_t)0x0020)" +.LASF425: + .string "INIT_PREV_EXPORT(fn) INIT_EXPORT(fn, \"2\")" +.LASF638: + .string "__SIZE_T " +.LASF3350: + .string "DBGMCU_WWDG_STOP ((uint32_t)0x00000002)" +.LASF3811: + .string "RCC_APB2Periph_GPIOG ((uint32_t)0x00000100)" +.LASF3732: + .string "PWR_Regulator_ON ((uint32_t)0x00000000)" +.LASF1028: + .string "ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)" +.LASF2467: + .string "AFIO_EXTICR1_EXTI3_PF ((uint16_t)0x5000)" +.LASF390: + .string "RTTHREAD_VERSION ((RT_VERSION * 10000) + (RT_SUBVERSION * 100) + RT_REVISION)" +.LASF2566: + .string "IWDG_PR ((uint8_t)0x07)" +.LASF2955: + .string "TIM_ETPS ((uint16_t)0x3000)" +.LASF4335: + .string "UEP_R_RES_ACK 0x00" +.LASF736: + .string "__nonnull(x) __attribute__((__nonnull__ x))" +.LASF1570: + .string "ADC_L ((uint32_t)0x00F00000)" +.LASF2476: + .string "AFIO_EXTICR2_EXTI4_PD ((uint16_t)0x0003)" +.LASF3181: + .string "USART_GPR_GT ((uint16_t)0xFF00)" +.LASF4699: + .string "EXTI0_IRQn" +.LASF550: + .string "__NEWLIB_PATCHLEVEL__ 0" +.LASF3333: + .string "BKP_DR29 ((uint16_t)0x0088)" +.LASF1616: + .string "ADC_SQ1_4 ((uint32_t)0x00000010)" +.LASF3100: + .string "TIM_LOCK_0 ((uint16_t)0x0100)" +.LASF3061: + .string "TIM_IC4PSC_1 ((uint16_t)0x0800)" +.LASF4222: + .string "RB_UC_CLR_ALL 0x02" +.LASF2713: + .string "RCC_PPRE2_DIV2 ((uint32_t)0x00002000)" +.LASF546: + .string "_NEWLIB_VERSION_H__ 1" +.LASF3168: + .string "USART_CTLR3_RTSE ((uint16_t)0x0100)" +.LASF1356: + .string "TIM4 ((TIM_TypeDef *) TIM4_BASE)" +.LASF2857: + .string "RTC_DIVL_RTC_DIV ((uint16_t)0xFFFF)" +.LASF545: + .string "__NEWLIB_H__ 1" +.LASF1499: + .string "ADC_SMP17_2 ((uint32_t)0x00800000)" +.LASF4783: + .string "SetupSetUsbAddr" +.LASF4229: + .string "RB_UD_GP_BIT 0x02" +.LASF3965: + .string "TIM_CKD_DIV1 ((uint16_t)0x0000)" +.LASF1615: + .string "ADC_SQ1_3 ((uint32_t)0x00000008)" +.LASF1110: + .string "AT_REMOVEDIR 8" +.LASF4059: + .string "TIM_DMA_CC1 ((uint16_t)0x0200)" +.LASF3163: + .string "USART_CTLR3_HDSEL ((uint16_t)0x0008)" +.LASF3730: + .string "PWR_PVDLevel_2V8 ((uint32_t)0x000000C0)" +.LASF4711: + .string "ADC_IRQn" +.LASF4425: + .string "USB_REQ_RECIP_INTERF 0x01" +.LASF2692: + .string "RCC_HPRE_DIV4 ((uint32_t)0x00000090)" +.LASF409: + .string "va_copy(d,s) __builtin_va_copy(d,s)" +.LASF330: + .string "RT_TIMER_THREAD_STACK_SIZE 512" +.LASF4428: + .string "HUB_CLEAR_HUB_FEATURE 0x20" +.LASF1377: + .string "AFIO ((AFIO_TypeDef *) AFIO_BASE)" +.LASF2236: + .string "GPIO_CFGHR_CNF8_0 ((uint32_t)0x00000004)" +.LASF1530: + .string "ADC_SMP7_1 ((uint32_t)0x00400000)" +.LASF3428: + .string "DMA2_IT_GL5 ((uint32_t)0x10010000)" +.LASF3315: + .string "BKP_DR11 ((uint16_t)0x0040)" +.LASF3144: + .string "USART_CTLR1_PCE ((uint16_t)0x0400)" +.LASF932: + .string "_IN_PORT_T_DECLARED " +.LASF3890: + .string "SPI_NSS_Soft ((uint16_t)0x0200)" +.LASF4085: + .string "TIM_ForcedAction_InActive ((uint16_t)0x0040)" +.LASF439: + .string "RT_ETIMEOUT 2" +.LASF4530: + .string "ROOT_DEV_DISCONNECT 0" +.LASF4070: + .string "TIM_TS_ITR1 ((uint16_t)0x0010)" +.LASF3917: + .string "I2S_AudioFreq_192k ((uint32_t)192000)" +.LASF23: + .string "__SIZEOF_LONG_DOUBLE__ 16" +.LASF22: + .string "__SIZEOF_DOUBLE__ 8" +.LASF1292: + .string "TIM5_BASE (APB1PERIPH_BASE + 0x0C00)" +.LASF152: + .string "__FLT_MAX_EXP__ 128" +.LASF2995: + .string "TIM_CC1S ((uint16_t)0x0003)" +.LASF3431: + .string "DMA2_IT_TE5 ((uint32_t)0x10080000)" +.LASF2904: + .string "SPI_I2SCFGR_I2SSTD_1 ((uint16_t)0x0020)" +.LASF3190: + .string "WWDG_CTLR_WDGA ((uint8_t)0x80)" +.LASF147: + .string "__FLT_RADIX__ 2" +.LASF1693: + .string "BKP_DATAR14_D ((uint16_t)0xFFFF)" +.LASF1400: + .string "DMA2 ((DMA_TypeDef *) DMA2_BASE)" +.LASF133: + .string "__INT_FAST64_MAX__ 0x7fffffffffffffffLL" +.LASF3059: + .string "TIM_IC4PSC ((uint16_t)0x0C00)" +.LASF3211: + .string "EXTEN_ULLDO_TRIM ((uint32_t)0x00000300)" +.LASF3027: + .string "TIM_IC2F_0 ((uint16_t)0x1000)" +.LASF4504: + .string "pEP3_IN_DataBuf (pEP3_RAM_Addr+64)" +.LASF3352: + .string "DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00000008)" +.LASF3759: + .string "RCC_PLLMul_15 ((uint32_t)0x00340000)" +.LASF450: + .string "RT_NULL (0)" +.LASF2211: + .string "GPIO_CFGHR_MODE8_0 ((uint32_t)0x00000001)" +.LASF114: + .string "__INT32_C(c) c ## L" +.LASF3149: + .string "USART_CTLR2_ADD ((uint16_t)0x000F)" +.LASF4235: + .string "RB_UH_LOW_SPEED 0x04" +.LASF1169: + .string "ADC1_2_IRQn ADC_IRQn" +.LASF428: + .string "INIT_ENV_EXPORT(fn) INIT_EXPORT(fn, \"5\")" +.LASF1979: + .string "DMA_PADDR7_PA ((uint32_t)0xFFFFFFFF)" +.LASF375: + .string "RT_DEBUG_SLAB 0" +.LASF2363: + .string "AFIO_ECR_PIN_PX2 ((uint8_t)0x02)" +.LASF3547: + .string "OB_STDBY_NoRST ((uint16_t)0x0004)" +.LASF3157: + .string "USART_CTLR2_STOP_0 ((uint16_t)0x1000)" +.LASF4352: + .string "R8_UH_EP_PID R8_UEP2_T_LEN" +.LASF1432: + .string "ADC_JEOCIE ((uint32_t)0x00000080)" +.LASF408: + .string "va_arg(v,l) __builtin_va_arg(v,l)" +.LASF1492: + .string "ADC_SMP16 ((uint32_t)0x001C0000)" +.LASF1372: + .string "I2C1 ((I2C_TypeDef *) I2C1_BASE)" +.LASF1392: + .string "ADC3 ((ADC_TypeDef *) ADC3_BASE)" +.LASF733: + .string "__pure __attribute__((__pure__))" +.LASF431: + .string "RT_MM_PAGE_SIZE 4096" +.LASF2426: + .string "AFIO_PCFR1_ADC1_ETRGREG_REMAP ((uint32_t)0x00040000)" +.LASF3447: + .string "DMA1_FLAG_TE4 ((uint32_t)0x00008000)" +.LASF3159: + .string "USART_CTLR2_LINEN ((uint16_t)0x4000)" +.LASF2276: + .string "GPIO_OUTDR_ODR1 ((uint16_t)0x0002)" +.LASF1510: + .string "ADC_SMP2_1 ((uint32_t)0x00000080)" +.LASF565: + .string "__IEEE_LITTLE_ENDIAN " +.LASF2502: + .string "AFIO_EXTICR3_EXTI9 ((uint16_t)0x00F0)" +.LASF4802: + .string "rt_kprintf" +.LASF3042: + .string "TIM_CC4S_0 ((uint16_t)0x0100)" +.LASF2598: + .string "I2C_CTLR2_LAST ((uint16_t)0x1000)" +.LASF784: + .string "__asserts_exclusive(...) __lock_annotate(assert_exclusive_lock(__VA_ARGS__))" +.LASF1968: + .string "DMA_CNTR3_NDT ((uint16_t)0xFFFF)" +.LASF4408: + .string "HID_GET_REPORT 0x01" +.LASF3555: + .string "FLASH_FLAG_PGERR ((uint32_t)0x00000004)" +.LASF1751: + .string "DAC_DMAEN1 ((uint32_t)0x00001000)" +.LASF604: + .string "_TIME_H_ " +.LASF892: + .string "_UINT32_T_DECLARED " +.LASF1772: + .string "DAC_DHR8R1 ((uint8_t)0xFF)" +.LASF2761: + .string "RCC_LSERDYF ((uint32_t)0x00000002)" +.LASF336: + .string "RT_USING_MESSAGEQUEUE " +.LASF3882: + .string "SPI_Mode_Master ((uint16_t)0x0104)" +.LASF1834: + .string "DMA_CHTIF6 ((uint32_t)0x00400000)" +.LASF582: + .string "__ISO_C_VISIBLE 2011" +.LASF2605: + .string "I2C_OADDR1_ADD4 ((uint16_t)0x0010)" +.LASF2498: + .string "AFIO_EXTICR2_EXTI7_PE ((uint16_t)0x4000)" +.LASF2208: + .string "GPIO_CFGLR_CNF7_1 ((uint32_t)0x80000000)" +.LASF1560: + .string "ADC_SQ15_1 ((uint32_t)0x00000800)" +.LASF994: + .string "_IFBLK 0060000" +.LASF3870: + .string "RTC_IT_ALR ((uint16_t)0x0002)" +.LASF4612: + .string "_close" +.LASF1914: + .string "DMA_CFG5_HTIE ((uint16_t)0x0004)" +.LASF1394: + .string "TIM16 ((TIM_TypeDef *) TIM16_BASE)" +.LASF4479: + .string "USB_ENDP_TYPE_CTRL 0x00" +.LASF721: + .string "__dead2 __attribute__((__noreturn__))" +.LASF1382: + .string "GPIOD ((GPIO_TypeDef *) GPIOD_BASE)" +.LASF599: + .string "_LONG_DOUBLE long double" +.LASF11: + .string "__ATOMIC_ACQUIRE 2" +.LASF2770: + .string "RCC_PLLRDYIE ((uint32_t)0x00001000)" +.LASF4245: + .string "RB_UIE_DETECT 0x01" +.LASF2937: + .string "TIM_OIS2N ((uint16_t)0x0800)" +.LASF4541: + .string "__CH32V10x_IT_H " +.LASF179: + .string "__LDBL_MIN_10_EXP__ (-4931)" +.LASF1626: + .string "ADC_SQ3_2 ((uint32_t)0x00001000)" +.LASF13: + .string "__ATOMIC_ACQ_REL 4" +.LASF2710: + .string "RCC_PPRE2_1 ((uint32_t)0x00001000)" +.LASF3325: + .string "BKP_DR21 ((uint16_t)0x0068)" +.LASF3169: + .string "USART_CTLR3_CTSE ((uint16_t)0x0200)" +.LASF3515: + .string "FLASH_WRProt_Pages24to27 ((uint32_t)0x00000040)" +.LASF3269: + .string "ADC_SampleTime_71Cycles5 ((uint8_t)0x06)" +.LASF3312: + .string "BKP_DR8 ((uint16_t)0x0020)" +.LASF198: + .string "__FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32" +.LASF1300: + .string "IWDG_BASE (APB1PERIPH_BASE + 0x3000)" +.LASF2417: + .string "AFIO_PCFR1_CAN_REMAP ((uint32_t)0x00006000)" +.LASF1569: + .string "ADC_SQ16_4 ((uint32_t)0x00080000)" +.LASF1764: + .string "DAC_MAMP2_1 ((uint32_t)0x02000000)" +.LASF3243: + .string "ADC_Channel_0 ((uint8_t)0x00)" +.LASF1591: + .string "ADC_SQ9_3 ((uint32_t)0x00002000)" +.LASF3524: + .string "FLASH_WRProt_Pages60to63 ((uint32_t)0x00008000)" +.LASF2659: + .string "PWR_CSR_WUF ((uint16_t)0x0001)" +.LASF4564: + .string "__uint32_t" +.LASF2730: + .string "RCC_PLLMULL_3 ((uint32_t)0x00200000)" +.LASF526: + .string "RT_DEVICE_CTRL_MTD_FORMAT 0x10" +.LASF2441: + .string "AFIO_EXTICR1_EXTI0_PA ((uint16_t)0x0000)" +.LASF3814: + .string "RCC_APB2Periph_TIM1 ((uint32_t)0x00000800)" +.LASF1939: + .string "DMA_CFG6_PSIZE_0 ((uint16_t)0x0100)" +.LASF2632: + .string "I2C_STAR2_GENCALL ((uint16_t)0x0010)" +.LASF1252: + .string "PTRDIFF_MAX (__PTRDIFF_MAX__)" +.LASF1443: + .string "ADC_DUALMOD_0 ((uint32_t)0x00010000)" +.LASF1368: + .string "USART2 ((USART_TypeDef *) USART2_BASE)" +.LASF4682: + .string "rt_assert_hook" +.LASF4430: + .string "HUB_GET_BUS_STATE 0xA3" +.LASF3224: + .string "ADC_Mode_RegInjecSimult ((uint32_t)0x00010000)" +.LASF3538: + .string "FLASH_WRProt_Pages116to119 ((uint32_t)0x20000000)" +.LASF3246: + .string "ADC_Channel_3 ((uint8_t)0x03)" +.LASF3076: + .string "TIM_CC3P ((uint16_t)0x0200)" +.LASF2624: + .string "I2C_STAR1_AF ((uint16_t)0x0400)" +.LASF238: + .string "__FLT32X_MAX_10_EXP__ 308" +.LASF788: + .string "__requires_unlocked(...) __lock_annotate(locks_excluded(__VA_ARGS__))" +.LASF262: + .string "__DEC32_MIN_EXP__ (-94)" +.LASF2255: + .string "GPIO_CFGHR_CNF14_1 ((uint32_t)0x08000000)" +.LASF3491: + .string "EXTI_Line10 ((uint32_t)0x00400)" +.LASF1490: + .string "ADC_SMP15_1 ((uint32_t)0x00010000)" +.LASF2040: + .string "EXTI_RTENR_TR13 ((uint32_t)0x00002000)" +.LASF1903: + .string "DMA_CFG4_PSIZE_0 ((uint16_t)0x0100)" +.LASF1605: + .string "ADC_SQ12 ((uint32_t)0x3E000000)" +.LASF506: + .string "RT_DEVICE_FLAG_DMA_TX 0x800" +.LASF324: + .string "RT_USING_HOOK " +.LASF3116: + .string "TIM_DBL_1 ((uint16_t)0x0200)" +.LASF1653: + .string "ADC_JSQ2 ((uint32_t)0x000003E0)" +.LASF3405: + .string "DMA1_IT_TC6 ((uint32_t)0x00200000)" +.LASF2002: + .string "EXTI_INTENR_MR15 ((uint32_t)0x00008000)" +.LASF757: + .string "__strong_reference(sym,aliassym) extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))" +.LASF164: + .string "__DBL_MIN_EXP__ (-1021)" +.LASF368: + .string "BSP_USING_UART " +.LASF1260: + .string "INT16_C(x) __INT16_C(x)" +.LASF972: + .string "PTHREAD_INHERIT_SCHED 1" +.LASF10: + .string "__ATOMIC_SEQ_CST 5" +.LASF1072: + .string "FNONBIO _FNONBLOCK" +.LASF2973: + .string "TIM_COMDE ((uint16_t)0x2000)" +.LASF4538: + .string "HUB_MAX_PORTS 4" +.LASF2080: + .string "EXTI_SWIEVR_SWIEVR13 ((uint32_t)0x00002000)" +.LASF4192: + .string "USART_IrDAMode_LowPower ((uint16_t)0x0004)" +.LASF4196: + .string "USART_FLAG_TXE ((uint16_t)0x0080)" +.LASF855: + .string "_REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)" +.LASF1325: + .string "TIM8_BASE (APB2PERIPH_BASE + 0x3400)" +.LASF2222: + .string "GPIO_CFGHR_MODE12 ((uint32_t)0x00030000)" +.LASF3704: + .string "I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED ((uint32_t)0x00860080)" +.LASF4004: + .string "TIM_ICPolarity_Falling ((uint16_t)0x0002)" +.LASF4327: + .string "R8_UEP1_T_LEN (*((PUINT8V)(0x40023434)))" +.LASF4307: + .string "RB_UEP5_TX_EN 0x04" +.LASF660: + .string "_WCHAR_T_H " +.LASF904: + .string "_PDP_ENDIAN 3412" +.LASF4215: + .string "RB_UC_LOW_SPEED 0x40" +.LASF3492: + .string "EXTI_Line11 ((uint32_t)0x00800)" +.LASF2135: + .string "FLASH_OBR_OPTERR ((uint16_t)0x0001)" +.LASF195: + .string "__FLT32_MAX_EXP__ 128" +.LASF2410: + .string "AFIO_PCFR1_TIM3_REMAP ((uint32_t)0x00000C00)" +.LASF4132: + .string "TIM_DMABurstLength_2Bytes TIM_DMABurstLength_2Transfers" +.LASF804: + .string "__lock_acquire_recursive(lock) __retarget_lock_acquire_recursive(lock)" +.LASF1780: + .string "DAC_RD8BDHR_DACC1DHR ((uint16_t)0x00FF)" +.LASF4754: + .string "PFIC_Type" +.LASF2153: + .string "FLASH_WRPR1_WRPR1 ((uint32_t)0x00FF0000)" +.LASF2772: + .string "RCC_LSERDYC ((uint32_t)0x00020000)" +.LASF2657: + .string "PWR_CTLR_PLS_2V9 ((uint16_t)0x00E0)" +.LASF2745: + .string "RCC_PLLMULL12 ((uint32_t)0x00280000)" +.LASF3953: + .string "TIM_OCMode_Timing ((uint16_t)0x0000)" +.LASF2917: + .string "TIM_OPM ((uint16_t)0x0008)" +.LASF727: + .string "__section(x) __attribute__((__section__(x)))" +.LASF637: + .string "_T_SIZE " +.LASF1259: + .string "UINT8_C(x) __UINT8_C(x)" +.LASF66: + .string "__INTPTR_TYPE__ int" +.LASF4548: + .string "NVIC_PriorityGroup_3 ((uint32_t)0x03)" +.LASF3194: + .string "WWDG_CFGR_W2 ((uint16_t)0x0004)" +.LASF45: + .string "__INT64_TYPE__ long long int" +.LASF620: + .string "_STDDEF_H_ " +.LASF4434: + .string "HUB_SET_HUB_DESCRIPTOR 0x20" +.LASF2340: + .string "GPIO_LCK1 ((uint32_t)0x00000002)" +.LASF2028: + .string "EXTI_RTENR_TR1 ((uint32_t)0x00000002)" +.LASF37: + .string "__INTMAX_TYPE__ long long int" +.LASF1791: + .string "DMA_TEIF2 ((uint32_t)0x00000080)" +.LASF1970: + .string "DMA_CNTR5_NDT ((uint16_t)0xFFFF)" +.LASF3686: + .string "I2C_FLAG_BERR ((uint32_t)0x10000100)" +.LASF837: + .ascii "_REENT_INIT(var) { 0, _REENT_STDIO_STREAM(&(var), 0), _REENT" + .ascii "_STDIO_STREAM(&(var), 1), _REENT_STDIO_STREAM(&(var), 2), 0," + .ascii " \"\", 0, _NULL, 0, _NULL, _NULL, 0, _NULL, _NULL, 0, _NULL," + .ascii " { { 0, _NULL, \"\", {0, 0, 0, 0, 0, 0, 0, 0, 0}, 0, 1, {" + .string " {_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, {_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, _RAND48_ADD }, {0, {0}}, {0, {0}}, {0, {0}}, \"\", \"\", 0, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}} } }, _REENT_INIT_ATEXIT _NULL, {_NULL, 0, _NULL} }" +.LASF87: + .string "__WCHAR_WIDTH__ 32" +.LASF4186: + .string "USART_DMAReq_Tx ((uint16_t)0x0080)" +.LASF3382: + .string "DMA_IT_HT ((uint32_t)0x00000004)" +.LASF4656: + .string "_rand_next" +.LASF2668: + .string "RCC_HSERDY ((uint32_t)0x00020000)" +.LASF2607: + .string "I2C_OADDR1_ADD6 ((uint16_t)0x0040)" +.LASF3174: + .string "USART_GPR_PSC_1 ((uint16_t)0x0002)" +.LASF1320: + .string "GPIOG_BASE (APB2PERIPH_BASE + 0x2000)" +.LASF2662: + .string "PWR_CSR_EWUP ((uint16_t)0x0100)" +.LASF1294: + .string "TIM7_BASE (APB1PERIPH_BASE + 0x1400)" +.LASF1272: + .string "RV_STATIC_INLINE static inline" +.LASF2399: + .string "AFIO_PCFR1_TIM1_REMAP_1 ((uint32_t)0x00000080)" +.LASF4312: + .string "RB_UEP7_BUF_MOD 0x01" +.LASF3721: + .string "IWDG_FLAG_PVU ((uint16_t)0x0001)" +.LASF4270: + .string "R8_USB_INT_ST (*((PUINT8V)(0x40023407)))" +.LASF1988: + .string "EXTI_INTENR_MR1 ((uint32_t)0x00000002)" +.LASF4497: + .string "pSetupReqPak ((PUSB_SETUP_REQ)pEP0_RAM_Addr)" +.LASF3681: + .string "I2C_FLAG_TIMEOUT ((uint32_t)0x10004000)" +.LASF1676: + .string "ADC_IDATAR3_JDATA ((uint16_t)0xFFFF)" +.LASF3936: + .string "SPI_Direction_Tx ((uint16_t)0x4000)" +.LASF257: + .string "__FLT64X_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F64x" +.LASF1108: + .string "AT_SYMLINK_NOFOLLOW 2" +.LASF1031: + .string "S_ISCHR(m) (((m)&_IFMT) == _IFCHR)" +.LASF4216: + .string "RB_UC_DEV_PU_EN 0x20" +.LASF92: + .string "__INTMAX_C(c) c ## LL" +.LASF1419: + .string "ADC_AWD ((uint8_t)0x01)" +.LASF1323: + .string "TIM1_BASE (APB2PERIPH_BASE + 0x2C00)" +.LASF3766: + .string "RCC_SYSCLK_Div4 ((uint32_t)0x00000090)" +.LASF2651: + .string "PWR_CTLR_PLS_2V3 ((uint16_t)0x0020)" +.LASF4353: + .string "MASK_UH_TOKEN 0xF0" +.LASF2962: + .string "TIM_CC2IE ((uint16_t)0x0004)" +.LASF2358: + .string "AFIO_ECR_PIN_1 ((uint8_t)0x02)" +.LASF3669: + .string "I2C_IT_ADD10 ((uint32_t)0x02000008)" +.LASF1905: + .string "DMA_CFG4_MSIZE ((uint16_t)0x0C00)" +.LASF301: + .string "__SIZEOF_PTRDIFF_T__ 4" +.LASF3136: + .string "USART_CTLR1_RE ((uint16_t)0x0004)" +.LASF2125: + .string "FLASH_CTLR_STRT ((uint16_t)0x0040)" +.LASF2902: + .string "SPI_I2SCFGR_I2SSTD ((uint16_t)0x0030)" +.LASF489: + .string "RT_WAITING_FOREVER -1" +.LASF4632: + .string "_result" +.LASF3539: + .string "FLASH_WRProt_Pages120to123 ((uint32_t)0x40000000)" +.LASF229: + .string "__FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128" +.LASF3053: + .string "TIM_IC3PSC_1 ((uint16_t)0x0008)" +.LASF2891: + .string "SPI_STATR_OVR ((uint8_t)0x40)" +.LASF1341: + .string "DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x0080)" +.LASF1508: + .string "ADC_SMP2 ((uint32_t)0x000001C0)" +.LASF2579: + .string "I2C_CTLR1_NOSTRETCH ((uint16_t)0x0080)" +.LASF2648: + .string "PWR_CTLR_PLS_1 ((uint16_t)0x0040)" +.LASF624: + .string "_T_PTRDIFF " +.LASF3726: + .string "PWR_PVDLevel_2V4 ((uint32_t)0x00000040)" +.LASF3875: + .string "RTC_FLAG_ALR ((uint16_t)0x0002)" +.LASF1273: + .string "PFIC ((PFIC_Type *) 0xE000E000 )" +.LASF1704: + .string "BKP_DATAR25_D ((uint16_t)0xFFFF)" +.LASF3264: + .string "ADC_SampleTime_7Cycles5 ((uint8_t)0x01)" +.LASF2972: + .string "TIM_CC4DE ((uint16_t)0x1000)" +.LASF444: + .string "RT_EBUSY 7" +.LASF1841: + .string "DMA_CFGR1_TCIE ((uint16_t)0x0002)" +.LASF644: + .string "_SIZE_T_DECLARED " +.LASF3748: + .string "RCC_PLLMul_4 ((uint32_t)0x00080000)" +.LASF1825: + .string "DMA_CTCIF4 ((uint32_t)0x00002000)" +.LASF1588: + .string "ADC_SQ9_0 ((uint32_t)0x00000400)" +.LASF4061: + .string "TIM_DMA_CC3 ((uint16_t)0x0800)" +.LASF3566: + .string "GPIO_Pin_3 ((uint16_t)0x0008)" +.LASF1777: + .string "DAC_RD12BDHR_DACC2DHR ((uint32_t)0x0FFF0000)" +.LASF4796: + .string "tentry" +.LASF2794: + .string "RCC_BKPRST ((uint32_t)0x08000000)" +.LASF702: + .string "__GNUCLIKE_BUILTIN_NEXT_ARG 1" +.LASF1861: + .string "DMA_CFGR2_TEIE ((uint16_t)0x0008)" +.LASF4322: + .string "R16_UH_TX_DMA R16_UEP3_DMA" +.LASF2077: + .string "EXTI_SWIEVR_SWIEVR10 ((uint32_t)0x00000400)" +.LASF2429: + .string "AFIO_PCFR1_SWJ_CFG ((uint32_t)0x07000000)" +.LASF9: + .string "__ATOMIC_RELAXED 0" +.LASF1431: + .string "ADC_AWDIE ((uint32_t)0x00000040)" +.LASF4020: + .string "TIM_IT_Break ((uint16_t)0x0080)" +.LASF3813: + .string "RCC_APB2Periph_ADC2 ((uint32_t)0x00000400)" +.LASF1371: + .string "UART5 ((USART_TypeDef *) UART5_BASE)" +.LASF3022: + .string "TIM_IC1F_3 ((uint16_t)0x0080)" +.LASF4330: + .string "RB_UEP_T_TOG 0x40" +.LASF1857: + .string "DMA_CFGR1_MEM2MEM ((uint16_t)0x4000)" +.LASF4318: + .string "R16_UEP4_DMA (*((PUINT16V)(0x40023420)))" +.LASF1741: + .string "DAC_TSEL1_1 ((uint32_t)0x00000010)" +.LASF1738: + .string "DAC_TEN1 ((uint32_t)0x00000004)" +.LASF2397: + .string "AFIO_PCFR1_TIM1_REMAP ((uint32_t)0x000000C0)" +.LASF2894: + .string "SPI_CRCR_CRCPOLY ((uint16_t)0xFFFF)" +.LASF3712: + .string "IWDG_WriteAccess_Enable ((uint16_t)0x5555)" +.LASF1115: + .string "O_DIRECTORY 0x200000" +.LASF1729: + .string "BKP_CTI ((uint16_t)0x0002)" +.LASF432: + .string "RT_MM_PAGE_MASK (RT_MM_PAGE_SIZE - 1)" +.LASF141: + .string "__UINTPTR_MAX__ 0xffffffffU" +.LASF3902: + .string "I2S_Mode_SlaveTx ((uint16_t)0x0000)" +.LASF1740: + .string "DAC_TSEL1_0 ((uint32_t)0x00000008)" +.LASF3112: + .string "TIM_DBA_3 ((uint16_t)0x0008)" +.LASF448: + .string "RT_ALIGN(size,align) (((size) + (align) - 1) & ~((align) - 1))" +.LASF98: + .string "__SIG_ATOMIC_WIDTH__ 32" +.LASF4193: + .string "USART_IrDAMode_Normal ((uint16_t)0x0000)" +.LASF1734: + .string "CRC_IDR_IDATAR ((uint8_t)0xFF)" +.LASF2033: + .string "EXTI_RTENR_TR6 ((uint32_t)0x00000040)" +.LASF1243: + .string "INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)" +.LASF1318: + .string "GPIOE_BASE (APB2PERIPH_BASE + 0x1800)" +.LASF1251: + .string "SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX))" +.LASF412: + .string "_VA_LIST " +.LASF1427: + .string "ADC_AWDCH_2 ((uint32_t)0x00000004)" +.LASF2026: + .string "EXTI_EVENR_MR19 ((uint32_t)0x00080000)" +.LASF172: + .string "__DBL_DENORM_MIN__ ((double)4.94065645841246544176568792868221372e-324L)" +.LASF4410: + .string "HID_GET_PROTOCOL 0x03" +.LASF3920: + .string "I2S_AudioFreq_44k ((uint32_t)44100)" +.LASF162: + .string "__DBL_MANT_DIG__ 53" +.LASF2616: + .string "I2C_STAR1_ADDR ((uint16_t)0x0002)" +.LASF1087: + .string "F_DUPFD 0" +.LASF3322: + .string "BKP_DR18 ((uint16_t)0x005C)" +.LASF533: + .string "RTGRAPHIC_CTRL_SET_MODE 4" +.LASF1882: + .string "DMA_CFGR3_PINC ((uint16_t)0x0040)" +.LASF1437: + .string "ADC_JDISCEN ((uint32_t)0x00001000)" +.LASF4669: + .string "_h_errno" +.LASF358: + .string "FINSH_ARG_MAX 10" +.LASF2588: + .string "I2C_CTLR2_FREQ_0 ((uint16_t)0x0001)" +.LASF1195: + .string "__LEAST8 \"hh\"" +.LASF3598: + .string "GPIO_Remap_ADC1_ETRGREG ((uint32_t)0x00200004)" +.LASF2079: + .string "EXTI_SWIEVR_SWIEVR12 ((uint32_t)0x00001000)" +.LASF3633: + .string "I2C_DutyCycle_16_9 ((uint16_t)0x4000)" +.LASF4120: + .string "TIM_FLAG_CC1 ((uint16_t)0x0002)" +.LASF1203: + .string "__int_fast8_t_defined 1" +.LASF1081: + .string "FCREAT _FCREAT" +.LASF1531: + .string "ADC_SMP7_2 ((uint32_t)0x00800000)" +.LASF1401: + .string "DMA1_Channel1 ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE)" +.LASF1661: + .string "ADC_JSQ3_1 ((uint32_t)0x00000800)" +.LASF2394: + .string "AFIO_PCFR1_USART3_REMAP_NOREMAP ((uint32_t)0x00000000)" +.LASF2848: + .string "RTC_CTLRL_SECF ((uint8_t)0x01)" +.LASF878: + .string "_MACHTIME_H_ " +.LASF369: + .string "RT_USING_UART1 " +.LASF3500: + .string "EXTI_Line19 ((uint32_t)0x80000)" +.LASF3925: + .string "I2S_AudioFreq_8k ((uint32_t)8000)" +.LASF2350: + .string "GPIO_LCK11 ((uint32_t)0x00000800)" +.LASF3935: + .string "SPI_Direction_Rx ((uint16_t)0xBFFF)" +.LASF121: + .string "__UINT_LEAST16_MAX__ 0xffff" +.LASF1327: + .string "ADC3_BASE (APB2PERIPH_BASE + 0x3C00)" +.LASF820: + .string "__Long long" +.LASF4791: + .string "mstatus" +.LASF621: + .string "_ANSI_STDDEF_H " +.LASF447: + .string "RT_EINVAL 10" +.LASF1907: + .string "DMA_CFG4_MSIZE_1 ((uint16_t)0x0800)" +.LASF943: + .string "_TIME_T_DECLARED " +.LASF555: + .string "_MB_LEN_MAX 1" +.LASF1218: + .string "UINT16_MAX (__UINT16_MAX__)" +.LASF62: + .string "__UINT_FAST8_TYPE__ unsigned int" +.LASF3105: + .string "TIM_BKP ((uint16_t)0x2000)" +.LASF3092: + .string "TIM_DTG_1 ((uint16_t)0x0002)" +.LASF4801: + .string "frame" +.LASF2709: + .string "RCC_PPRE2_0 ((uint32_t)0x00000800)" +.LASF3719: + .string "IWDG_Prescaler_128 ((uint8_t)0x05)" +.LASF2569: + .string "IWDG_PR_2 ((uint8_t)0x04)" +.LASF1289: + .string "TIM2_BASE (APB1PERIPH_BASE + 0x0000)" +.LASF3278: + .string "ADC_ExternalTrigInjecConv_None ((uint32_t)0x00007000)" +.LASF2428: + .string "AFIO_PCFR1_ADC2_ETRGREG_REMAP ((uint32_t)0x00100000)" +.LASF1895: + .string "DMA_CFG4_TCIE ((uint16_t)0x0002)" +.LASF911: + .string "BYTE_ORDER _BYTE_ORDER" +.LASF1574: + .string "ADC_L_3 ((uint32_t)0x00800000)" +.LASF4594: + .string "_fnargs" +.LASF3947: + .string "I2S_FLAG_UDR ((uint16_t)0x0008)" +.LASF4351: + .string "R8_UEP2_CTRL (*((PUINT8V)(0x4002343a)))" +.LASF2908: + .string "SPI_I2SCFGR_I2SCFG_1 ((uint16_t)0x0200)" +.LASF3978: + .string "TIM_OutputState_Enable ((uint16_t)0x0001)" +.LASF1699: + .string "BKP_DATAR20_D ((uint16_t)0xFFFF)" +.LASF2114: + .string "FLASH_KEYR_FKEYR ((uint32_t)0xFFFFFFFF)" +.LASF858: + .string "_REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)" +.LASF443: + .string "RT_ENOSYS 6" +.LASF2000: + .string "EXTI_INTENR_MR13 ((uint32_t)0x00002000)" +.LASF4223: + .string "RB_UC_DMA_EN 0x01" +.LASF575: + .string "_POSIX_C_SOURCE" +.LASF4137: + .string "TIM_DMABurstLength_7Bytes TIM_DMABurstLength_7Transfers" +.LASF3756: + .string "RCC_PLLMul_12 ((uint32_t)0x00280000)" +.LASF1945: + .string "DMA_CFG6_PL_0 ((uint16_t)0x1000)" +.LASF3762: + .string "RCC_SYSCLKSource_HSE ((uint32_t)0x00000001)" +.LASF1765: + .string "DAC_MAMP2_2 ((uint32_t)0x04000000)" +.LASF144: + .string "__FLT_EVAL_METHOD__ 0" +.LASF3580: + .string "GPIO_Remap_SPI1 ((uint32_t)0x00000001)" +.LASF4315: + .string "R16_UEP2_DMA (*((PUINT16V)(0x40023418)))" +.LASF3298: + .string "__CH32V10x_BKP_H " +.LASF2811: + .string "RCC_ADC1EN ((uint32_t)0x00000200)" +.LASF3807: + .string "RCC_APB2Periph_GPIOC ((uint32_t)0x00000010)" +.LASF3655: + .string "I2C_NACKPosition_Current ((uint16_t)0xF7FF)" +.LASF4651: + .string "_unused_rand" +.LASF3436: + .string "DMA1_FLAG_GL2 ((uint32_t)0x00000010)" +.LASF4285: + .string "RB_UEP1_RX_EN 0x80" +.LASF4803: + .string "rt_hw_interrupt_disable" +.LASF4443: + .string "HUB_PORT_RESET 4" +.LASF3191: + .string "WWDG_CFGR_W ((uint16_t)0x007F)" +.LASF1262: + .string "INT32_C(x) __INT32_C(x)" +.LASF245: + .string "__FLT32X_HAS_INFINITY__ 1" +.LASF793: + .string "_SYS__TYPES_H " +.LASF3544: + .string "OB_IWDG_HW ((uint16_t)0x0000)" +.LASF1106: + .string "AT_FDCWD -2" +.LASF2941: + .string "TIM_SMS ((uint16_t)0x0007)" +.LASF2100: + .string "EXTI_INTF_INTF13 ((uint32_t)0x00002000)" +.LASF4692: + .string "Software_IRQn" +.LASF2308: + .string "GPIO_BSHR_BR1 ((uint32_t)0x00020000)" +.LASF3210: + .string "EXTEN_LOCKUP_RSTF ((uint32_t)0x00000080)" +.LASF4806: + .string "E:\\DevBoard\\ARTT\\00_gitee_rtt\\rt-thread\\libcpu\\risc-v\\ch32v103\\cpuport.c" +.LASF4376: + .string "R32_USB_EP7_CTRL (*((PUINT32V)(0x4002344c)))" +.LASF200: + .string "__FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32" +.LASF3065: + .string "TIM_IC4F_2 ((uint16_t)0x4000)" +.LASF81: + .string "__SIZE_MAX__ 0xffffffffU" +.LASF4050: + .string "TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00)" +.LASF3214: + .string "EXTEN_IDO_TRIM ((uint32_t)0x00000400)" +.LASF2075: + .string "EXTI_SWIEVR_SWIEVR8 ((uint32_t)0x00000100)" +.LASF923: + .string "howmany(x,y) (((x)+((y)-1))/(y))" +.LASF1061: + .string "O_APPEND _FAPPEND" +.LASF641: + .string "_SIZE_T_DEFINED_ " +.LASF1915: + .string "DMA_CFG5_TEIE ((uint16_t)0x0008)" +.LASF3923: + .string "I2S_AudioFreq_16k ((uint32_t)16000)" +.LASF4784: + .string "SetupSetUsbConfig" +.LASF4053: + .string "TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00)" +.LASF25: + .string "__CHAR_BIT__ 8" +.LASF233: + .string "__FLT32X_MANT_DIG__ 53" +.LASF3835: + .string "RCC_APB1Periph_SPI2 ((uint32_t)0x00004000)" +.LASF2639: + .string "I2C_CKCFGR_FS ((uint16_t)0x8000)" +.LASF288: + .string "__GCC_ATOMIC_CHAR16_T_LOCK_FREE 1" +.LASF808: + .string "__lock_release_recursive(lock) __retarget_lock_release_recursive(lock)" +.LASF1936: + .string "DMA_CFG6_PINC ((uint16_t)0x0040)" +.LASF3903: + .string "I2S_Mode_SlaveRx ((uint16_t)0x0100)" +.LASF2360: + .string "AFIO_ECR_PIN_3 ((uint8_t)0x08)" +.LASF4596: + .string "_fntypes" +.LASF310: + .string "__riscv_cmodel_medlow 1" +.LASF323: + .string "RT_USING_OVERFLOW_CHECK " +.LASF3223: + .string "ADC_Mode_Independent ((uint32_t)0x00000000)" +.LASF1538: + .string "ADC_SMP9_1 ((uint32_t)0x10000000)" +.LASF3170: + .string "USART_CTLR3_CTSIE ((uint16_t)0x0400)" +.LASF580: + .string "__BSD_VISIBLE 1" +.LASF2062: + .string "EXTI_FTENR_TR15 ((uint32_t)0x00008000)" +.LASF935: + .string "__u_int_defined " +.LASF1828: + .string "DMA_CGIF5 ((uint32_t)0x00010000)" +.LASF2102: + .string "EXTI_INTF_INTF15 ((uint32_t)0x00008000)" +.LASF2688: + .string "RCC_HPRE_2 ((uint32_t)0x00000040)" +.LASF173: + .string "__DBL_HAS_DENORM__ 1" +.LASF1731: + .string "BKP_TEF ((uint16_t)0x0100)" +.LASF2199: + .string "GPIO_CFGLR_CNF4_1 ((uint32_t)0x00080000)" +.LASF1275: + .string "NVIC_KEY1 ((uint32_t)0xFA050000)" +.LASF231: + .string "__FLT128_HAS_INFINITY__ 1" +.LASF1902: + .string "DMA_CFG4_PSIZE ((uint16_t)0x0300)" +.LASF1140: + .string "rt_spin_unlock(lock) rt_exit_critical()" +.LASF2250: + .string "GPIO_CFGHR_CNF13 ((uint32_t)0x00C00000)" +.LASF1715: + .string "BKP_DATAR36_D ((uint16_t)0xFFFF)" +.LASF4547: + .string "NVIC_PriorityGroup_2 ((uint32_t)0x02)" +.LASF4375: + .string "R8_UEP6_CTRL (*((PUINT8V)(0x4002344a)))" +.LASF4328: + .string "R8_UEP1_CTRL (*((PUINT8V)(0x40023436)))" +.LASF4219: + .string "MASK_UC_SYS_CTRL 0x30" +.LASF851: + .string "_REENT_MP_RESULT(ptr) ((ptr)->_result)" +.LASF1862: + .string "DMA_CFGR2_DIR ((uint16_t)0x0010)" +.LASF2479: + .string "AFIO_EXTICR2_EXTI4_PG ((uint16_t)0x0006)" +.LASF3255: + .string "ADC_Channel_12 ((uint8_t)0x0C)" +.LASF3508: + .string "FLASH_PrefetchBuffer_Disable ((uint32_t)0x00000000)" +.LASF1901: + .string "DMA_CFG4_MINC ((uint16_t)0x0080)" +.LASF467: + .string "RT_THREAD_READY 0x01" +.LASF1190: + .string "__INT64 \"ll\"" +.LASF3401: + .string "DMA1_IT_TC5 ((uint32_t)0x00020000)" +.LASF3033: + .string "TIM_CC3S_1 ((uint16_t)0x0002)" +.LASF3393: + .string "DMA1_IT_TC3 ((uint32_t)0x00000200)" +.LASF4360: + .string "R8_UEP3_T_LEN (*((PUINT16V)(0x4002343c)))" +.LASF3922: + .string "I2S_AudioFreq_22k ((uint32_t)22050)" +.LASF4795: + .string "from" +.LASF1099: + .string "F_CNVT 12" +.LASF4576: + .string "_flock_t" +.LASF3858: + .string "RCC_FLAG_LSERDY ((uint8_t)0x41)" +.LASF1366: + .string "SPI2 ((SPI_TypeDef *) SPI2_BASE)" +.LASF886: + .string "_UINT8_T_DECLARED " +.LASF1929: + .string "DMA_CFG5_MEM2MEM ((uint16_t)0x4000)" +.LASF552: + .string "_WANT_IO_LONG_LONG 1" +.LASF156: + .string "__FLT_MIN__ 1.17549435082228750796873653722224568e-38F" +.LASF2383: + .string "AFIO_ECR_PORT_PC ((uint8_t)0x20)" +.LASF3261: + .string "ADC_Channel_TempSensor ((uint8_t)ADC_Channel_16)" +.LASF3007: + .string "TIM_CC2S_1 ((uint16_t)0x0200)" +.LASF4346: + .string "R8_UH_SETUP R8_UEP1_CTRL" +.LASF2484: + .string "AFIO_EXTICR2_EXTI5_PE ((uint16_t)0x0040)" +.LASF158: + .string "__FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F" +.LASF1462: + .string "ADC_EXTSEL_1 ((uint32_t)0x00040000)" +.LASF2512: + .string "AFIO_EXTICR3_EXTI9_PA ((uint16_t)0x0000)" +.LASF4118: + .string "TIM_MasterSlaveMode_Disable ((uint16_t)0x0000)" +.LASF3969: + .string "TIM_CounterMode_Down ((uint16_t)0x0010)" +.LASF2365: + .string "AFIO_ECR_PIN_PX4 ((uint8_t)0x04)" +.LASF2595: + .string "I2C_CTLR2_ITEVTEN ((uint16_t)0x0200)" +.LASF1307: + .string "I2C1_BASE (APB1PERIPH_BASE + 0x5400)" +.LASF3057: + .string "TIM_IC3F_2 ((uint16_t)0x0040)" +.LASF2367: + .string "AFIO_ECR_PIN_PX6 ((uint8_t)0x06)" +.LASF2045: + .string "EXTI_RTENR_TR18 ((uint32_t)0x00040000)" +.LASF4763: + .string "pEP4_RAM_Addr" +.LASF1625: + .string "ADC_SQ3_1 ((uint32_t)0x00000800)" +.LASF3691: + .string "I2C_FLAG_BTF ((uint32_t)0x10000004)" +.LASF2196: + .string "GPIO_CFGLR_CNF3_1 ((uint32_t)0x00008000)" +.LASF1522: + .string "ADC_SMP5_1 ((uint32_t)0x00010000)" +.LASF2613: + .string "I2C_OADDR2_ADD2 ((uint8_t)0xFE)" +.LASF687: + .string "__has_builtin(x) 0" +.LASF957: + .string "_NLINK_T_DECLARED " +.LASF3349: + .string "DBGMCU_IWDG_STOP ((uint32_t)0x00000001)" +.LASF480: + .string "RT_THREAD_CTRL_STARTUP 0x00" +.LASF3287: + .string "ADC_AnalogWatchdog_AllInjecEnable ((uint32_t)0x00400000)" +.LASF1544: + .string "ADC_HT ((uint16_t)0x0FFF)" +.LASF1670: + .string "ADC_JSQ4_4 ((uint32_t)0x00080000)" +.LASF3729: + .string "PWR_PVDLevel_2V7 ((uint32_t)0x000000A0)" +.LASF2924: + .string "TIM_CKD_0 ((uint16_t)0x0100)" +.LASF1224: + .string "UINT32_MAX (__UINT32_MAX__)" +.LASF1989: + .string "EXTI_INTENR_MR2 ((uint32_t)0x00000004)" +.LASF857: + .string "_REENT_EMERGENCY(ptr) ((ptr)->_emergency)" +.LASF1271: + .string "__IO volatile" +.LASF1423: + .string "ADC_STRT ((uint8_t)0x10)" +.LASF343: + .string "RT_VER_NUM 0x40003" +.LASF579: + .string "__ATFILE_VISIBLE 1" +.LASF202: + .string "__FLT32_HAS_DENORM__ 1" +.LASF2732: + .string "RCC_PLLSRC_HSE ((uint32_t)0x00010000)" +.LASF457: + .string "RT_TIMER_FLAG_HARD_TIMER 0x0" +.LASF2536: + .string "AFIO_EXTICR4_EXTI15 ((uint16_t)0xF000)" +.LASF4291: + .string "RB_UEP3_RX_EN 0x80" +.LASF367: + .string "BSP_USING_PIN " +.LASF2636: + .string "I2C_STAR2_PEC ((uint16_t)0xFF00)" +.LASF3825: + .string "RCC_APB1Periph_TIM2 ((uint32_t)0x00000001)" +.LASF1166: + .string "HSE_STARTUP_TIMEOUT ((uint16_t)0x500)" +.LASF131: + .string "__INT_FAST32_MAX__ 0x7fffffff" +.LASF2343: + .string "GPIO_LCK4 ((uint32_t)0x00000010)" +.LASF4786: + .string "SetupClrEndpStall" +.LASF2031: + .string "EXTI_RTENR_TR4 ((uint32_t)0x00000010)" +.LASF1466: + .string "ADC_SWSTART ((uint32_t)0x00400000)" +.LASF4782: + .string "SetupGetCfgDescr" +.LASF3785: + .string "RCC_USBCLKSource_PLLCLK_Div1 ((uint8_t)0x01)" +.LASF3512: + .string "FLASH_WRProt_Pages12to15 ((uint32_t)0x00000008)" +.LASF3794: + .string "RCC_RTCCLKSource_LSI ((uint32_t)0x00000200)" +.LASF5: + .string "__GNUC__ 8" +.LASF2753: + .string "RCC_MCO_1 ((uint32_t)0x02000000)" +.LASF2501: + .string "AFIO_EXTICR3_EXTI8 ((uint16_t)0x000F)" +.LASF2050: + .string "EXTI_FTENR_TR3 ((uint32_t)0x00000008)" +.LASF4225: + .string "RB_UD_PD_DIS 0x80" +.LASF97: + .string "__SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)" +.LASF4036: + .string "TIM_DMABase_CCR3 ((uint16_t)0x000F)" +.LASF4067: + .string "TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000)" +.LASF159: + .string "__FLT_HAS_DENORM__ 1" +.LASF3522: + .string "FLASH_WRProt_Pages52to55 ((uint32_t)0x00002000)" +.LASF3253: + .string "ADC_Channel_10 ((uint8_t)0x0A)" +.LASF3817: + .string "RCC_APB2Periph_USART1 ((uint32_t)0x00004000)" +.LASF2030: + .string "EXTI_RTENR_TR3 ((uint32_t)0x00000008)" +.LASF1185: + .string "_INTPTR_EQ_INT " +.LASF2316: + .string "GPIO_BSHR_BR9 ((uint32_t)0x02000000)" +.LASF1107: + .string "AT_EACCESS 1" +.LASF1410: + .string "DMA2_Channel3 ((DMA_Channel_TypeDef *) DMA2_Channel3_BASE)" +.LASF1997: + .string "EXTI_INTENR_MR10 ((uint32_t)0x00000400)" +.LASF331: + .string "RT_DEBUG " +.LASF2505: + .string "AFIO_EXTICR3_EXTI8_PA ((uint16_t)0x0000)" +.LASF318: + .string "RT_NAME_MAX 8" +.LASF1012: + .string "S_IFLNK _IFLNK" +.LASF1593: + .string "ADC_SQ10 ((uint32_t)0x000F8000)" +.LASF4282: + .string "R8_USB_RX_LEN (*((PUINT8V)(0x40023408)))" +.LASF658: + .string "_WCHAR_T_DEFINED_ " +.LASF1348: + .string "RCC_BASE (AHBPERIPH_BASE + 0x1000)" +.LASF2253: + .string "GPIO_CFGHR_CNF14 ((uint32_t)0x0C000000)" +.LASF1869: + .string "DMA_CFGR2_MSIZE ((uint16_t)0x0C00)" +.LASF2521: + .string "AFIO_EXTICR3_EXTI10_PC ((uint16_t)0x0200)" +.LASF3797: + .string "RCC_AHBPeriph_DMA2 ((uint32_t)0x00000002)" +.LASF4224: + .string "R8_UDEV_CTRL (*((PUINT8V)(0x40023401)))" +.LASF4737: + .string "GISR" +.LASF3437: + .string "DMA1_FLAG_TC2 ((uint32_t)0x00000020)" +.LASF394: + .string "RT_UINT16_MAX 0xffff" +.LASF4065: + .string "TIM_ExtTRGPSC_OFF ((uint16_t)0x0000)" +.LASF2726: + .string "RCC_PLLMULL ((uint32_t)0x003C0000)" +.LASF1797: + .string "DMA_TCIF4 ((uint32_t)0x00002000)" +.LASF1634: + .string "ADC_SQ4_4 ((uint32_t)0x00080000)" +.LASF2083: + .string "EXTI_SWIEVR_SWIEVR16 ((uint32_t)0x00010000)" +.LASF3986: + .string "TIM_Break_Disable ((uint16_t)0x0000)" +.LASF4256: + .string "RB_UMS_BUS_RESET 0x08" +.LASF767: + .string "__DECONST(type,var) ((type)(__uintptr_t)(const void *)(var))" +.LASF2603: + .string "I2C_OADDR1_ADD2 ((uint16_t)0x0004)" +.LASF2819: + .string "RCC_USART2EN ((uint32_t)0x00020000)" +.LASF3904: + .string "I2S_Mode_MasterTx ((uint16_t)0x0200)" +.LASF2138: + .string "FLASH_OBR_WDG_SW ((uint16_t)0x0004)" +.LASF3605: + .string "GPIO_Remap_MISC ((uint32_t)0x80002000)" +.LASF1176: + .string "__int20" +.LASF1710: + .string "BKP_DATAR31_D ((uint16_t)0xFFFF)" +.LASF3778: + .string "RCC_IT_LSIRDY ((uint8_t)0x01)" +.LASF267: + .string "__DEC32_SUBNORMAL_MIN__ 0.000001E-95DF" +.LASF2342: + .string "GPIO_LCK3 ((uint32_t)0x00000008)" +.LASF3330: + .string "BKP_DR26 ((uint16_t)0x007C)" +.LASF414: + .string "_VA_LIST_T_H " +.LASF1032: + .string "S_ISDIR(m) (((m)&_IFMT) == _IFDIR)" +.LASF3678: + .string "I2C_FLAG_BUSY ((uint32_t)0x00020000)" +.LASF3250: + .string "ADC_Channel_7 ((uint8_t)0x07)" +.LASF4519: + .string "EP7_GetINSta() (R8_UEP7_CTRL&UEP_T_RES_NAK)" +.LASF1898: + .string "DMA_CFG4_DIR ((uint16_t)0x0010)" +.LASF2552: + .string "AFIO_EXTICR4_EXTI14_PB ((uint16_t)0x0100)" +.LASF278: + .string "__DEC128_MIN__ 1E-6143DL" +.LASF2248: + .string "GPIO_CFGHR_CNF12_0 ((uint32_t)0x00040000)" +.LASF3761: + .string "RCC_SYSCLKSource_HSI ((uint32_t)0x00000000)" +.LASF3455: + .string "DMA1_FLAG_TE6 ((uint32_t)0x00800000)" +.LASF4394: + .string "USB_SET_ADDRESS 0x05" +.LASF4623: + .string "_stdin" +.LASF4099: + .string "TIM_OCPreload_Enable ((uint16_t)0x0008)" +.LASF1599: + .string "ADC_SQ11 ((uint32_t)0x01F00000)" +.LASF2547: + .string "AFIO_EXTICR4_EXTI13_PD ((uint16_t)0x0030)" +.LASF82: + .string "__SCHAR_WIDTH__ 8" +.LASF3347: + .string "__CH32V10x_CRC_H " +.LASF1742: + .string "DAC_TSEL1_2 ((uint32_t)0x00000020)" +.LASF2582: + .string "I2C_CTLR1_ACK ((uint16_t)0x0400)" +.LASF4262: + .string "RB_U_TOG_OK 0x40" +.LASF1336: + .string "DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x001C)" +.LASF831: + .string "_RAND48_ADD (0x000b)" +.LASF2563: + .string "AFIO_EXTICR4_EXTI15_PF ((uint16_t)0x5000)" +.LASF4626: + .string "_inc" +.LASF4599: + .string "_ind" +.LASF4780: + .string "pHOST_TX_RAM_Addr" +.LASF31: + .string "__FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__" +.LASF1487: + .string "ADC_SMP14_2 ((uint32_t)0x00004000)" +.LASF48: + .string "__UINT32_TYPE__ long unsigned int" +.LASF2444: + .string "AFIO_EXTICR1_EXTI0_PD ((uint16_t)0x0003)" +.LASF2413: + .string "AFIO_PCFR1_TIM3_REMAP_NOREMAP ((uint32_t)0x00000000)" +.LASF1297: + .string "TIM14_BASE (APB1PERIPH_BASE + 0x2000)" +.LASF3377: + .string "DMA_Priority_Medium ((uint32_t)0x00001000)" +.LASF3507: + .string "FLASH_PrefetchBuffer_Enable ((uint32_t)0x00000010)" +.LASF3588: + .string "GPIO_PartialRemap1_TIM2 ((uint32_t)0x00180100)" +.LASF603: + .string "_NOINLINE_STATIC _NOINLINE static" +.LASF1465: + .string "ADC_JSWSTART ((uint32_t)0x00200000)" +.LASF2887: + .string "SPI_STATR_CHSIDE ((uint8_t)0x04)" +.LASF1170: + .string "_STDINT_H " +.LASF2116: + .string "FLASH_STATR_BSY ((uint8_t)0x01)" +.LASF2144: + .string "FLASH_RDPR_nRDPR ((uint32_t)0x0000FF00)" +.LASF1881: + .string "DMA_CFGR3_CIRC ((uint16_t)0x0020)" +.LASF3086: + .string "TIM_CCR1 ((uint16_t)0xFFFF)" +.LASF4063: + .string "TIM_DMA_COM ((uint16_t)0x2000)" +.LASF810: + .string "unsigned signed" +.LASF3786: + .string "RCC_PCLK2_Div2 ((uint32_t)0x00000000)" +.LASF902: + .string "_LITTLE_ENDIAN 1234" +.LASF1721: + .string "BKP_DATAR42_D ((uint16_t)0xFFFF)" +.LASF1469: + .string "ADC_SMP10_0 ((uint32_t)0x00000001)" +.LASF4610: + .string "_write" +.LASF1553: + .string "ADC_SQ14_0 ((uint32_t)0x00000020)" +.LASF1329: + .string "TIM16_BASE (APB2PERIPH_BASE + 0x4400)" +.LASF4461: + .string "USB_DESCR_TYP_PHYSIC 0x23" +.LASF1452: + .string "ADC_RSTCAL ((uint32_t)0x00000008)" +.LASF4057: + .string "TIM_DMABurstLength_18Transfers ((uint16_t)0x1100)" +.LASF1567: + .string "ADC_SQ16_2 ((uint32_t)0x00020000)" +.LASF872: + .string "__ATTRIBUTE_IMPURE_PTR__ " +.LASF4087: + .string "TIM_EncoderMode_TI2 ((uint16_t)0x0002)" +.LASF2532: + .string "AFIO_EXTICR3_EXTI11_PG ((uint16_t)0x6000)" +.LASF2764: + .string "RCC_PLLRDYF ((uint32_t)0x00000010)" +.LASF3120: + .string "TIM_DMAR_DMAB ((uint16_t)0xFFFF)" +.LASF193: + .string "__FLT32_MIN_EXP__ (-125)" +.LASF3629: + .string "__CH32V10x_I2C_H " +.LASF3285: + .string "ADC_AnalogWatchdog_SingleRegOrInjecEnable ((uint32_t)0x00C00200)" +.LASF3561: + .string "FLASH_FLAG_BANK1_WRPRTERR FLASH_FLAG_WRPRTERR" +.LASF2655: + .string "PWR_CTLR_PLS_2V7 ((uint16_t)0x00A0)" +.LASF633: + .string "__SIZE_T__ " +.LASF2630: + .string "I2C_STAR2_BUSY ((uint16_t)0x0002)" +.LASF4240: + .string "RB_UIE_DEV_NAK 0x40" +.LASF632: + .string "__size_t__ " +.LASF3791: + .string "RCC_LSE_ON ((uint8_t)0x01)" +.LASF2885: + .string "SPI_STATR_RXNE ((uint8_t)0x01)" +.LASF3146: + .string "USART_CTLR1_M ((uint16_t)0x1000)" +.LASF1089: + .string "F_SETFD 2" +.LASF3394: + .string "DMA1_IT_HT3 ((uint32_t)0x00000400)" +.LASF3570: + .string "GPIO_Pin_7 ((uint16_t)0x0080)" +.LASF3528: + .string "FLASH_WRProt_Pages76to79 ((uint32_t)0x00080000)" +.LASF400: + .string "RT_MB_ENTRY_MAX RT_UINT16_MAX" +.LASF2019: + .string "EXTI_EVENR_MR12 ((uint32_t)0x00001000)" +.LASF2861: + .string "RTC_ALRML_RTC_ALRM ((uint16_t)0xFFFF)" +.LASF1768: + .string "DAC_SWTRIG1 ((uint8_t)0x01)" +.LASF1606: + .string "ADC_SQ12_0 ((uint32_t)0x02000000)" +.LASF1180: + .string "char +0" +.LASF3867: + .string "SysTick_CLKSource_HCLK ((uint32_t)0x00000004)" +.LASF2043: + .string "EXTI_RTENR_TR16 ((uint32_t)0x00010000)" +.LASF4303: + .string "RB_UEP6_RX_EN 0x80" +.LASF4021: + .string "TIM_DMABase_CR1 ((uint16_t)0x0000)" +.LASF247: + .string "__FLT64X_MANT_DIG__ 113" +.LASF357: + .string "FINSH_USING_MSH_ONLY " +.LASF4287: + .string "RB_UEP1_BUF_MOD 0x10" +.LASF339: + .string "RT_USING_DEVICE " +.LASF906: + .string "_QUAD_HIGHWORD 1" +.LASF1222: + .string "INT32_MIN (-__INT32_MAX__ - 1)" +.LASF2299: + .string "GPIO_BSHR_BS8 ((uint32_t)0x00000100)" +.LASF3680: + .string "I2C_FLAG_SMBALERT ((uint32_t)0x10008000)" +.LASF1724: + .string "BKP_ASOE ((uint16_t)0x0100)" +.LASF1977: + .string "DMA_PADDR5_PA ((uint32_t)0xFFFFFFFF)" +.LASF2830: + .string "RCC_RTCSEL_NOCLOCK ((uint32_t)0x00000000)" +.LASF807: + .string "__lock_release(lock) __retarget_lock_release(lock)" +.LASF2480: + .string "AFIO_EXTICR2_EXTI5_PA ((uint16_t)0x0000)" +.LASF1934: + .string "DMA_CFG6_DIR ((uint16_t)0x0010)" +.LASF1639: + .string "ADC_SQ5_3 ((uint32_t)0x00800000)" +.LASF554: + .string "_WANT_IO_LONG_DOUBLE 1" +.LASF3111: + .string "TIM_DBA_2 ((uint16_t)0x0004)" +.LASF1815: + .string "DMA_CTEIF1 ((uint32_t)0x00000008)" +.LASF4030: + .string "TIM_DMABase_CNT ((uint16_t)0x0009)" +.LASF1396: + .string "TIM9 ((TIM_TypeDef *) TIM9_BASE)" +.LASF2056: + .string "EXTI_FTENR_TR9 ((uint32_t)0x00000200)" +.LASF3186: + .string "WWDG_CTLR_T3 ((uint8_t)0x08)" +.LASF1477: + .string "ADC_SMP12_0 ((uint32_t)0x00000040)" +.LASF1338: + .string "DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x0044)" +.LASF2704: + .string "RCC_PPRE1_DIV2 ((uint32_t)0x00000400)" +.LASF1912: + .string "DMA_CFG5_EN ((uint16_t)0x0001)" +.LASF2011: + .string "EXTI_EVENR_MR4 ((uint32_t)0x00000010)" +.LASF1148: + .string "MSH_CMD_EXPORT(command,desc) FINSH_FUNCTION_EXPORT_CMD(command, __cmd_ ##command, desc)" +.LASF4580: + .string "_sign" +.LASF223: + .string "__FLT128_MAX_EXP__ 16384" +.LASF936: + .string "__u_long_defined " +.LASF1092: + .string "F_GETOWN 5" +.LASF3664: + .string "I2C_IT_ARLO ((uint32_t)0x01000200)" +.LASF364: + .string "RT_USING_LIBC " +.LASF3439: + .string "DMA1_FLAG_TE2 ((uint32_t)0x00000080)" +.LASF2256: + .string "GPIO_CFGHR_CNF15 ((uint32_t)0xC0000000)" +.LASF418: + .string "RT_USED __attribute__((used))" +.LASF2796: + .string "RCC_TIM4RST ((uint32_t)0x00000004)" +.LASF16: + .string "__FINITE_MATH_ONLY__ 0" +.LASF3896: + .string "SPI_BaudRatePrescaler_32 ((uint16_t)0x0020)" +.LASF1157: + .string "rt_hw_spin_unlock(lock) rt_hw_interrupt_enable(*(lock))" +.LASF2320: + .string "GPIO_BSHR_BR13 ((uint32_t)0x20000000)" +.LASF1468: + .string "ADC_SMP10 ((uint32_t)0x00000007)" +.LASF487: + .string "RT_IPC_CMD_UNKNOWN 0x00" +.LASF4399: + .string "USB_GET_INTERFACE 0x0A" +.LASF3624: + .string "GPIO_PinSource11 ((uint8_t)0x0B)" +.LASF3373: + .string "DMA_Mode_Circular ((uint32_t)0x00000020)" +.LASF2010: + .string "EXTI_EVENR_MR3 ((uint32_t)0x00000008)" +.LASF4007: + .string "TIM_ICSelection_IndirectTI ((uint16_t)0x0002)" +.LASF2060: + .string "EXTI_FTENR_TR13 ((uint32_t)0x00002000)" +.LASF1865: + .string "DMA_CFGR2_MINC ((uint16_t)0x0080)" +.LASF2466: + .string "AFIO_EXTICR1_EXTI3_PE ((uint16_t)0x4000)" +.LASF1210: + .string "INT8_MIN (-__INT8_MAX__ - 1)" +.LASF1850: + .string "DMA_CFGR1_PSIZE_1 ((uint16_t)0x0200)" +.LASF1831: + .string "DMA_CTEIF5 ((uint32_t)0x00080000)" +.LASF4426: + .string "USB_REQ_RECIP_ENDP 0x02" +.LASF4781: + .string "SetupGetDevDescr" +.LASF197: + .string "__FLT32_DECIMAL_DIG__ 9" +.LASF4503: + .string "pEP3_OUT_DataBuf (pEP3_RAM_Addr)" +.LASF470: + .string "RT_THREAD_BLOCK RT_THREAD_SUSPEND" +.LASF1482: + .string "ADC_SMP13_1 ((uint32_t)0x00000400)" +.LASF612: + .string "___int32_t_defined 1" +.LASF2118: + .string "FLASH_STATR_WRPRTERR ((uint8_t)0x10)" +.LASF1986: + .string "DMA_MADDR7_MA ((uint32_t)0xFFFFFFFF)" +.LASF4498: + .string "pEP0_DataBuf (pEP0_RAM_Addr)" +.LASF2964: + .string "TIM_CC4IE ((uint16_t)0x0010)" +.LASF4733: + .string "IRQn_Type" +.LASF3323: + .string "BKP_DR19 ((uint16_t)0x0060)" +.LASF4789: + .string "rt_thread_switch_interrupt_flag" +.LASF213: + .string "__FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64" +.LASF708: + .string "__CC_SUPPORTS___FUNC__ 1" +.LASF3412: + .string "DMA2_IT_GL1 ((uint32_t)0x10000001)" +.LASF3509: + .string "FLASH_WRProt_Pages0to3 ((uint32_t)0x00000001)" +.LASF3030: + .string "TIM_IC2F_3 ((uint16_t)0x8000)" +.LASF4011: + .string "TIM_ICPSC_DIV4 ((uint16_t)0x0008)" +.LASF228: + .string "__FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128" +.LASF1006: + .string "S_ENFMT 0002000" +.LASF4635: + .string "_freelist" +.LASF1000: + .string "S_ISUID 0004000" +.LASF1757: + .string "DAC_TSEL2_1 ((uint32_t)0x00100000)" +.LASF3019: + .string "TIM_IC1F_0 ((uint16_t)0x0010)" +.LASF1249: + .string "SIZE_MAX (__SIZE_MAX__)" +.LASF2537: + .string "AFIO_EXTICR4_EXTI12_PA ((uint16_t)0x0000)" +.LASF4794: + .string "rt_hw_context_switch_interrupt" +.LASF1935: + .string "DMA_CFG6_CIRC ((uint16_t)0x0020)" +.LASF3537: + .string "FLASH_WRProt_Pages112to115 ((uint32_t)0x10000000)" +.LASF574: + .string "_POSIX_SOURCE 1" +.LASF4403: + .string "HUB_CLEAR_FEATURE 0x01" +.LASF1866: + .string "DMA_CFGR2_PSIZE ((uint16_t)0x0300)" +.LASF3089: + .string "TIM_CCR4 ((uint16_t)0xFFFF)" +.LASF4075: + .string "TIM_TS_TI2FP2 ((uint16_t)0x0060)" +.LASF4627: + .string "_emergency" +.LASF2570: + .string "IWDG_RL ((uint16_t)0x0FFF)" +.LASF3519: + .string "FLASH_WRProt_Pages40to43 ((uint32_t)0x00000400)" +.LASF508: + .string "RT_DEVICE_OFLAG_RDONLY 0x001" +.LASF1200: + .string "__int_least16_t_defined 1" +.LASF2775: + .string "RCC_PLLRDYC ((uint32_t)0x00100000)" +.LASF188: + .string "__LDBL_HAS_DENORM__ 1" +.LASF655: + .string "__WCHAR_T " +.LASF888: + .string "_INT16_T_DECLARED " +.LASF3740: + .string "RCC_HSE_OFF ((uint32_t)0x00000000)" +.LASF446: + .string "RT_EINTR 9" +.LASF1583: + .string "ADC_SQ8_1 ((uint32_t)0x00000040)" +.LASF2459: + .string "AFIO_EXTICR1_EXTI2_PE ((uint16_t)0x0400)" +.LASF3117: + .string "TIM_DBL_2 ((uint16_t)0x0400)" +.LASF3941: + .string "SPI_IT_MODF ((uint8_t)0x55)" +.LASF2052: + .string "EXTI_FTENR_TR5 ((uint32_t)0x00000020)" +.LASF91: + .string "__INTMAX_MAX__ 0x7fffffffffffffffLL" +.LASF3469: + .string "DMA2_FLAG_TC3 ((uint32_t)0x10000200)" +.LASF2591: + .string "I2C_CTLR2_FREQ_3 ((uint16_t)0x0008)" +.LASF1288: + .string "AHBPERIPH_BASE (PERIPH_BASE + 0x20000)" +.LASF1088: + .string "F_GETFD 1" +.LASF276: + .string "__DEC128_MIN_EXP__ (-6142)" +.LASF1168: + .string "HardFault_IRQn EXC_IRQn" +.LASF3738: + .string "PWR_FLAG_PVDO ((uint32_t)0x00000004)" +.LASF2557: + .string "AFIO_EXTICR4_EXTI14_PG ((uint16_t)0x0600)" +.LASF2884: + .string "SPI_CTLR2_TXEIE ((uint8_t)0x80)" +.LASF2906: + .string "SPI_I2SCFGR_I2SCFG ((uint16_t)0x0300)" +.LASF93: + .string "__UINTMAX_MAX__ 0xffffffffffffffffULL" +.LASF2783: + .string "RCC_ADC2RST ((uint32_t)0x00000400)" +.LASF2507: + .string "AFIO_EXTICR3_EXTI8_PC ((uint16_t)0x0002)" +.LASF1246: + .string "INTMAX_MAX (__INTMAX_MAX__)" +.LASF4512: + .string "pEP7_IN_DataBuf (pEP7_RAM_Addr+64)" +.LASF898: + .string "_UINTMAX_T_DECLARED " +.LASF3999: + .string "TIM_OCIdleState_Set ((uint16_t)0x0100)" +.LASF941: + .string "_CLOCK_T_DECLARED " +.LASF4141: + .string "TIM_DMABurstLength_11Bytes TIM_DMABurstLength_11Transfers" +.LASF1856: + .string "DMA_CFGR1_PL_1 ((uint16_t)0x2000)" +.LASF4515: + .string "EP3_GetINSta() (R8_UEP3_CTRL&UEP_T_RES_NAK)" +.LASF479: + .string "RT_THREAD_STAT_SIGNAL_MASK 0xf0" +.LASF3228: + .string "ADC_Mode_InjecSimult ((uint32_t)0x00050000)" +.LASF33: + .string "__SIZE_TYPE__ unsigned int" +.LASF3002: + .string "TIM_OC1M_1 ((uint16_t)0x0020)" +.LASF502: + .string "RT_DEVICE_FLAG_STREAM 0x040" +.LASF4602: + .string "_base" +.LASF3084: + .string "TIM_ARR ((uint16_t)0xFFFF)" +.LASF2024: + .string "EXTI_EVENR_MR17 ((uint32_t)0x00020000)" +.LASF2754: + .string "RCC_MCO_2 ((uint32_t)0x04000000)" +.LASF4278: + .string "UIS_TOKEN_IN 0x20" +.LASF4015: + .string "TIM_IT_CC2 ((uint16_t)0x0004)" +.LASF1186: + .string "_INT32_EQ_LONG " +.LASF4521: + .string "ERR_SUCCESS 0x00" +.LASF2880: + .string "SPI_CTLR2_TXDMAEN ((uint8_t)0x02)" +.LASF118: + .string "__INT_LEAST64_WIDTH__ 64" +.LASF2189: + .string "GPIO_CFGLR_CNF1_0 ((uint32_t)0x00000040)" +.LASF1891: + .string "DMA_CFGR3_PL_0 ((uint16_t)0x1000)" +.LASF4175: + .string "USART_IT_TC ((uint16_t)0x0626)" +.LASF2155: + .string "FLASH_WRPR2_WRPR2 ((uint32_t)0x000000FF)" +.LASF1787: + .string "DMA_TEIF1 ((uint32_t)0x00000008)" +.LASF2344: + .string "GPIO_LCK5 ((uint32_t)0x00000020)" +.LASF1361: + .string "TIM13 ((TIM_TypeDef *) TIM13_BASE)" +.LASF2032: + .string "EXTI_RTENR_TR5 ((uint32_t)0x00000020)" +.LASF274: + .string "__DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD" +.LASF4647: + .string "_rand48" +.LASF3048: + .string "TIM_OC4M_1 ((uint16_t)0x2000)" +.LASF1808: + .string "DMA_GIF7 ((uint32_t)0x01000000)" +.LASF201: + .string "__FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32" +.LASF3523: + .string "FLASH_WRProt_Pages56to59 ((uint32_t)0x00004000)" +.LASF4687: + .string "_syscall_table_begin" +.LASF4319: + .string "R16_UEP5_DMA (*((PUINT16V)(0x40023424)))" +.LASF2143: + .string "FLASH_RDPR_RDPR ((uint32_t)0x000000FF)" +.LASF2855: + .string "RTC_PSCL_PRL ((uint16_t)0xFFFF)" +.LASF2057: + .string "EXTI_FTENR_TR10 ((uint32_t)0x00000400)" +.LASF843: + .string "_REENT_CHECK_EMERGENCY(ptr) " +.LASF2097: + .string "EXTI_INTF_INTF10 ((uint32_t)0x00000400)" +.LASF4187: + .string "USART_DMAReq_Rx ((uint16_t)0x0040)" +.LASF3577: + .string "GPIO_Pin_14 ((uint16_t)0x4000)" +.LASF3530: + .string "FLASH_WRProt_Pages84to87 ((uint32_t)0x00200000)" +.LASF4091: + .string "TIM_EventSource_CC2 ((uint16_t)0x0004)" +.LASF929: + .string "physadr physadr_t" +.LASF1684: + .string "BKP_DATAR5_D ((uint16_t)0xFFFF)" +.LASF543: + .string "_SYS_STAT_H " +.LASF2712: + .string "RCC_PPRE2_DIV1 ((uint32_t)0x00000000)" +.LASF3816: + .string "RCC_APB2Periph_TIM8 ((uint32_t)0x00002000)" +.LASF3367: + .string "DMA_PeripheralDataSize_Byte ((uint32_t)0x00000000)" +.LASF2403: + .string "AFIO_PCFR1_TIM2_REMAP ((uint32_t)0x00000300)" +.LASF4661: + .string "_l64a_buf" +.LASF1992: + .string "EXTI_INTENR_MR5 ((uint32_t)0x00000020)" +.LASF1732: + .string "BKP_TIF ((uint16_t)0x0200)" +.LASF453: + .string "RT_TIMER_FLAG_DEACTIVATED 0x0" +.LASF1919: + .string "DMA_CFG5_MINC ((uint16_t)0x0080)" +.LASF3229: + .string "ADC_Mode_RegSimult ((uint32_t)0x00060000)" +.LASF454: + .string "RT_TIMER_FLAG_ACTIVATED 0x1" +.LASF3787: + .string "RCC_PCLK2_Div4 ((uint32_t)0x00004000)" +.LASF4481: + .string "USB_ENDP_TYPE_BULK 0x02" +.LASF3589: + .string "GPIO_PartialRemap2_TIM2 ((uint32_t)0x00180200)" +.LASF2883: + .string "SPI_CTLR2_RXNEIE ((uint8_t)0x40)" +.LASF2720: + .string "RCC_ADCPRE_DIV2 ((uint32_t)0x00000000)" +.LASF4333: + .string "RB_UEP_R_RES0 0x04" +.LASF651: + .string "__WCHAR_T__ " +.LASF2037: + .string "EXTI_RTENR_TR10 ((uint32_t)0x00000400)" +.LASF3666: + .string "I2C_IT_TXE ((uint32_t)0x06000080)" +.LASF2133: + .string "FLASH_CTLR_BUF_RST ((uint16_t)0x00080000)" +.LASF2664: + .string "RCC_HSIRDY ((uint32_t)0x00000002)" +.LASF3714: + .string "IWDG_Prescaler_4 ((uint8_t)0x00)" +.LASF1493: + .string "ADC_SMP16_0 ((uint32_t)0x00040000)" +.LASF3774: + .string "RCC_HCLK_Div2 ((uint32_t)0x00000400)" +.LASF123: + .string "__UINT_LEAST32_MAX__ 0xffffffffUL" +.LASF3148: + .string "USART_CTLR1_OVER8 ((uint16_t)0x8000)" +.LASF3197: + .string "WWDG_CFGR_W5 ((uint16_t)0x0020)" +.LASF1119: + .string "DT_REG 0x01" +.LASF4625: + .string "_stderr" +.LASF3102: + .string "TIM_OSSI ((uint16_t)0x0400)" +.LASF484: + .string "RT_THREAD_CTRL_BIND_CPU 0x04" +.LASF945: + .string "__caddr_t_defined " +.LASF3964: + .string "TIM_Channel_4 ((uint16_t)0x000C)" +.LASF4209: + .string "__CH32V10x_USB_H " +.LASF4396: + .string "USB_SET_DESCRIPTOR 0x07" +.LASF685: + .string "__has_extension __has_feature" +.LASF934: + .string "__u_short_defined " +.LASF4265: + .string "RB_UIF_HST_SOF 0x08" +.LASF3227: + .string "ADC_Mode_InjecSimult_SlowInterl ((uint32_t)0x00040000)" +.LASF797: + .string "__LOCK_INIT(class,lock) extern struct __lock __lock_ ## lock; class _LOCK_T lock = &__lock_ ## lock" +.LASF4566: + .string "_LOCK_T" +.LASF4467: + .string "USB_DEV_CLASS_COMMUNIC 0x02" +.LASF2778: + .string "RCC_IOPARST ((uint32_t)0x00000004)" +.LASF4181: + .string "USART_IT_ERR ((uint16_t)0x0060)" +.LASF4727: + .string "USART2_IRQn" +.LASF2814: + .string "RCC_SPI1EN ((uint32_t)0x00001000)" +.LASF1949: + .string "DMA_CFG7_TCIE ((uint16_t)0x0002)" +.LASF4543: + .string "FREE_INT_SP() asm(\"csrrw sp,mscratch,sp\")" +.LASF1668: + .string "ADC_JSQ4_2 ((uint32_t)0x00020000)" +.LASF3553: + .string "FLASH_FLAG_BSY ((uint32_t)0x00000001)" +.LASF1242: + .string "UINT_FAST32_MAX (__UINT_FAST32_MAX__)" +.LASF1043: + .string "_FAPPEND 0x0008" +.LASF3558: + .string "FLASH_FLAG_BANK1_BSY FLASH_FLAG_BSY" +.LASF333: + .string "RT_USING_MUTEX " +.LASF4107: + .string "TIM_TRGOSource_Update ((uint16_t)0x0020)" +.LASF1910: + .string "DMA_CFG4_PL_1 ((uint16_t)0x2000)" +.LASF1256: + .string "WINT_MAX (__WINT_MAX__)" +.LASF567: + .string "__OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT" +.LASF1922: + .string "DMA_CFG5_PSIZE_1 ((uint16_t)0x0200)" +.LASF4279: + .string "UIS_TOKEN_SETUP 0x30" +.LASF3355: + .string "DBGMCU_TIM3_STOP ((uint32_t)0x00000040)" +.LASF2330: + .string "GPIO_BCR_BR7 ((uint16_t)0x0080)" +.LASF3639: + .string "I2C_AcknowledgedAddress_7bit ((uint16_t)0x4000)" +.LASF3071: + .string "TIM_CC2E ((uint16_t)0x0010)" +.LASF4184: + .string "USART_IT_FE ((uint16_t)0x0160)" +.LASF1151: + .string "HWREG16(x) (*((volatile rt_uint16_t *)(x)))" +.LASF4585: + .string "__tm_min" +.LASF2970: + .string "TIM_CC2DE ((uint16_t)0x0400)" +.LASF406: + .string "va_start(v,l) __builtin_va_start(v,l)" +.LASF1697: + .string "BKP_DATAR18_D ((uint16_t)0xFFFF)" +.LASF4233: + .string "RB_UH_DP_PIN 0x20" +.LASF2266: + .string "GPIO_INDR_IDR7 ((uint16_t)0x0080)" +.LASF1748: + .string "DAC_MAMP1_1 ((uint32_t)0x00000200)" +.LASF2112: + .string "FLASH_ACTLR_PRFTBE ((uint8_t)0x10)" +.LASF3957: + .string "TIM_OCMode_PWM1 ((uint16_t)0x0060)" +.LASF1539: + .string "ADC_SMP9_2 ((uint32_t)0x20000000)" +.LASF1564: + .string "ADC_SQ16 ((uint32_t)0x000F8000)" +.LASF1512: + .string "ADC_SMP3 ((uint32_t)0x00000E00)" +.LASF4368: + .string "R8_UEP4_T_LEN (*((PUINT8V)(0x40023440)))" +.LASF3464: + .string "DMA2_FLAG_GL2 ((uint32_t)0x10000010)" +.LASF2400: + .string "AFIO_PCFR1_TIM1_REMAP_NOREMAP ((uint32_t)0x00000000)" +.LASF504: + .string "RT_DEVICE_FLAG_DMA_RX 0x200" +.LASF4668: + .string "_wcsrtombs_state" +.LASF4400: + .string "USB_SET_INTERFACE 0x0B" +.LASF3839: + .string "RCC_APB1Periph_UART4 ((uint32_t)0x00080000)" +.LASF4077: + .string "TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050)" +.LASF1775: + .string "DAC_DHR8R2 ((uint8_t)0xFF)" +.LASF1390: + .string "TIM8 ((TIM_TypeDef *) TIM8_BASE)" +.LASF3193: + .string "WWDG_CFGR_W1 ((uint16_t)0x0002)" +.LASF279: + .string "__DEC128_MAX__ 9.999999999999999999999999999999999E6144DL" +.LASF2994: + .string "TIM_BG ((uint8_t)0x80)" +.LASF4260: + .string "R8_USB_INT_FG (*((PUINT8V)(0x40023406)))" +.LASF1034: + .string "S_ISREG(m) (((m)&_IFMT) == _IFREG)" +.LASF1607: + .string "ADC_SQ12_1 ((uint32_t)0x04000000)" +.LASF4435: + .string "HUB_SET_HUB_FEATURE 0x20" +.LASF1114: + .string "LOCK_UN 0x08" +.LASF163: + .string "__DBL_DIG__ 15" +.LASF58: + .string "__INT_FAST8_TYPE__ int" +.LASF3026: + .string "TIM_IC2F ((uint16_t)0xF000)" +.LASF3851: + .string "RCC_MCO_SYSCLK ((uint8_t)0x04)" +.LASF3277: + .string "ADC_ExternalTrigInjecConv_T1_CC4 ((uint32_t)0x00001000)" +.LASF4249: + .string "MASK_USB_ADDR 0x7F" +.LASF1502: + .string "ADC_SMP0_1 ((uint32_t)0x00000002)" +.LASF3397: + .string "DMA1_IT_TC4 ((uint32_t)0x00002000)" +.LASF2776: + .string "RCC_CSSC ((uint32_t)0x00800000)" +.LASF1355: + .string "TIM3 ((TIM_TypeDef *) TIM3_BASE)" +.LASF1944: + .string "DMA_CFG6_PL ((uint16_t)0x3000)" +.LASF3849: + .string "RCC_APB1Periph_CEC ((uint32_t)0x40000000)" +.LASF1519: + .string "ADC_SMP4_2 ((uint32_t)0x00004000)" +.LASF501: + .string "RT_DEVICE_FLAG_SUSPENDED 0x020" +.LASF1481: + .string "ADC_SMP13_0 ((uint32_t)0x00000200)" +.LASF3773: + .string "RCC_HCLK_Div1 ((uint32_t)0x00000000)" +.LASF1347: + .string "DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458)" +.LASF3616: + .string "GPIO_PinSource3 ((uint8_t)0x03)" +.LASF3296: + .string "ADC_FLAG_JSTRT ((uint8_t)0x08)" +.LASF3295: + .string "ADC_FLAG_JEOC ((uint8_t)0x04)" +.LASF2493: + .string "AFIO_EXTICR2_EXTI6_PG ((uint16_t)0x0600)" +.LASF3470: + .string "DMA2_FLAG_HT3 ((uint32_t)0x10000400)" +.LASF4533: + .string "ROOT_DEV_SUCCESS 3" +.LASF1384: + .string "GPIOF ((GPIO_TypeDef *) GPIOF_BASE)" +.LASF1636: + .string "ADC_SQ5_0 ((uint32_t)0x00100000)" +.LASF542: + .string "LIBC_STAT_H__ " +.LASF2828: + .string "RCC_RTCSEL_0 ((uint32_t)0x00000100)" +.LASF1601: + .string "ADC_SQ11_1 ((uint32_t)0x00200000)" +.LASF1758: + .string "DAC_TSEL2_2 ((uint32_t)0x00200000)" +.LASF3342: + .string "BKP_DR38 ((uint16_t)0x00AC)" +.LASF4162: + .string "USART_HardwareFlowControl_RTS ((uint16_t)0x0100)" +.LASF912: + .string "__bswap16(_x) __builtin_bswap16(_x)" +.LASF1230: + .string "UINT64_MAX (__UINT64_MAX__)" +.LASF3878: + .string "SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000)" +.LASF3017: + .string "TIM_IC1PSC_1 ((uint16_t)0x0008)" +.LASF3331: + .string "BKP_DR27 ((uint16_t)0x0080)" +.LASF2674: + .string "RCC_SW_0 ((uint32_t)0x00000001)" +.LASF3409: + .string "DMA1_IT_TC7 ((uint32_t)0x02000000)" +.LASF3305: + .string "BKP_DR1 ((uint16_t)0x0004)" +.LASF2833: + .string "RCC_RTCSEL_HSE ((uint32_t)0x00000300)" +.LASF478: + .string "RT_THREAD_STAT_SIGNAL_PENDING 0x40" +.LASF1752: + .string "DAC_EN2 ((uint32_t)0x00010000)" +.LASF1084: + .string "FNOCTTY _FNOCTTY" +.LASF4440: + .string "HUB_PORT_ENABLE 1" +.LASF3054: + .string "TIM_IC3F ((uint16_t)0x00F0)" +.LASF2012: + .string "EXTI_EVENR_MR5 ((uint32_t)0x00000020)" +.LASF1060: + .string "O_RDWR 2" +.LASF2414: + .string "AFIO_PCFR1_TIM3_REMAP_PARTIALREMAP ((uint32_t)0x00000800)" +.LASF4073: + .string "TIM_TS_TI1F_ED ((uint16_t)0x0040)" +.LASF263: + .string "__DEC32_MAX_EXP__ 97" +.LASF4097: + .string "TIM_UpdateSource_Global ((uint16_t)0x0000)" +.LASF2489: + .string "AFIO_EXTICR2_EXTI6_PC ((uint16_t)0x0200)" +.LASF1858: + .string "DMA_CFGR2_EN ((uint16_t)0x0001)" +.LASF2742: + .string "RCC_PLLMULL9 ((uint32_t)0x001C0000)" +.LASF3924: + .string "I2S_AudioFreq_11k ((uint32_t)11025)" +.LASF791: + .string "__pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))" +.LASF4431: + .string "HUB_GET_HUB_DESCRIPTOR 0xA0" +.LASF2680: + .string "RCC_SWS_0 ((uint32_t)0x00000004)" +.LASF2517: + .string "AFIO_EXTICR3_EXTI9_PF ((uint16_t)0x0050)" +.LASF17: + .string "__SIZEOF_INT__ 4" +.LASF1179: + .string "unsigned +0" +.LASF346: + .string "RT_MAIN_THREAD_STACK_SIZE 512" +.LASF29: + .string "__ORDER_PDP_ENDIAN__ 3412" +.LASF154: + .string "__FLT_DECIMAL_DIG__ 9" +.LASF3221: + .string "__CH32V10x_CONF_H " +.LASF3659: + .string "I2C_IT_SMBALERT ((uint32_t)0x01008000)" +.LASF2723: + .string "RCC_ADCPRE_DIV8 ((uint32_t)0x0000C000)" +.LASF4373: + .string "R32_USB_EP6_CTRL (*((PUINT32V)(0x40023448)))" +.LASF102: + .string "__INT64_MAX__ 0x7fffffffffffffffLL" +.LASF2650: + .string "PWR_CTLR_PLS_2V2 ((uint16_t)0x0000)" +.LASF4768: + .string "DeviceAddress" +.LASF338: + .string "RT_USING_HEAP " +.LASF1268: + .string "__CORE_RISCV_H__ " +.LASF583: + .string "__LARGEFILE_VISIBLE 0" +.LASF1692: + .string "BKP_DATAR13_D ((uint16_t)0xFFFF)" +.LASF79: + .string "__WINT_MIN__ 0U" +.LASF1832: + .string "DMA_CGIF6 ((uint32_t)0x00100000)" +.LASF2331: + .string "GPIO_BCR_BR8 ((uint16_t)0x0100)" +.LASF4416: + .string "USB_REQ_TYP_READ 0x80" +.LASF4728: + .string "USART3_IRQn" +.LASF1618: + .string "ADC_SQ2_0 ((uint32_t)0x00000020)" +.LASF1404: + .string "DMA1_Channel4 ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE)" +.LASF896: + .string "__int64_t_defined 1" +.LASF2267: + .string "GPIO_INDR_IDR8 ((uint16_t)0x0100)" +.LASF1126: + .string "rt_list_for_each_safe(pos,n,head) for (pos = (head)->next, n = pos->next; pos != (head); pos = n, n = pos->next)" +.LASF1632: + .string "ADC_SQ4_2 ((uint32_t)0x00020000)" +.LASF1175: + .string "short" +.LASF2233: + .string "GPIO_CFGHR_MODE15_1 ((uint32_t)0x20000000)" +.LASF1303: + .string "USART2_BASE (APB1PERIPH_BASE + 0x4400)" +.LASF2952: + .string "TIM_ETF_1 ((uint16_t)0x0200)" +.LASF693: + .string "__GNUCLIKE___OFFSETOF 1" +.LASF3529: + .string "FLASH_WRProt_Pages80to83 ((uint32_t)0x00100000)" +.LASF551: + .string "_WANT_IO_C99_FORMATS 1" +.LASF4034: + .string "TIM_DMABase_CCR1 ((uint16_t)0x000D)" +.LASF4023: + .string "TIM_DMABase_SMCR ((uint16_t)0x0002)" +.LASF3630: + .string "I2C_Mode_I2C ((uint16_t)0x0000)" +.LASF3836: + .string "RCC_APB1Periph_SPI3 ((uint32_t)0x00008000)" +.LASF3270: + .string "ADC_SampleTime_239Cycles5 ((uint8_t)0x07)" +.LASF2018: + .string "EXTI_EVENR_MR11 ((uint32_t)0x00000800)" +.LASF4713: + .string "TIM1_BRK_IRQn" +.LASF3313: + .string "BKP_DR9 ((uint16_t)0x0024)" +.LASF3422: + .string "DMA2_IT_HT3 ((uint32_t)0x10000400)" +.LASF4502: + .string "pEP2_IN_DataBuf (pEP2_RAM_Addr+64)" +.LASF1052: + .string "_FNBIO 0x1000" +.LASF2825: + .string "RCC_LSERDY ((uint32_t)0x00000002)" +.LASF3898: + .string "SPI_BaudRatePrescaler_128 ((uint16_t)0x0030)" +.LASF1756: + .string "DAC_TSEL2_0 ((uint32_t)0x00080000)" +.LASF2390: + .string "AFIO_PCFR1_USART2_REMAP ((uint32_t)0x00000008)" +.LASF2309: + .string "GPIO_BSHR_BR2 ((uint32_t)0x00040000)" +.LASF4138: + .string "TIM_DMABurstLength_8Bytes TIM_DMABurstLength_8Transfers" +.LASF3644: + .string "I2C_Register_OADDR2 ((uint8_t)0x0C)" +.LASF1149: + .string "MSH_CMD_EXPORT_ALIAS(command,alias,desc) FINSH_FUNCTION_EXPORT_ALIAS(command, __cmd_ ##alias, desc)" +.LASF3122: + .string "USART_STATR_FE ((uint16_t)0x0002)" +.LASF4463: + .string "USB_DESCR_TYP_CS_ENDP 0x25" +.LASF3049: + .string "TIM_OC4M_2 ((uint16_t)0x4000)" +.LASF1322: + .string "ADC2_BASE (APB2PERIPH_BASE + 0x2800)" +.LASF1104: + .string "F_UNLCK 3" +.LASF3344: + .string "BKP_DR40 ((uint16_t)0x00B4)" +.LASF2186: + .string "GPIO_CFGLR_CNF0_0 ((uint32_t)0x00000004)" +.LASF1813: + .string "DMA_CTCIF1 ((uint32_t)0x00000002)" +.LASF3837: + .string "RCC_APB1Periph_USART2 ((uint32_t)0x00020000)" +.LASF707: + .string "__CC_SUPPORTS___INLINE__ 1" +.LASF3897: + .string "SPI_BaudRatePrescaler_64 ((uint16_t)0x0028)" +.LASF1514: + .string "ADC_SMP3_1 ((uint32_t)0x00000400)" +.LASF1743: + .string "DAC_WAVE1 ((uint32_t)0x000000C0)" +.LASF586: + .string "__SVID_VISIBLE 1" +.LASF4496: + .string "__PACKED __attribute__((packed))" +.LASF984: + .string "tzname _tzname" +.LASF937: + .string "_BSDTYPES_DEFINED " +.LASF1682: + .string "BKP_DATAR3_D ((uint16_t)0xFFFF)" +.LASF4722: + .string "I2C2_EV_IRQn" +.LASF2319: + .string "GPIO_BSHR_BR12 ((uint32_t)0x10000000)" +.LASF1449: + .string "ADC_ADON ((uint32_t)0x00000001)" +.LASF960: + .string "__timer_t_defined " +.LASF832: + .string "_REENT_EMERGENCY_SIZE 25" +.LASF1888: + .string "DMA_CFGR3_MSIZE_0 ((uint16_t)0x0400)" +.LASF899: + .string "_INTPTR_T_DECLARED " +.LASF2635: + .string "I2C_STAR2_DUALF ((uint16_t)0x0080)" +.LASF2447: + .string "AFIO_EXTICR1_EXTI0_PG ((uint16_t)0x0006)" +.LASF4039: + .string "TIM_DMABase_DCR ((uint16_t)0x0012)" +.LASF2715: + .string "RCC_PPRE2_DIV8 ((uint32_t)0x00003000)" +.LASF2821: + .string "RCC_BKPEN ((uint32_t)0x08000000)" +.LASF2866: + .string "SPI_CTLR1_BR_0 ((uint16_t)0x0008)" +.LASF4259: + .string "RB_UMS_DEV_ATTACH 0x01" +.LASF772: + .string "_Null_unspecified " +.LASF3892: + .string "SPI_BaudRatePrescaler_2 ((uint16_t)0x0000)" +.LASF4477: + .string "USB_ENDP_ADDR_MASK 0x0F" +.LASF4261: + .string "RB_U_IS_NAK 0x80" +.LASF990: + .string "TIMER_ABSTIME 4" +.LASF1123: + .string "RT_LIST_OBJECT_INIT(object) { &(object), &(object) }" +.LASF28: + .string "__ORDER_BIG_ENDIAN__ 4321" +.LASF370: + .string "__RTDEBUG_H__ " +.LASF3239: + .string "ADC_ExternalTrigConv_T1_CC3 ((uint32_t)0x00040000)" +.LASF3206: + .string "EXTEN_USBHD_IO_EN ((uint32_t)0x00000004)" +.LASF3427: + .string "DMA2_IT_TE4 ((uint32_t)0x10008000)" +.LASF4251: + .string "R8_USB_MIS_ST (*((PUINT8V)(0x40023405)))" +.LASF3876: + .string "RTC_FLAG_SEC ((uint16_t)0x0001)" +.LASF3360: + .string "__CH32V10x_DMA_H " +.LASF3628: + .string "GPIO_PinSource15 ((uint8_t)0x0F)" +.LASF3574: + .string "GPIO_Pin_11 ((uint16_t)0x0800)" +.LASF2641: + .string "PWR_CTLR_LPDS ((uint16_t)0x0001)" +.LASF4183: + .string "USART_IT_NE ((uint16_t)0x0260)" +.LASF2528: + .string "AFIO_EXTICR3_EXTI11_PC ((uint16_t)0x2000)" +.LASF415: + .string "__va_list__ " +.LASF3406: + .string "DMA1_IT_HT6 ((uint32_t)0x00400000)" +.LASF2835: + .string "RCC_BDRST ((uint32_t)0x00010000)" +.LASF4501: + .string "pEP2_OUT_DataBuf (pEP2_RAM_Addr)" +.LASF1644: + .string "ADC_SQ6_2 ((uint32_t)0x08000000)" +.LASF2961: + .string "TIM_CC1IE ((uint16_t)0x0002)" +.LASF4429: + .string "HUB_CLEAR_PORT_FEATURE 0x23" +.LASF4295: + .string "RB_UEP2_TX_EN 0x04" +.LASF605: + .string "_SYS_CDEFS_H_ " +.LASF2696: + .string "RCC_HPRE_DIV128 ((uint32_t)0x000000D0)" +.LASF2780: + .string "RCC_IOPCRST ((uint32_t)0x00000010)" +.LASF475: + .string "RT_THREAD_STAT_SIGNAL 0x10" +.LASF3725: + .string "PWR_PVDLevel_2V3 ((uint32_t)0x00000020)" +.LASF1335: + .string "DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008)" +.LASF839: + .string "_REENT_CHECK_RAND48(ptr) " +.LASF205: + .string "__FLT64_MANT_DIG__ 53" +.LASF3998: + .string "TIM_OSSRState_Disable ((uint16_t)0x0000)" +.LASF3675: + .string "I2C_FLAG_SMBDEFAULT ((uint32_t)0x00200000)" +.LASF4205: + .string "WWDG_Prescaler_1 ((uint32_t)0x00000000)" +.LASF2669: + .string "RCC_HSEBYP ((uint32_t)0x00040000)" +.LASF3976: + .string "TIM_OCNPolarity_Low ((uint16_t)0x0008)" +.LASF3543: + .string "OB_IWDG_SW ((uint16_t)0x0001)" +.LASF2929: + .string "TIM_MMS ((uint16_t)0x0070)" +.LASF4471: + .string "USB_DEV_CLASS_POWER 0x06" +.LASF1701: + .string "BKP_DATAR22_D ((uint16_t)0xFFFF)" +.LASF2008: + .string "EXTI_EVENR_MR1 ((uint32_t)0x00000002)" +.LASF117: + .string "__INT64_C(c) c ## LL" +.LASF24: + .string "__SIZEOF_SIZE_T__ 4" +.LASF3381: + .string "DMA_IT_TC ((uint32_t)0x00000002)" +.LASF2748: + .string "RCC_PLLMULL15 ((uint32_t)0x00340000)" +.LASF4037: + .string "TIM_DMABase_CCR4 ((uint16_t)0x0010)" +.LASF4700: + .string "EXTI1_IRQn" +.LASF4588: + .string "__tm_mon" +.LASF673: + .string "__DOTS , ..." +.LASF249: + .string "__FLT64X_MIN_EXP__ (-16381)" +.LASF265: + .string "__DEC32_MAX__ 9.999999E96DF" +.LASF3080: + .string "TIM_CC4P ((uint16_t)0x2000)" +.LASF4413: + .string "HID_SET_PROTOCOL 0x0B" +.LASF4080: + .string "TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000)" +.LASF3715: + .string "IWDG_Prescaler_8 ((uint8_t)0x01)" +.LASF316: + .string "__RT_THREAD_H__ " +.LASF3602: + .string "GPIO_Remap_TIM2ITR1_PTP_SOF ((uint32_t)0x00202000)" +.LASF1572: + .string "ADC_L_1 ((uint32_t)0x00200000)" +.LASF4455: + .string "USB_DESCR_TYP_ENDP 0x05" +.LASF2401: + .string "AFIO_PCFR1_TIM1_REMAP_PARTIALREMAP ((uint32_t)0x00000040)" +.LASF4760: + .string "pEP1_RAM_Addr" +.LASF614: + .string "___int_least8_t_defined 1" +.LASF4705: + .string "DMA1_Channel2_IRQn" +.LASF1015: + .string "S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)" +.LASF2362: + .string "AFIO_ECR_PIN_PX1 ((uint8_t)0x01)" +.LASF1438: + .string "ADC_DISCNUM ((uint32_t)0x0000E000)" +.LASF175: + .string "__DBL_HAS_QUIET_NAN__ 1" +.LASF2827: + .string "RCC_RTCSEL ((uint32_t)0x00000300)" +.LASF1191: + .string "__FAST8 " +.LASF3893: + .string "SPI_BaudRatePrescaler_4 ((uint16_t)0x0008)" +.LASF2188: + .string "GPIO_CFGLR_CNF1 ((uint32_t)0x000000C0)" +.LASF2788: + .string "RCC_TIM2RST ((uint32_t)0x00000001)" +.LASF3683: + .string "I2C_FLAG_OVR ((uint32_t)0x10000800)" +.LASF1749: + .string "DAC_MAMP1_2 ((uint32_t)0x00000400)" +.LASF3901: + .string "SPI_FirstBit_LSB ((uint16_t)0x0080)" +.LASF3944: + .string "SPI_I2S_FLAG_RXNE ((uint16_t)0x0001)" +.LASF4442: + .string "HUB_PORT_OVER_CURRENT 3" +.LASF321: + .string "RT_THREAD_PRIORITY_MAX 32" +.LASF922: + .string "NFDBITS (sizeof (fd_mask) * NBBY)" +.LASF219: + .string "__FLT128_MANT_DIG__ 113" +.LASF2738: + .string "RCC_PLLMULL5 ((uint32_t)0x000C0000)" +.LASF2777: + .string "RCC_AFIORST ((uint32_t)0x00000001)" +.LASF3291: + .string "ADC_IT_AWD ((uint16_t)0x0140)" +.LASF2181: + .string "GPIO_CFGLR_MODE7 ((uint32_t)0x30000000)" +.LASF3316: + .string "BKP_DR12 ((uint16_t)0x0044)" +.LASF3101: + .string "TIM_LOCK_1 ((uint16_t)0x0200)" +.LASF1434: + .string "ADC_AWDSGL ((uint32_t)0x00000200)" +.LASF4703: + .string "EXTI4_IRQn" +.LASF2017: + .string "EXTI_EVENR_MR10 ((uint32_t)0x00000400)" +.LASF1417: + .string "DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE)" +.LASF3152: + .string "USART_CTLR2_LBCL ((uint16_t)0x0100)" +.LASF3594: + .string "GPIO_Remap1_CAN1 ((uint32_t)0x001D4000)" +.LASF3637: + .string "I2C_Direction_Transmitter ((uint8_t)0x00)" +.LASF3108: + .string "TIM_DBA ((uint16_t)0x001F)" +.LASF309: + .string "__riscv_float_abi_soft 1" +.LASF2419: + .string "AFIO_PCFR1_CAN_REMAP_1 ((uint32_t)0x00004000)" +.LASF1476: + .string "ADC_SMP12 ((uint32_t)0x000001C0)" +.LASF3838: + .string "RCC_APB1Periph_USART3 ((uint32_t)0x00040000)" +.LASF3237: + .string "ADC_ExternalTrigConv_T4_CC4 ((uint32_t)0x000A0000)" +.LASF3200: + .string "WWDG_CFGR_WDGTB0 ((uint16_t)0x0080)" +.LASF2860: + .string "RTC_ALRMH_RTC_ALRM ((uint16_t)0xFFFF)" +.LASF732: + .string "__malloc_like __attribute__((__malloc__))" +.LASF2656: + .string "PWR_CTLR_PLS_2V8 ((uint16_t)0x00C0)" +.LASF1079: + .string "FEXLOCK _FEXLOCK" +.LASF2251: + .string "GPIO_CFGHR_CNF13_0 ((uint32_t)0x00400000)" +.LASF222: + .string "__FLT128_MIN_10_EXP__ (-4931)" +.LASF1207: + .string "INTPTR_MIN (-__INTPTR_MAX__ - 1)" +.LASF2381: + .string "AFIO_ECR_PORT_PA ((uint8_t)0x00)" +.LASF3758: + .string "RCC_PLLMul_14 ((uint32_t)0x00300000)" +.LASF3569: + .string "GPIO_Pin_6 ((uint16_t)0x0040)" +.LASF3110: + .string "TIM_DBA_1 ((uint16_t)0x0002)" +.LASF1058: + .string "O_RDONLY 0" +.LASF94: + .string "__UINTMAX_C(c) c ## ULL" +.LASF2793: + .string "RCC_CAN1RST ((uint32_t)0x02000000)" +.LASF1525: + .string "ADC_SMP6_0 ((uint32_t)0x00040000)" +.LASF3599: + .string "GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100)" +.LASF1379: + .string "GPIOA ((GPIO_TypeDef *) GPIOA_BASE)" +.LASF1425: + .string "ADC_AWDCH_0 ((uint32_t)0x00000001)" +.LASF1703: + .string "BKP_DATAR24_D ((uint16_t)0xFFFF)" +.LASF4489: + .string "USB_BO_CBW_SIG1 0x53" +.LASF2221: + .string "GPIO_CFGHR_MODE11_1 ((uint32_t)0x00002000)" +.LASF4160: + .string "USART_Mode_Tx ((uint16_t)0x0008)" +.LASF4110: + .string "TIM_TRGOSource_OC2Ref ((uint16_t)0x0050)" +.LASF3843: + .string "RCC_APB1Periph_USB ((uint32_t)0x00800000)" +.LASF4465: + .string "USB_DEV_CLASS_RESERVED 0x00" +.LASF4544: + .string "__CH32V10X_MISC_H " +.LASF749: + .string "__rangeof(type,start,end) (__offsetof(type, end) - __offsetof(type, start))" +.LASF2438: + .string "AFIO_EXTICR1_EXTI1 ((uint16_t)0x00F0)" +.LASF2806: + .string "RCC_AFIOEN ((uint32_t)0x00000001)" +.LASF3407: + .string "DMA1_IT_TE6 ((uint32_t)0x00800000)" +.LASF3489: + .string "EXTI_Line8 ((uint32_t)0x00100)" +.LASF3133: + .string "USART_BRR_DIV_Mantissa ((uint16_t)0xFFF0)" +.LASF2307: + .string "GPIO_BSHR_BR0 ((uint32_t)0x00010000)" +.LASF326: + .string "RT_IDLE_HOOK_LIST_SIZE 4" +.LASF2200: + .string "GPIO_CFGLR_CNF5 ((uint32_t)0x00C00000)" +.LASF1991: + .string "EXTI_INTENR_MR4 ((uint32_t)0x00000010)" +.LASF2540: + .string "AFIO_EXTICR4_EXTI12_PD ((uint16_t)0x0003)" +.LASF2606: + .string "I2C_OADDR1_ADD5 ((uint16_t)0x0020)" +.LASF3154: + .string "USART_CTLR2_CPOL ((uint16_t)0x0400)" +.LASF1708: + .string "BKP_DATAR29_D ((uint16_t)0xFFFF)" +.LASF1205: + .string "__int_fast32_t_defined 1" +.LASF3584: + .string "GPIO_PartialRemap_USART3 ((uint32_t)0x00140010)" +.LASF1526: + .string "ADC_SMP6_1 ((uint32_t)0x00080000)" +.LASF1814: + .string "DMA_CHTIF1 ((uint32_t)0x00000004)" +.LASF4560: + .string "rt_ubase_t" +.LASF4550: + .string "signed char" +.LASF165: + .string "__DBL_MIN_10_EXP__ (-307)" +.LASF4664: + .string "_mbrlen_state" +.LASF3245: + .string "ADC_Channel_2 ((uint8_t)0x02)" +.LASF137: + .string "__UINT_FAST32_MAX__ 0xffffffffU" +.LASF2623: + .string "I2C_STAR1_ARLO ((uint16_t)0x0200)" +.LASF2180: + .string "GPIO_CFGLR_MODE6_1 ((uint32_t)0x02000000)" +.LASF3311: + .string "BKP_DR7 ((uint16_t)0x001C)" +.LASF1301: + .string "SPI2_BASE (APB1PERIPH_BASE + 0x3800)" +.LASF4038: + .string "TIM_DMABase_BDTR ((uint16_t)0x0011)" +.LASF44: + .string "__INT32_TYPE__ long int" +.LASF421: + .string "rt_inline static __inline" +.LASF4252: + .string "RB_UMS_SOF_PRES 0x80" +.LASF3051: + .string "TIM_IC3PSC ((uint16_t)0x000C)" +.LASF1956: + .string "DMA_CFG7_PSIZE ((uint16_t)0x0300)" +.LASF1077: + .string "FDEFER _FDEFER" +.LASF3638: + .string "I2C_Direction_Receiver ((uint8_t)0x01)" +.LASF1187: + .string "__INT8 \"hh\"" +.LASF3656: + .string "I2C_IT_BUF ((uint16_t)0x0400)" +.LASF4597: + .string "_is_cxa" +.LASF2927: + .string "TIM_CCUS ((uint16_t)0x0004)" +.LASF811: + .string "unsigned" +.LASF730: + .string "__generic(expr,t,yes,no) _Generic(expr, t: yes, default: no)" +.LASF3025: + .string "TIM_IC2PSC_1 ((uint16_t)0x0800)" +.LASF2841: + .string "RCC_SFTRSTF ((uint32_t)0x10000000)" +.LASF1890: + .string "DMA_CFGR3_PL ((uint16_t)0x3000)" +.LASF4677: + .string "uint8_t" +.LASF2773: + .string "RCC_HSIRDYC ((uint32_t)0x00040000)" +.LASF440: + .string "RT_EFULL 3" +.LASF4629: + .string "_locale" +.LASF3983: + .string "TIM_CCxN_Enable ((uint16_t)0x0004)" +.LASF903: + .string "_BIG_ENDIAN 4321" +.LASF3724: + .string "PWR_PVDLevel_2V2 ((uint32_t)0x00000000)" +.LASF1960: + .string "DMA_CFG7_MSIZE_0 ((uint16_t)0x0400)" +.LASF3788: + .string "RCC_PCLK2_Div6 ((uint32_t)0x00008000)" +.LASF2510: + .string "AFIO_EXTICR3_EXTI8_PF ((uint16_t)0x0005)" +.LASF3114: + .string "TIM_DBL ((uint16_t)0x1F00)" +.LASF1221: + .string "UINT_LEAST16_MAX (__UINT_LEAST16_MAX__)" +.LASF3886: + .string "SPI_CPOL_Low ((uint16_t)0x0000)" +.LASF2741: + .string "RCC_PLLMULL8 ((uint32_t)0x00180000)" +.LASF792: + .string "_SYS_REENT_H_ " +.LASF1211: + .string "INT8_MAX (__INT8_MAX__)" +.LASF2647: + .string "PWR_CTLR_PLS_0 ((uint16_t)0x0020)" +.LASF2976: + .string "TIM_CC1IF ((uint16_t)0x0002)" +.LASF493: + .string "RT_EVENT_FLAG_CLEAR 0x04" +.LASF4372: + .string "R8_UEP5_CTRL (*((PUINT8V)(0x40023446)))" +.LASF1568: + .string "ADC_SQ16_3 ((uint32_t)0x00040000)" +.LASF3612: + .string "GPIO_PortSourceGPIOG ((uint8_t)0x06)" +.LASF424: + .string "INIT_BOARD_EXPORT(fn) INIT_EXPORT(fn, \"1\")" +.LASF2640: + .string "I2C_RTR_TRISE ((uint8_t)0x3F)" +.LASF80: + .string "__PTRDIFF_MAX__ 0x7fffffff" +.LASF4553: + .string "short unsigned int" +.LASF4575: + .string "_mbstate_t" +.LASF1153: + .string "RT_CPU_CACHE_LINE_SZ 32" +.LASF2882: + .string "SPI_CTLR2_ERRIE ((uint8_t)0x20)" +.LASF3302: + .string "BKP_RTCOutputSource_CalibClock ((uint16_t)0x0080)" +.LASF3647: + .string "I2C_Register_STAR2 ((uint8_t)0x18)" +.LASF1975: + .string "DMA_PADDR3_PA ((uint32_t)0xFFFFFFFF)" +.LASF4454: + .string "USB_DESCR_TYP_INTERF 0x04" +.LASF2067: + .string "EXTI_SWIEVR_SWIEVR0 ((uint32_t)0x00000001)" +.LASF4457: + .string "USB_DESCR_TYP_SPEED 0x07" +.LASF761: + .string "__sym_default(sym,impl,verid) __asm__(\".symver \" #impl \", \" #sym \"@@\" #verid)" +.LASF1299: + .string "WWDG_BASE (APB1PERIPH_BASE + 0x2C00)" +.LASF4391: + .string "USB_GET_STATUS 0x00" +.LASF2305: + .string "GPIO_BSHR_BS14 ((uint32_t)0x00004000)" +.LASF4487: + .string "USB_BO_CSW_SIZE 0x0D" +.LASF1513: + .string "ADC_SMP3_0 ((uint32_t)0x00000200)" +.LASF4390: + .string "USB_PID_PRE 0x0C" +.LASF2391: + .string "AFIO_PCFR1_USART3_REMAP ((uint32_t)0x00000030)" +.LASF4673: + .string "__lock" +.LASF3803: + .string "RCC_AHBPeriph_USBHD ((uint32_t)0x00001000)" +.LASF3044: + .string "TIM_OC4FE ((uint16_t)0x0400)" +.LASF3166: + .string "USART_CTLR3_DMAR ((uint16_t)0x0040)" +.LASF4170: + .string "USART_CPHA_2Edge ((uint16_t)0x0200)" +.LASF2744: + .string "RCC_PLLMULL11 ((uint32_t)0x00240000)" +.LASF3536: + .string "FLASH_WRProt_Pages108to111 ((uint32_t)0x08000000)" +.LASF2337: + .string "GPIO_BCR_BR14 ((uint16_t)0x4000)" +.LASF2336: + .string "GPIO_BCR_BR13 ((uint16_t)0x2000)" +.LASF473: + .string "RT_THREAD_STAT_YIELD 0x08" +.LASF1008: + .string "S_IFDIR _IFDIR" +.LASF1050: + .string "_FTRUNC 0x0400" +.LASF204: + .string "__FLT32_HAS_QUIET_NAN__ 1" +.LASF4055: + .string "TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00)" +.LASF3894: + .string "SPI_BaudRatePrescaler_8 ((uint16_t)0x0010)" +.LASF2327: + .string "GPIO_BCR_BR4 ((uint16_t)0x0010)" +.LASF3201: + .string "WWDG_CFGR_WDGTB1 ((uint16_t)0x0100)" +.LASF3615: + .string "GPIO_PinSource2 ((uint8_t)0x02)" +.LASF49: + .string "__UINT64_TYPE__ long long unsigned int" +.LASF2842: + .string "RCC_IWDGRSTF ((uint32_t)0x20000000)" +.LASF2214: + .string "GPIO_CFGHR_MODE9_0 ((uint32_t)0x00000010)" +.LASF931: + .string "_IN_ADDR_T_DECLARED " +.LASF2263: + .string "GPIO_INDR_IDR4 ((uint16_t)0x0010)" +.LASF1238: + .string "INT_FAST16_MAX (__INT_FAST16_MAX__)" +.LASF1007: + .string "S_IFMT _IFMT" +.LASF1546: + .string "ADC_SQ13 ((uint32_t)0x0000001F)" +.LASF2975: + .string "TIM_UIF ((uint16_t)0x0001)" +.LASF3458: + .string "DMA1_FLAG_HT7 ((uint32_t)0x04000000)" +.LASF1048: + .string "_FEXLOCK 0x0100" +.LASF3047: + .string "TIM_OC4M_0 ((uint16_t)0x1000)" +.LASF2562: + .string "AFIO_EXTICR4_EXTI15_PE ((uint16_t)0x4000)" +.LASF3517: + .string "FLASH_WRProt_Pages32to35 ((uint32_t)0x00000100)" +.LASF261: + .string "__DEC32_MANT_DIG__ 7" +.LASF3707: + .string "I2C_EVENT_SLAVE_STOP_DETECTED ((uint32_t)0x00000010)" +.LASF2881: + .string "SPI_CTLR2_SSOE ((uint8_t)0x04)" +.LASF3754: + .string "RCC_PLLMul_10 ((uint32_t)0x00200000)" +.LASF2132: + .string "FLASH_CTLR_BUF_LOAD ((uint16_t)0x00040000)" +.LASF3518: + .string "FLASH_WRProt_Pages36to39 ((uint32_t)0x00000200)" +.LASF4476: + .string "USB_ENDP_DIR_MASK 0x80" +.LASF2392: + .string "AFIO_PCFR1_USART3_REMAP_0 ((uint32_t)0x00000010)" +.LASF2911: + .string "SPI_I2SPR_I2SDIV ((uint16_t)0x00FF)" +.LASF530: + .string "RTGRAPHIC_CTRL_POWERON 1" +.LASF285: + .string "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1" +.LASF1141: + .string "rt_spin_lock_irqsave(lock) rt_hw_interrupt_disable()" +.LASF399: + .string "RT_MUTEX_HOLD_MAX RT_UINT8_MAX" +.LASF209: + .string "__FLT64_MAX_EXP__ 1024" +.LASF4079: + .string "TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040)" +.LASF1984: + .string "DMA_MADDR5_MA ((uint32_t)0xFFFFFFFF)" +.LASF3434: + .string "DMA1_FLAG_HT1 ((uint32_t)0x00000004)" +.LASF1785: + .string "DMA_TCIF1 ((uint32_t)0x00000002)" +.LASF2244: + .string "GPIO_CFGHR_CNF11 ((uint32_t)0x0000C000)" +.LASF308: + .string "__riscv_xlen 32" +.LASF2920: + .string "TIM_CMS_0 ((uint16_t)0x0020)" +.LASF1745: + .string "DAC_WAVE1_1 ((uint32_t)0x00000080)" +.LASF1957: + .string "DMA_CFG7_PSIZE_0 ((uint16_t)0x0100)" +.LASF1096: + .string "F_SETLKW 9" +.LASF686: + .string "__has_feature(x) 0" +.LASF874: + .string "_GLOBAL_REENT _global_impure_ptr" +.LASF350: + .string "FINSH_USING_HISTORY " +.LASF21: + .string "__SIZEOF_FLOAT__ 4" +.LASF3103: + .string "TIM_OSSR ((uint16_t)0x0800)" +.LASF1095: + .string "F_SETLK 8" +.LASF2950: + .string "TIM_ETF ((uint16_t)0x0F00)" +.LASF15: + .string "__OPTIMIZE__ 1" +.LASF4365: + .string "RB_UH_T_AUTO_TOG 0x10" +.LASF4731: + .string "USBWakeUp_IRQn" +.LASF4041: + .string "TIM_DMABurstLength_2Transfers ((uint16_t)0x0100)" +.LASF4536: + .string "DEF_AOA_DEVICE 0xF0" +.LASF2944: + .string "TIM_SMS_2 ((uint16_t)0x0004)" +.LASF3321: + .string "BKP_DR17 ((uint16_t)0x0058)" +.LASF3379: + .string "DMA_M2M_Enable ((uint32_t)0x00004000)" +.LASF1728: + .string "BKP_CTE ((uint16_t)0x0001)" +.LASF764: + .string "__RCSID_SOURCE(s) struct __hack" +.LASF2224: + .string "GPIO_CFGHR_MODE12_1 ((uint32_t)0x00020000)" +.LASF2782: + .string "RCC_ADC1RST ((uint32_t)0x00000200)" +.LASF2923: + .string "TIM_CTLR1_CKD ((uint16_t)0x0300)" +.LASF329: + .string "RT_TIMER_THREAD_PRIO 7" +.LASF4271: + .string "RB_UIS_IS_NAK 0x80" +.LASF1719: + .string "BKP_DATAR40_D ((uint16_t)0xFFFF)" +.LASF2359: + .string "AFIO_ECR_PIN_2 ((uint8_t)0x04)" +.LASF2708: + .string "RCC_PPRE2 ((uint32_t)0x00003800)" +.LASF4759: + .string "pEP0_RAM_Addr" +.LASF1254: + .string "WCHAR_MIN (__WCHAR_MIN__)" +.LASF548: + .string "__NEWLIB__ 3" +.LASF1296: + .string "TIM13_BASE (APB1PERIPH_BASE + 0x1C00)" +.LASF4456: + .string "USB_DESCR_TYP_QUALIF 0x06" +.LASF3997: + .string "TIM_OSSRState_Enable ((uint16_t)0x0800)" +.LASF4714: + .string "TIM1_UP_IRQn" +.LASF2703: + .string "RCC_PPRE1_DIV1 ((uint32_t)0x00000000)" +.LASF2568: + .string "IWDG_PR_1 ((uint8_t)0x02)" +.LASF2298: + .string "GPIO_BSHR_BS7 ((uint32_t)0x00000080)" +.LASF4238: + .string "R8_USB_INT_EN (*((PUINT8V)(0x40023402)))" +.LASF2117: + .string "FLASH_STATR_PGERR ((uint8_t)0x04)" +.LASF2555: + .string "AFIO_EXTICR4_EXTI14_PE ((uint16_t)0x0400)" +.LASF143: + .string "__GCC_IEC_559_COMPLEX 0" +.LASF203: + .string "__FLT32_HAS_INFINITY__ 1" +.LASF1100: + .string "F_RSETLKW 13" +.LASF1011: + .string "S_IFREG _IFREG" +.LASF4559: + .string "long int" +.LASF3990: + .string "TIM_AutomaticOutput_Disable ((uint16_t)0x0000)" +.LASF2576: + .string "I2C_CTLR1_ENARP ((uint16_t)0x0010)" +.LASF1853: + .string "DMA_CFGR1_MSIZE_1 ((uint16_t)0x0800)" +.LASF4109: + .string "TIM_TRGOSource_OC1Ref ((uint16_t)0x0040)" +.LASF2519: + .string "AFIO_EXTICR3_EXTI10_PA ((uint16_t)0x0000)" +.LASF547: + .string "_NEWLIB_VERSION \"3.0.0\"" +.LASF2938: + .string "TIM_OIS3 ((uint16_t)0x1000)" +.LASF4354: + .string "MASK_UH_ENDP 0x0F" +.LASF3600: + .string "GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200)" +.LASF3769: + .string "RCC_SYSCLK_Div64 ((uint32_t)0x000000C0)" +.LASF747: + .string "__hidden __attribute__((__visibility__(\"hidden\")))" +.LASF2475: + .string "AFIO_EXTICR2_EXTI4_PC ((uint16_t)0x0002)" +.LASF495: + .string "RT_DEVICE_FLAG_RDONLY 0x001" +.LASF2197: + .string "GPIO_CFGLR_CNF4 ((uint32_t)0x000C0000)" +.LASF4290: + .string "R8_UEP2_3_MOD (*((PUINT8V)(0x4002340d)))" +.LASF3661: + .string "I2C_IT_PECERR ((uint32_t)0x01001000)" +.LASF1395: + .string "TIM17 ((TIM_TypeDef *) TIM17_BASE)" +.LASF3369: + .string "DMA_PeripheralDataSize_Word ((uint32_t)0x00000200)" +.LASF2086: + .string "EXTI_SWIEVR_SWIEVR19 ((uint32_t)0x00080000)" +.LASF930: + .string "quad quad_t" +.LASF1257: + .string "WINT_MIN (__WINT_MIN__)" +.LASF1302: + .string "SPI3_BASE (APB1PERIPH_BASE + 0x3C00)" +.LASF2242: + .string "GPIO_CFGHR_CNF10_0 ((uint32_t)0x00000400)" +.LASF4076: + .string "TIM_TS_ETRF ((uint16_t)0x0070)" +.LASF4518: + .string "EP6_GetINSta() (R8_UEP6_CTRL&UEP_T_RES_NAK)" +.LASF3549: + .string "FLASH_IT_ERROR ((uint32_t)0x00000400)" +.LASF4001: + .string "TIM_OCNIdleState_Set ((uint16_t)0x0200)" +.LASF2141: + .string "FLASH_OBR_BFB2 ((uint16_t)0x0020)" +.LASF4297: + .string "R8_UH_EP_MOD R8_UEP2_3_MOD" +.LASF4695: + .string "TAMPER_IRQn" +.LASF2779: + .string "RCC_IOPBRST ((uint32_t)0x00000008)" +.LASF236: + .string "__FLT32X_MIN_10_EXP__ (-307)" +.LASF998: + .string "_IFIFO 0010000" +.LASF4253: + .string "RB_UMS_SOF_ACT 0x40" +.LASF3700: + .string "I2C_EVENT_MASTER_BYTE_TRANSMITTED ((uint32_t)0x00070084)" +.LASF4558: + .string "long long unsigned int" +.LASF1036: + .string "S_ISSOCK(m) (((m)&_IFMT) == _IFSOCK)" +.LASF786: + .string "__requires_exclusive(...) __lock_annotate(exclusive_locks_required(__VA_ARGS__))" +.LASF2376: + .string "AFIO_ECR_PIN_PX15 ((uint8_t)0x0F)" +.LASF4317: + .string "R16_UEP3_DMA (*((PUINT16V)(0x4002341c)))" +.LASF3640: + .string "I2C_AcknowledgedAddress_10bit ((uint16_t)0xC000)" +.LASF2572: + .string "IWDG_RVU ((uint8_t)0x02)" +.LASF60: + .string "__INT_FAST32_TYPE__ int" +.LASF3871: + .string "RTC_IT_SEC ((uint16_t)0x0001)" +.LASF2737: + .string "RCC_PLLMULL4 ((uint32_t)0x00080000)" +.LASF2694: + .string "RCC_HPRE_DIV16 ((uint32_t)0x000000B0)" +.LASF3918: + .string "I2S_AudioFreq_96k ((uint32_t)96000)" +.LASF2465: + .string "AFIO_EXTICR1_EXTI3_PD ((uint16_t)0x3000)" +.LASF95: + .string "__INTMAX_WIDTH__ 64" +.LASF1103: + .string "F_WRLCK 2" +.LASF1408: + .string "DMA2_Channel1 ((DMA_Channel_TypeDef *) DMA2_Channel1_BASE)" +.LASF1959: + .string "DMA_CFG7_MSIZE ((uint16_t)0x0C00)" +.LASF286: + .string "__GCC_ATOMIC_BOOL_LOCK_FREE 1" +.LASF2110: + .string "FLASH_ACTLR_LATENCY_2 ((uint8_t)0x02)" +.LASF3392: + .string "DMA1_IT_GL3 ((uint32_t)0x00000100)" +.LASF822: + .string "_ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}" +.LASF1486: + .string "ADC_SMP14_1 ((uint32_t)0x00002000)" +.LASF4696: + .string "RTC_IRQn" +.LASF2862: + .string "SPI_CTLR1_CPHA ((uint16_t)0x0001)" +.LASF1804: + .string "DMA_GIF6 ((uint32_t)0x00100000)" +.LASF3646: + .string "I2C_Register_STAR1 ((uint8_t)0x14)" +.LASF4382: + .string "USB_PID_SETUP 0x0D" +.LASF349: + .string "FINSH_THREAD_NAME \"tshell\"" +.LASF1026: + .string "S_IXOTH 0000001" +.LASF4717: + .string "TIM2_IRQn" +.LASF4274: + .string "RB_UIS_TOKEN0 0x10" +.LASF2265: + .string "GPIO_INDR_IDR6 ((uint16_t)0x0040)" +.LASF2446: + .string "AFIO_EXTICR1_EXTI0_PF ((uint16_t)0x0005)" +.LASF2871: + .string "SPI_CTLR1_SSI ((uint16_t)0x0100)" +.LASF292: + .string "__GCC_ATOMIC_INT_LOCK_FREE 2" +.LASF656: + .string "_WCHAR_T_ " +.LASF1800: + .string "DMA_GIF5 ((uint32_t)0x00010000)" +.LASF1818: + .string "DMA_CHTIF2 ((uint32_t)0x00000040)" +.LASF3036: + .string "TIM_OC3M ((uint16_t)0x0070)" +.LASF3465: + .string "DMA2_FLAG_TC2 ((uint32_t)0x10000020)" +.LASF626: + .string "_PTRDIFF_T_ " +.LASF1509: + .string "ADC_SMP2_0 ((uint32_t)0x00000040)" +.LASF3853: + .string "RCC_MCO_HSE ((uint8_t)0x06)" +.LASF1167: + .string "HSI_VALUE ((uint32_t)8000000)" +.LASF1261: + .string "UINT16_C(x) __UINT16_C(x)" +.LASF3727: + .string "PWR_PVDLevel_2V5 ((uint32_t)0x00000060)" +.LASF1380: + .string "GPIOB ((GPIO_TypeDef *) GPIOB_BASE)" +.LASF940: + .string "__clock_t_defined " +.LASF4046: + .string "TIM_DMABurstLength_7Transfers ((uint16_t)0x0600)" +.LASF499: + .string "RT_DEVICE_FLAG_STANDALONE 0x008" +.LASF1543: + .string "ADC_JOFFSET4 ((uint16_t)0x0FFF)" +.LASF3906: + .string "I2S_Standard_Phillips ((uint16_t)0x0000)" +.LASF4652: + .string "_strtok_last" +.LASF1422: + .string "ADC_JSTRT ((uint8_t)0x08)" +.LASF3104: + .string "TIM_BKE ((uint16_t)0x1000)" +.LASF3067: + .string "TIM_CC1E ((uint16_t)0x0001)" +.LASF1520: + .string "ADC_SMP5 ((uint32_t)0x00038000)" +.LASF3345: + .string "BKP_DR41 ((uint16_t)0x00B8)" +.LASF803: + .string "__lock_acquire(lock) __retarget_lock_acquire(lock)" +.LASF2025: + .string "EXTI_EVENR_MR18 ((uint32_t)0x00040000)" +.LASF1875: + .string "DMA_CFGR2_MEM2MEM ((uint16_t)0x4000)" +.LASF311: + .string "__ELF__ 1" +.LASF4234: + .string "RB_UH_DM_PIN 0x10" +.LASF3746: + .string "RCC_PLLMul_2 ((uint32_t)0x00000000)" +.LASF221: + .string "__FLT128_MIN_EXP__ (-16381)" +.LASF1558: + .string "ADC_SQ15 ((uint32_t)0x00007C00)" +.LASF2306: + .string "GPIO_BSHR_BS15 ((uint32_t)0x00008000)" +.LASF4485: + .string "MAX_PACKET_SIZE 64" +.LASF3368: + .string "DMA_PeripheralDataSize_HalfWord ((uint32_t)0x00000100)" +.LASF1094: + .string "F_GETLK 7" +.LASF3306: + .string "BKP_DR2 ((uint16_t)0x0008)" +.LASF1009: + .string "S_IFCHR _IFCHR" +.LASF3435: + .string "DMA1_FLAG_TE1 ((uint32_t)0x00000008)" +.LASF2275: + .string "GPIO_OUTDR_ODR0 ((uint16_t)0x0001)" +.LASF4529: + .string "ERR_AOA_PROTOCOL 0x41" +.LASF2425: + .string "AFIO_PCFR1_ADC1_ETRGINJ_REMAP ((uint32_t)0x00020000)" +.LASF1142: + .string "rt_spin_unlock_irqrestore(lock,level) rt_hw_interrupt_enable(level)" +.LASF1454: + .string "ADC_ALIGN ((uint32_t)0x00000800)" +.LASF3771: + .string "RCC_SYSCLK_Div256 ((uint32_t)0x000000E0)" +.LASF1547: + .string "ADC_SQ13_0 ((uint32_t)0x00000001)" +.LASF395: + .string "RT_UINT32_MAX 0xffffffff" +.LASF1459: + .string "ADC_JEXTTRIG ((uint32_t)0x00008000)" +.LASF4108: + .string "TIM_TRGOSource_OC1 ((uint16_t)0x0030)" +.LASF4710: + .string "DMA1_Channel7_IRQn" +.LASF3842: + .string "RCC_APB1Periph_I2C2 ((uint32_t)0x00400000)" +.LASF3226: + .string "ADC_Mode_InjecSimult_FastInterl ((uint32_t)0x00030000)" +.LASF3650: + .string "I2C_SMBusAlert_Low ((uint16_t)0x2000)" +.LASF3140: + .string "USART_CTLR1_TCIE ((uint16_t)0x0040)" +.LASF3225: + .string "ADC_Mode_RegSimult_AlterTrig ((uint32_t)0x00020000)" +.LASF776: + .string "__datatype_type_tag(kind,type) " +.LASF4495: + .string "USB_BO_CSW_SIG3 0x53" +.LASF2565: + .string "IWDG_KEY ((uint16_t)0xFFFF)" +.LASF3472: + .string "DMA2_FLAG_GL4 ((uint32_t)0x10001000)" +.LASF1337: + .string "DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x0030)" +.LASF3199: + .string "WWDG_CFGR_WDGTB ((uint16_t)0x0180)" +.LASF4395: + .string "USB_GET_DESCRIPTOR 0x06" +.LASF4414: + .string "USB_REQ_TYP_IN 0x80" +.LASF2076: + .string "EXTI_SWIEVR_SWIEVR9 ((uint32_t)0x00000200)" +.LASF3456: + .string "DMA1_FLAG_GL7 ((uint32_t)0x01000000)" +.LASF315: + .string "__RT_HW_H__ " +.LASF2433: + .string "AFIO_PCFR1_SWJ_CFG_RESET ((uint32_t)0x00000000)" +.LASF2878: + .string "SPI_CTLR1_BIDIMODE ((uint16_t)0x8000)" +.LASF4741: + .string "IENR" +.LASF1669: + .string "ADC_JSQ4_3 ((uint32_t)0x00040000)" +.LASF1675: + .string "ADC_IDATAR2_JDATA ((uint16_t)0xFFFF)" +.LASF411: + .string "_VA_LIST_ " +.LASF4539: + .string "WAIT_USB_TOUT_200US 3000" +.LASF1391: + .string "USART1 ((USART_TypeDef *) USART1_BASE)" +.LASF1778: + .string "DAC_LD12BDHR_DACC1DHR ((uint32_t)0x0000FFF0)" +.LASF2888: + .string "SPI_STATR_UDR ((uint8_t)0x08)" +.LASF1041: + .string "_FREAD 0x0001" +.LASF3402: + .string "DMA1_IT_HT5 ((uint32_t)0x00040000)" +.LASF3927: + .string "I2S_CPOL_Low ((uint16_t)0x0000)" +.LASF135: + .string "__UINT_FAST8_MAX__ 0xffffffffU" +.LASF4062: + .string "TIM_DMA_CC4 ((uint16_t)0x1000)" +.LASF1240: + .string "INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)" +.LASF2315: + .string "GPIO_BSHR_BR8 ((uint32_t)0x01000000)" +.LASF1397: + .string "TIM10 ((TIM_TypeDef *) TIM10_BASE)" +.LASF4388: + .string "USB_PID_DATA0 0x03" +.LASF2876: + .string "SPI_CTLR1_CRCEN ((uint16_t)0x2000)" +.LASF3531: + .string "FLASH_WRProt_Pages88to91 ((uint32_t)0x00400000)" +.LASF2671: + .string "RCC_PLLON ((uint32_t)0x01000000)" +.LASF2945: + .string "TIM_TS ((uint16_t)0x0070)" +.LASF2069: + .string "EXTI_SWIEVR_SWIEVR2 ((uint32_t)0x00000004)" +.LASF2808: + .string "RCC_IOPBEN ((uint32_t)0x00000008)" +.LASF4311: + .string "RB_UEP7_TX_EN 0x04" +.LASF476: + .string "RT_THREAD_STAT_SIGNAL_READY (RT_THREAD_STAT_SIGNAL | RT_THREAD_READY)" +.LASF486: + .string "RT_IPC_FLAG_PRIO 0x01" +.LASF2291: + .string "GPIO_BSHR_BS0 ((uint32_t)0x00000001)" +.LASF1159: + .string "STORE sw" +.LASF1448: + .string "ADC_AWDEN ((uint32_t)0x00800000)" +.LASF360: + .string "RT_PIPE_BUFSZ 512" +.LASF2366: + .string "AFIO_ECR_PIN_PX5 ((uint8_t)0x05)" +.LASF4601: + .string "__sbuf" +.LASF2055: + .string "EXTI_FTENR_TR8 ((uint32_t)0x00000100)" +.LASF171: + .string "__DBL_EPSILON__ ((double)2.22044604925031308084726333618164062e-16L)" +.LASF2289: + .string "GPIO_OUTDR_ODR14 ((uint16_t)0x4000)" +.LASF2288: + .string "GPIO_OUTDR_ODR13 ((uint16_t)0x2000)" +.LASF417: + .string "RT_UNUSED __attribute__((unused))" +.LASF3070: + .string "TIM_CC1NP ((uint16_t)0x0008)" +.LASF1846: + .string "DMA_CFGR1_PINC ((uint16_t)0x0040)" +.LASF3972: + .string "TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060)" +.LASF2198: + .string "GPIO_CFGLR_CNF4_0 ((uint32_t)0x00040000)" +.LASF3695: + .string "I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ((uint32_t)0x00070082)" +.LASF4133: + .string "TIM_DMABurstLength_3Bytes TIM_DMABurstLength_3Transfers" +.LASF2933: + .string "TIM_TI1S ((uint16_t)0x0080)" +.LASF384: + .string "RT_DEBUG_NOT_IN_INTERRUPT do { rt_base_t level; level = rt_hw_interrupt_disable(); if (rt_interrupt_get_nest() != 0) { rt_kprintf(\"Function[%s] shall not be used in ISR\\n\", __FUNCTION__); RT_ASSERT(0) } rt_hw_interrupt_enable(level); } while (0)" +.LASF3652: + .string "I2C_PECPosition_Next ((uint16_t)0x0800)" +.LASF4310: + .string "RB_UEP7_RX_EN 0x08" +.LASF889: + .string "_UINT16_T_DECLARED " +.LASF3454: + .string "DMA1_FLAG_HT6 ((uint32_t)0x00400000)" +.LASF456: + .string "RT_TIMER_FLAG_PERIODIC 0x2" +.LASF2886: + .string "SPI_STATR_TXE ((uint8_t)0x02)" +.LASF3462: + .string "DMA2_FLAG_HT1 ((uint32_t)0x10000004)" +.LASF1154: + .string "RT_DEFINE_SPINLOCK(x) " +.LASF1925: + .string "DMA_CFG5_MSIZE_1 ((uint16_t)0x0800)" +.LASF765: + .string "__SCCSID(s) struct __hack" +.LASF590: + .string "_POINTER_INT long" +.LASF388: + .string "RT_SUBVERSION 0L" +.LASF3565: + .string "GPIO_Pin_2 ((uint16_t)0x0004)" +.LASF4364: + .string "RB_UH_T_TOG 0x40" +.LASF3968: + .string "TIM_CounterMode_Up ((uint16_t)0x0000)" +.LASF752: + .string "__scanflike(fmtarg,firstvararg) __attribute__((__format__ (__scanf__, fmtarg, firstvararg)))" +.LASF314: + .string "RT_USING_NEWLIB 1" +.LASF2665: + .string "RCC_HSITRIM ((uint32_t)0x000000F8)" +.LASF2556: + .string "AFIO_EXTICR4_EXTI14_PF ((uint16_t)0x0500)" +.LASF1234: + .string "INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)" +.LASF3733: + .string "PWR_Regulator_LowPower ((uint32_t)0x00000001)" +.LASF2347: + .string "GPIO_LCK8 ((uint32_t)0x00000100)" +.LASF2035: + .string "EXTI_RTENR_TR8 ((uint32_t)0x00000100)" +.LASF3467: + .string "DMA2_FLAG_TE2 ((uint32_t)0x10000080)" +.LASF3424: + .string "DMA2_IT_GL4 ((uint32_t)0x10001000)" +.LASF2178: + .string "GPIO_CFGLR_MODE6 ((uint32_t)0x03000000)" +.LASF56: + .string "__UINT_LEAST32_TYPE__ long unsigned int" +.LASF4522: + .string "ERR_USB_CONNECT 0x15" +.LASF3792: + .string "RCC_LSE_Bypass ((uint8_t)0x04)" +.LASF738: + .string "__fastcall __attribute__((__fastcall__))" +.LASF3410: + .string "DMA1_IT_HT7 ((uint32_t)0x04000000)" +.LASF2258: + .string "GPIO_CFGHR_CNF15_1 ((uint32_t)0x80000000)" +.LASF3329: + .string "BKP_DR25 ((uint16_t)0x0078)" +.LASF4362: + .string "R8_UH_TX_LEN (*((PUINT16V)(0x4002343c)))" +.LASF1039: + .string "_SYS__DEFAULT_FCNTL_H_ " +.LASF3050: + .string "TIM_OC4CE ((uint16_t)0x8000)" +.LASF958: + .string "__clockid_t_defined " +.LASF1617: + .string "ADC_SQ2 ((uint32_t)0x000003E0)" +.LASF1076: + .string "FMARK _FMARK" +.LASF2215: + .string "GPIO_CFGHR_MODE9_1 ((uint32_t)0x00000020)" +.LASF1580: + .string "ADC_SQ7_4 ((uint32_t)0x00000010)" +.LASF731: + .string "__min_size(x) static (x)" +.LASF2457: + .string "AFIO_EXTICR1_EXTI2_PC ((uint16_t)0x0200)" +.LASF568: + .string "_SYS_FEATURES_H " +.LASF2482: + .string "AFIO_EXTICR2_EXTI5_PC ((uint16_t)0x0020)" +.LASF3864: + .string "RCC_FLAG_WWDGRST ((uint8_t)0x7E)" +.LASF3660: + .string "I2C_IT_TIMEOUT ((uint32_t)0x01004000)" +.LASF2398: + .string "AFIO_PCFR1_TIM1_REMAP_0 ((uint32_t)0x00000040)" +.LASF1657: + .string "ADC_JSQ2_3 ((uint32_t)0x00000100)" +.LASF2930: + .string "TIM_MMS_0 ((uint16_t)0x0010)" +.LASF2485: + .string "AFIO_EXTICR2_EXTI5_PF ((uint16_t)0x0050)" +.LASF2716: + .string "RCC_PPRE2_DIV16 ((uint32_t)0x00003800)" +.LASF4361: + .string "R8_UEP3_CTRL (*((PUINT8V)(0x4002343e)))" +.LASF2667: + .string "RCC_HSEON ((uint32_t)0x00010000)" +.LASF4106: + .string "TIM_TRGOSource_Enable ((uint16_t)0x0010)" +.LASF4482: + .string "USB_ENDP_TYPE_INTER 0x03" +.LASF1709: + .string "BKP_DATAR30_D ((uint16_t)0xFFFF)" +.LASF1579: + .string "ADC_SQ7_3 ((uint32_t)0x00000008)" +.LASF1424: + .string "ADC_AWDCH ((uint32_t)0x0000001F)" +.LASF3805: + .string "RCC_APB2Periph_GPIOA ((uint32_t)0x00000004)" +.LASF661: + .string "___int_wchar_t_h " +.LASF2393: + .string "AFIO_PCFR1_USART3_REMAP_1 ((uint32_t)0x00000020)" +.LASF3249: + .string "ADC_Channel_6 ((uint8_t)0x06)" +.LASF4040: + .string "TIM_DMABurstLength_1Transfer ((uint16_t)0x0000)" +.LASF491: + .string "RT_EVENT_FLAG_AND 0x01" +.LASF4404: + .string "HUB_GET_STATE 0x02" +.LASF2746: + .string "RCC_PLLMULL13 ((uint32_t)0x002C0000)" +.LASF4486: + .string "USB_BO_CBW_SIZE 0x1F" +.LASF2700: + .string "RCC_PPRE1_0 ((uint32_t)0x00000100)" +.LASF1216: + .string "INT16_MIN (-__INT16_MAX__ - 1)" +.LASF4397: + .string "USB_GET_CONFIGURATION 0x08" +.LASF3173: + .string "USART_GPR_PSC_0 ((uint16_t)0x0001)" +.LASF681: + .string "__flexarr [0]" +.LASF1612: + .string "ADC_SQ1_0 ((uint32_t)0x00000001)" +.LASF1062: + .string "O_CREAT _FCREAT" +.LASF427: + .string "INIT_COMPONENT_EXPORT(fn) INIT_EXPORT(fn, \"4\")" +.LASF833: + .string "_REENT_ASCTIME_SIZE 26" +.LASF3064: + .string "TIM_IC4F_1 ((uint16_t)0x2000)" +.LASF3346: + .string "BKP_DR42 ((uint16_t)0x00BC)" +.LASF2524: + .string "AFIO_EXTICR3_EXTI10_PF ((uint16_t)0x0500)" +.LASF2292: + .string "GPIO_BSHR_BS1 ((uint32_t)0x00000002)" +.LASF1174: + .string "char" +.LASF2577: + .string "I2C_CTLR1_ENPEC ((uint16_t)0x0020)" +.LASF2672: + .string "RCC_PLLRDY ((uint32_t)0x02000000)" +.LASF1121: + .string "__RT_SERVICE_H__ " +.LASF3072: + .string "TIM_CC2P ((uint16_t)0x0020)" +.LASF1688: + .string "BKP_DATAR9_D ((uint16_t)0xFFFF)" +.LASF882: + .string "__BIT_TYPES_DEFINED__ 1" +.LASF129: + .string "__INT_FAST16_MAX__ 0x7fffffff" +.LASF3414: + .string "DMA2_IT_HT1 ((uint32_t)0x10000004)" +.LASF3559: + .string "FLASH_FLAG_BANK1_EOP FLASH_FLAG_EOP" +.LASF3220: + .string "EXTEN_FLASH_CLK_TRIM2 ((uint32_t)0x00040000)" +.LASF507: + .string "RT_DEVICE_OFLAG_CLOSE 0x000" +.LASF243: + .string "__FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x" +.LASF2679: + .string "RCC_SWS ((uint32_t)0x0000000C)" +.LASF4366: + .string "RB_UH_T_RES 0x01" +.LASF652: + .string "_WCHAR_T " +.LASF2006: + .string "EXTI_INTENR_MR19 ((uint32_t)0x00080000)" +.LASF2916: + .string "TIM_URS ((uint16_t)0x0004)" +.LASF4777: + .string "UsbDevEndp0Size" +.LASF2993: + .string "TIM_TG ((uint8_t)0x40)" +.LASF3846: + .string "RCC_APB1Periph_BKP ((uint32_t)0x08000000)" +.LASF3829: + .string "RCC_APB1Periph_TIM6 ((uint32_t)0x00000010)" +.LASF3881: + .string "SPI_Direction_1Line_Tx ((uint16_t)0xC000)" +.LASF1633: + .string "ADC_SQ4_3 ((uint32_t)0x00040000)" +.LASF1265: + .string "UINT64_C(x) __UINT64_C(x)" +.LASF2405: + .string "AFIO_PCFR1_TIM2_REMAP_1 ((uint32_t)0x00000200)" +.LASF3722: + .string "IWDG_FLAG_RVU ((uint16_t)0x0002)" +.LASF4098: + .string "TIM_UpdateSource_Regular ((uint16_t)0x0001)" +.LASF2682: + .string "RCC_SWS_HSI ((uint32_t)0x00000000)" +.LASF3370: + .string "DMA_MemoryDataSize_Byte ((uint32_t)0x00000000)" +.LASF944: + .string "__daddr_t_defined " +.LASF1442: + .string "ADC_DUALMOD ((uint32_t)0x000F0000)" +.LASF385: + .ascii "RT_DEBUG_IN_THREAD_CONTEXT do { " + .string "rt_base_t level; level = rt_hw_interrupt_disable(); if (rt_thread_self() == RT_NULL) { rt_kprintf(\"Function[%s] shall not be used before scheduler start\\n\", __FUNCTION__); RT_ASSERT(0) } RT_DEBUG_NOT_IN_INTERRUPT; rt_hw_interrupt_enable(level); } while (0)" +.LASF4792: + .string "s0_fp" +.LASF1528: + .string "ADC_SMP7 ((uint32_t)0x00E00000)" +.LASF3419: + .string "DMA2_IT_TE2 ((uint32_t)0x10000080)" +.LASF1672: + .string "ADC_JL_0 ((uint32_t)0x00100000)" +.LASF824: + .string "_REENT_SMALL_CHECK_INIT(ptr) " +.LASF3743: + .string "RCC_PLLSource_HSI_Div2 ((uint32_t)0x00000000)" +.LASF1283: + .string "FLASH_BASE ((uint32_t)0x08000000)" +.LASF1105: + .string "F_UNLKSYS 4" +.LASF4043: + .string "TIM_DMABurstLength_4Transfers ((uint16_t)0x0300)" +.LASF3205: + .string "EXTEN_USBD_PU_EN ((uint32_t)0x00000002)" +.LASF3821: + .string "RCC_APB2Periph_TIM17 ((uint32_t)0x00040000)" +.LASF1667: + .string "ADC_JSQ4_1 ((uint32_t)0x00010000)" +.LASF4614: + .string "_nbuf" +.LASF976: + .string "_PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF)" +.LASF1900: + .string "DMA_CFG4_PINC ((uint16_t)0x0040)" +.LASF1947: + .string "DMA_CFG6_MEM2MEM ((uint16_t)0x4000)" +.LASF4035: + .string "TIM_DMABase_CCR2 ((uint16_t)0x000E)" +.LASF668: + .string "NULL ((void *)0)" +.LASF2543: + .string "AFIO_EXTICR4_EXTI12_PG ((uint16_t)0x0006)" +.LASF2954: + .string "TIM_ETF_3 ((uint16_t)0x0800)" +.LASF3891: + .string "SPI_NSS_Hard ((uint16_t)0x0000)" +.LASF735: + .string "__noinline __attribute__ ((__noinline__))" +.LASF3234: + .string "ADC_ExternalTrigConv_T1_CC2 ((uint32_t)0x00020000)" +.LASF1839: + .string "DMA_CTEIF7 ((uint32_t)0x08000000)" +.LASF3372: + .string "DMA_MemoryDataSize_Word ((uint32_t)0x00000800)" +.LASF2121: + .string "FLASH_CTLR_PER ((uint16_t)0x0002)" +.LASF2812: + .string "RCC_ADC2EN ((uint32_t)0x00000400)" +.LASF4778: + .string "FoundNewDev" +.LASF743: + .string "__predict_true(exp) __builtin_expect((exp), 1)" +.LASF4773: + .string "GpVar" +.LASF169: + .string "__DBL_MAX__ ((double)1.79769313486231570814527423731704357e+308L)" +.LASF4462: + .string "USB_DESCR_TYP_CS_INTF 0x24" +.LASF4331: + .string "RB_UEP_AUTO_TOG 0x10" +.LASF4577: + .string "__ULong" +.LASF185: + .string "__LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L" +.LASF4680: + .string "_daylight" +.LASF4483: + .string "USB_DEVICE_ADDR 0x02" +.LASF2377: + .string "AFIO_ECR_PORT ((uint8_t)0x70)" +.LASF3869: + .string "RTC_IT_OW ((uint16_t)0x0004)" +.LASF1102: + .string "F_RDLCK 1" +.LASF1927: + .string "DMA_CFG5_PL_0 ((uint16_t)0x1000)" +.LASF634: + .string "_SIZE_T " +.LASF2756: + .string "RCC_CFGR0_MCO_SYSCLK ((uint32_t)0x04000000)" +.LASF2548: + .string "AFIO_EXTICR4_EXTI13_PE ((uint16_t)0x0040)" +.LASF294: + .string "__GCC_ATOMIC_LLONG_LOCK_FREE 1" +.LASF2015: + .string "EXTI_EVENR_MR8 ((uint32_t)0x00000100)" +.LASF785: + .string "__asserts_shared(...) __lock_annotate(assert_shared_lock(__VA_ARGS__))" +.LASF2312: + .string "GPIO_BSHR_BR5 ((uint32_t)0x00200000)" +.LASF646: + .string "_GCC_SIZE_T " +.LASF3993: + .string "TIM_LOCKLevel_2 ((uint16_t)0x0200)" +.LASF3749: + .string "RCC_PLLMul_5 ((uint32_t)0x000C0000)" +.LASF741: + .string "__unreachable() __builtin_unreachable()" +.LASF1590: + .string "ADC_SQ9_2 ((uint32_t)0x00001000)" +.LASF1878: + .string "DMA_CFGR3_HTIE ((uint16_t)0x0004)" +.LASF823: + .string "_REENT_INIT_ATEXIT _NULL, _ATEXIT_INIT," +.LASF4809: + .string "__FUNCTION__" +.LASF2300: + .string "GPIO_BSHR_BS9 ((uint32_t)0x00000200)" +.LASF2134: + .string "FLASH_ADDR_FAR ((uint32_t)0xFFFFFFFF)" +.LASF1720: + .string "BKP_DATAR41_D ((uint16_t)0xFFFF)" +.LASF1172: + .string "__STDINT_EXP(x) __ ##x ##__" +.LASF666: + .string "__need_wchar_t" +.LASF2610: + .string "I2C_OADDR1_ADD9 ((uint16_t)0x0200)" +.LASF3974: + .string "TIM_OCPolarity_Low ((uint16_t)0x0002)" +.LASF601: + .string "_ELIDABLE_INLINE static __inline__" +.LASF142: + .string "__GCC_IEC_559 0" +.LASF1549: + .string "ADC_SQ13_2 ((uint32_t)0x00000004)" +.LASF3177: + .string "USART_GPR_PSC_4 ((uint16_t)0x0010)" +.LASF322: + .string "RT_TICK_PER_SECOND 1000" +.LASF1537: + .string "ADC_SMP9_0 ((uint32_t)0x08000000)" +.LASF4637: + .string "_cvtbuf" +.LASF1648: + .string "ADC_JSQ1_0 ((uint32_t)0x00000001)" +.LASF191: + .string "__FLT32_MANT_DIG__ 24" +.LASF2684: + .string "RCC_SWS_PLL ((uint32_t)0x00000008)" +.LASF3468: + .string "DMA2_FLAG_GL3 ((uint32_t)0x10000100)" +.LASF3751: + .string "RCC_PLLMul_7 ((uint32_t)0x00140000)" +.LASF4606: + .string "_file" +.LASF2769: + .string "RCC_HSERDYIE ((uint32_t)0x00000800)" +.LASF996: + .string "_IFLNK 0120000" +.LASF2935: + .string "TIM_OIS1N ((uint16_t)0x0200)" +.LASF4466: + .string "USB_DEV_CLASS_AUDIO 0x01" +.LASF2329: + .string "GPIO_BCR_BR6 ((uint16_t)0x0040)" +.LASF472: + .string "RT_THREAD_STAT_MASK 0x07" +.LASF1594: + .string "ADC_SQ10_0 ((uint32_t)0x00008000)" +.LASF4743: + .string "IRER" +.LASF520: + .string "RT_DEVICE_CTRL_CHAR_STREAM 0x10" +.LASF635: + .string "_SYS_SIZE_T_H " +.LASF83: + .string "__SHRT_WIDTH__ 16" +.LASF1013: + .string "S_IFSOCK _IFSOCK" +.LASF4681: + .string "_tzname" +.LASF3248: + .string "ADC_Channel_5 ((uint8_t)0x05)" +.LASF70: + .string "__GXX_ABI_VERSION 1013" +.LASF393: + .string "RT_UINT8_MAX 0xff" +.LASF849: + .string "_REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)" +.LASF510: + .string "RT_DEVICE_OFLAG_RDWR 0x003" +.LASF1790: + .string "DMA_HTIF2 ((uint32_t)0x00000040)" +.LASF1127: + .string "rt_list_for_each_entry(pos,head,member) for (pos = rt_list_entry((head)->next, typeof(*pos), member); &pos->member != (head); pos = rt_list_entry(pos->member.next, typeof(*pos), member))" +.LASF3358: + .string "DBGMCU_STOP ((uint32_t)0x00000002)" +.LASF739: + .string "__result_use_check __attribute__((__warn_unused_result__))" +.LASF639: + .string "_SIZE_T_ " +.LASF3091: + .string "TIM_DTG_0 ((uint16_t)0x0001)" +.LASF1786: + .string "DMA_HTIF1 ((uint32_t)0x00000004)" +.LASF3872: + .string "RTC_FLAG_RTOFF ((uint16_t)0x0020)" +.LASF168: + .string "__DBL_DECIMAL_DIG__ 17" +.LASF4068: + .string "TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000)" +.LASF1474: + .string "ADC_SMP11_1 ((uint32_t)0x00000010)" +.LASF287: + .string "__GCC_ATOMIC_CHAR_LOCK_FREE 1" +.LASF14: + .string "__ATOMIC_CONSUME 1" +.LASF962: + .string "_USECONDS_T_DECLARED " +.LASF1518: + .string "ADC_SMP4_1 ((uint32_t)0x00002000)" +.LASF2872: + .string "SPI_CTLR1_SSM ((uint16_t)0x0200)" +.LASF4458: + .string "USB_DESCR_TYP_OTG 0x09" +.LASF2988: + .string "TIM_CC1G ((uint8_t)0x02)" +.LASF2592: + .string "I2C_CTLR2_FREQ_4 ((uint16_t)0x0010)" +.LASF2678: + .string "RCC_SW_PLL ((uint32_t)0x00000002)" +.LASF4799: + .string "texit" +.LASF2925: + .string "TIM_CKD_1 ((uint16_t)0x0200)" +.LASF1231: + .string "INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)" +.LASF2261: + .string "GPIO_INDR_IDR2 ((uint16_t)0x0004)" +.LASF260: + .string "__FLT64X_HAS_QUIET_NAN__ 1" +.LASF3505: + .string "FLASH_HalfCycleAccess_Enable ((uint32_t)0x00000008)" +.LASF3916: + .string "I2S_MCLKOutput_Disable ((uint16_t)0x0000)" +.LASF1014: + .string "S_IFIFO _IFIFO" +.LASF4562: + .string "rt_size_t" +.LASF4475: + .string "USB_DEV_CLASS_VEN_SPEC 0xFF" +.LASF1473: + .string "ADC_SMP11_0 ((uint32_t)0x00000008)" +.LASF1293: + .string "TIM6_BASE (APB1PERIPH_BASE + 0x1000)" +.LASF968: + .string "SCHED_FIFO 1" +.LASF986: + .string "CLOCK_DISABLED 0" +.LASF1621: + .string "ADC_SQ2_3 ((uint32_t)0x00000100)" +.LASF770: + .string "_Nonnull " +.LASF4142: + .string "TIM_DMABurstLength_12Bytes TIM_DMABurstLength_12Transfers" +.LASF1683: + .string "BKP_DATAR4_D ((uint16_t)0xFFFF)" +.LASF4555: + .string "rt_uint32_t" +.LASF2481: + .string "AFIO_EXTICR2_EXTI5_PB ((uint16_t)0x0010)" +.LASF4492: + .string "USB_BO_CSW_SIG0 0x55" +.LASF4747: + .string "IPRR" +.LASF4506: + .string "pEP4_IN_DataBuf (pEP4_RAM_Addr+64)" +.LASF3077: + .string "TIM_CC3NE ((uint16_t)0x0400)" +.LASF2670: + .string "RCC_CSSON ((uint32_t)0x00080000)" +.LASF2718: + .string "RCC_ADCPRE_0 ((uint32_t)0x00004000)" +.LASF926: + .string "FD_CLR(n,p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))" +.LASF2161: + .string "GPIO_CFGLR_MODE0_0 ((uint32_t)0x00000001)" +.LASF2824: + .string "RCC_LSEON ((uint32_t)0x00000001)" +.LASF281: + .string "__DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL" +.LASF4675: + .string "_impure_ptr" +.LASF3097: + .string "TIM_DTG_6 ((uint16_t)0x0040)" +.LASF4380: + .string "USB_PID_NULL 0x00" +.LASF2998: + .string "TIM_OC1FE ((uint16_t)0x0004)" +.LASF2286: + .string "GPIO_OUTDR_ODR11 ((uint16_t)0x0800)" +.LASF3195: + .string "WWDG_CFGR_W3 ((uint16_t)0x0008)" +.LASF647: + .string "_SIZET_ " +.LASF3550: + .string "FLASH_IT_EOP ((uint32_t)0x00001000)" +.LASF726: + .string "__aligned(x) __attribute__((__aligned__(x)))" +.LASF2527: + .string "AFIO_EXTICR3_EXTI11_PB ((uint16_t)0x1000)" +.LASF90: + .string "__SIZE_WIDTH__ 32" +.LASF4756: + .string "UINT8" +.LASF2649: + .string "PWR_CTLR_PLS_2 ((uint16_t)0x0080)" +.LASF3765: + .string "RCC_SYSCLK_Div2 ((uint32_t)0x00000080)" +.LASF4586: + .string "__tm_hour" +.LASF4613: + .string "_ubuf" +.LASF2487: + .string "AFIO_EXTICR2_EXTI6_PA ((uint16_t)0x0000)" +.LASF4158: + .string "USART_Parity_Odd ((uint16_t)0x0600)" +.LASF3423: + .string "DMA2_IT_TE3 ((uint32_t)0x10000800)" +.LASF1631: + .string "ADC_SQ4_1 ((uint32_t)0x00010000)" +.LASF4044: + .string "TIM_DMABurstLength_5Transfers ((uint16_t)0x0400)" +.LASF3910: + .string "I2S_Standard_PCMLong ((uint16_t)0x00B0)" +.LASF4690: + .string "EXC_IRQn" +.LASF636: + .string "_T_SIZE_ " +.LASF2983: + .string "TIM_CC1OF ((uint16_t)0x0200)" +.LASF348: + .string "RT_USING_FINSH " +.LASF3931: + .string "SPI_NSSInternalSoft_Set ((uint16_t)0x0100)" +.LASF1999: + .string "EXTI_INTENR_MR12 ((uint32_t)0x00001000)" +.LASF1298: + .string "RTC_BASE (APB1PERIPH_BASE + 0x2800)" +.LASF2: + .string "__STDC_UTF_16__ 1" +.LASF4745: + .string "IPSR" +.LASF3488: + .string "EXTI_Line7 ((uint32_t)0x00080)" +.LASF2496: + .string "AFIO_EXTICR2_EXTI7_PC ((uint16_t)0x2000)" +.LASF3796: + .string "RCC_AHBPeriph_DMA1 ((uint32_t)0x00000001)" +.LASF1389: + .string "SPI1 ((SPI_TypeDef *) SPI1_BASE)" +.LASF1250: + .string "SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)" +.LASF1930: + .string "DMA_CFG6_EN ((uint16_t)0x0001)" +.LASF4764: + .string "pEP5_RAM_Addr" +.LASF4595: + .string "_dso_handle" +.LASF865: + .string "_REENT_WCRTOMB_STATE(ptr) ((ptr)->_new._reent._wcrtomb_state)" +.LASF3398: + .string "DMA1_IT_HT4 ((uint32_t)0x00004000)" +.LASF1354: + .string "TIM2 ((TIM_TypeDef *) TIM2_BASE)" +.LASF3819: + .string "RCC_APB2Periph_TIM15 ((uint32_t)0x00010000)" +.LASF352: + .string "FINSH_USING_SYMTAB " +.LASF1219: + .string "INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)" +.LASF2301: + .string "GPIO_BSHR_BS10 ((uint32_t)0x00000400)" +.LASF1736: + .string "DAC_EN1 ((uint32_t)0x00000001)" +.LASF1973: + .string "DMA_PADDR1_PA ((uint32_t)0xFFFFFFFF)" +.LASF2534: + .string "AFIO_EXTICR4_EXTI13 ((uint16_t)0x00F0)" +.LASF1065: + .string "O_SYNC _FSYNC" +.LASF53: + .string "__INT_LEAST64_TYPE__ long long int" +.LASF593: + .string "__EXPORT " +.LASF919: + .string "__SYS_SELECT_H__ " +.LASF2915: + .string "TIM_UDIS ((uint16_t)0x0002)" +.LASF4122: + .string "TIM_FLAG_CC3 ((uint16_t)0x0008)" +.LASF1359: + .string "TIM7 ((TIM_TypeDef *) TIM7_BASE)" +.LASF3755: + .string "RCC_PLLMul_11 ((uint32_t)0x00240000)" +.LASF1851: + .string "DMA_CFGR1_MSIZE ((uint16_t)0x0C00)" +.LASF2478: + .string "AFIO_EXTICR2_EXTI4_PF ((uint16_t)0x0005)" +.LASF2790: + .string "RCC_WWDGRST ((uint32_t)0x00000800)" +.LASF1696: + .string "BKP_DATAR17_D ((uint16_t)0xFFFF)" +.LASF2643: + .string "PWR_CTLR_CWUF ((uint16_t)0x0004)" +.LASF3020: + .string "TIM_IC1F_1 ((uint16_t)0x0020)" +.LASF3300: + .string "BKP_TamperPinLevel_Low ((uint16_t)0x0001)" +.LASF1414: + .string "CRC ((CRC_TypeDef *) CRC_BASE)" +.LASF3745: + .string "RCC_PLLSource_HSE_Div2 ((uint32_t)0x00030000)" +.LASF725: + .string "__packed __attribute__((__packed__))" +.LASF2838: + .string "RCC_RMVF ((uint32_t)0x01000000)" +.LASF1147: + .string "FINSH_FUNCTION_EXPORT_ALIAS(name,alias,desc) FINSH_FUNCTION_EXPORT_CMD(name, alias, desc)" +.LASF845: + .string "_REENT_CHECK_SIGNAL_BUF(ptr) " +.LASF3940: + .string "SPI_I2S_IT_OVR ((uint8_t)0x56)" +.LASF2372: + .string "AFIO_ECR_PIN_PX11 ((uint8_t)0x0B)" +.LASF3619: + .string "GPIO_PinSource6 ((uint8_t)0x06)" +.LASF1435: + .string "ADC_JAUTO ((uint32_t)0x00000400)" +.LASF2174: + .string "GPIO_CFGLR_MODE4_1 ((uint32_t)0x00020000)" +.LASF871: + .string "_Kmax (sizeof (size_t) << 3)" +.LASF1161: + .string "REGBYTES 4" +.LASF4069: + .string "TIM_TS_ITR0 ((uint16_t)0x0000)" +.LASF2594: + .string "I2C_CTLR2_ITERREN ((uint16_t)0x0100)" +.LASF762: + .string "__FBSDID(s) struct __hack" +.LASF248: + .string "__FLT64X_DIG__ 33" +.LASF3118: + .string "TIM_DBL_3 ((uint16_t)0x0800)" +.LASF2386: + .string "AFIO_ECR_EVOE ((uint8_t)0x80)" +.LASF1317: + .string "GPIOD_BASE (APB2PERIPH_BASE + 0x1400)" +.LASF3963: + .string "TIM_Channel_3 ((uint16_t)0x0008)" +.LASF2171: + .string "GPIO_CFGLR_MODE3_1 ((uint32_t)0x00002000)" +.LASF877: + .string "__need_NULL " +.LASF4022: + .string "TIM_DMABase_CR2 ((uint16_t)0x0001)" +.LASF778: + .string "__lockable __lock_annotate(lockable)" +.LASF1083: + .string "FEXCL _FEXCL" +.LASF3532: + .string "FLASH_WRProt_Pages92to95 ((uint32_t)0x00800000)" +.LASF4289: + .string "RB_UEP4_TX_EN 0x04" +.LASF4437: + .string "HUB_C_HUB_LOCAL_POWER 0" +.LASF2867: + .string "SPI_CTLR1_BR_1 ((uint16_t)0x0010)" +.LASF3035: + .string "TIM_OC3PE ((uint16_t)0x0008)" +.LASF2544: + .string "AFIO_EXTICR4_EXTI13_PA ((uint16_t)0x0000)" +.LASF494: + .string "RT_DEVICE_FLAG_DEACTIVATE 0x000" +.LASF4776: + .string "ThisUsbDev" +.LASF355: + .string "FINSH_CMD_SIZE 80" +.LASF884: + .string "_SYS__STDINT_H " +.LASF166: + .string "__DBL_MAX_EXP__ 1024" +.LASF2074: + .string "EXTI_SWIEVR_SWIEVR7 ((uint32_t)0x00000080)" +.LASF2084: + .string "EXTI_SWIEVR_SWIEVR17 ((uint32_t)0x00020000)" +.LASF2314: + .string "GPIO_BSHR_BR7 ((uint32_t)0x00800000)" +.LASF2631: + .string "I2C_STAR2_TRA ((uint16_t)0x0004)" +.LASF1460: + .string "ADC_EXTSEL ((uint32_t)0x000E0000)" +.LASF993: + .string "_IFCHR 0020000" +.LASF2804: + .string "RCC_CRCEN ((uint16_t)0x0040)" +.LASF1402: + .string "DMA1_Channel2 ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE)" +.LASF4409: + .string "HID_GET_IDLE 0x02" +.LASF3554: + .string "FLASH_FLAG_EOP ((uint32_t)0x00000020)" +.LASF3450: + .string "DMA1_FLAG_HT5 ((uint32_t)0x00040000)" +.LASF1762: + .string "DAC_MAMP2 ((uint32_t)0x0F000000)" +.LASF4105: + .string "TIM_TRGOSource_Reset ((uint16_t)0x0000)" +.LASF2801: + .string "RCC_DMA1EN ((uint16_t)0x0001)" +.LASF4464: + .string "USB_DESCR_TYP_HUB 0x29" +.LASF1037: + .string "LIBC_FCNTL_H__ " +.LASF572: + .string "_DEFAULT_SOURCE 1" +.LASF296: + .string "__GCC_ATOMIC_POINTER_LOCK_FREE 2" +.LASF3343: + .string "BKP_DR39 ((uint16_t)0x00B0)" +.LASF1001: + .string "S_ISGID 0002000" +.LASF4655: + .string "_gamma_signgam" +.LASF3284: + .string "ADC_AnalogWatchdog_SingleInjecEnable ((uint32_t)0x00400200)" +.LASF1152: + .string "HWREG8(x) (*((volatile rt_uint8_t *)(x)))" +.LASF2384: + .string "AFIO_ECR_PORT_PD ((uint8_t)0x30)" +.LASF2151: + .string "FLASH_WRPR0_WRPR0 ((uint32_t)0x000000FF)" +.LASF3375: + .string "DMA_Priority_VeryHigh ((uint32_t)0x00003000)" +.LASF628: + .string "___int_ptrdiff_t_h " +.LASF2602: + .string "I2C_OADDR1_ADD1 ((uint16_t)0x0002)" +.LASF672: + .string "__PMT(args) args" +.LASF2660: + .string "PWR_CSR_SBF ((uint16_t)0x0002)" +.LASF2066: + .string "EXTI_FTENR_TR19 ((uint32_t)0x00080000)" +.LASF2634: + .string "I2C_STAR2_SMBHOST ((uint16_t)0x0040)" +.LASF706: + .string "__CC_SUPPORTS___INLINE 1" +.LASF595: + .string "_READ_WRITE_BUFSIZE_TYPE int" +.LASF2652: + .string "PWR_CTLR_PLS_2V4 ((uint16_t)0x0040)" +.LASF4641: + .string "__sglue" +.LASF4026: + .string "TIM_DMABase_EGR ((uint16_t)0x0005)" +.LASF1045: + .string "_FDEFER 0x0020" +.LASF2154: + .string "FLASH_WRPR1_nWRPR1 ((uint32_t)0xFF000000)" +.LASF2614: + .string "I2C_DR_DATAR ((uint8_t)0xFF)" +.LASF140: + .string "__INTPTR_WIDTH__ 32" +.LASF89: + .string "__PTRDIFF_WIDTH__ 32" +.LASF1982: + .string "DMA_MADDR3_MA ((uint32_t)0xFFFFFFFF)" +.LASF12: + .string "__ATOMIC_RELEASE 3" +.LASF71: + .string "__SCHAR_MAX__ 0x7f" +.LASF1235: + .string "INT_FAST8_MAX (__INT_FAST8_MAX__)" +.LASF3141: + .string "USART_CTLR1_TXEIE ((uint16_t)0x0080)" +.LASF2254: + .string "GPIO_CFGHR_CNF14_0 ((uint32_t)0x04000000)" +.LASF844: + .string "_REENT_CHECK_MISC(ptr) " +.LASF4591: + .string "__tm_yday" +.LASF3597: + .string "GPIO_Remap_ADC1_ETRGINJ ((uint32_t)0x00200002)" +.LASF3777: + .string "RCC_HCLK_Div16 ((uint32_t)0x00000700)" +.LASF2697: + .string "RCC_HPRE_DIV256 ((uint32_t)0x000000E0)" +.LASF3607: + .string "GPIO_PortSourceGPIOB ((uint8_t)0x01)" +.LASF2914: + .string "TIM_CEN ((uint16_t)0x0001)" +.LASF3868: + .string "__CH32V10x_RTC_H " +.LASF4281: + .string "MASK_UIS_H_RES 0x0F" +.LASF1581: + .string "ADC_SQ8 ((uint32_t)0x000003E0)" +.LASF3384: + .string "DMA1_IT_GL1 ((uint32_t)0x00000001)" +.LASF1136: + .string "__RTM_H__ " +.LASF3977: + .string "TIM_OutputState_Disable ((uint16_t)0x0000)" +.LASF1706: + .string "BKP_DATAR27_D ((uint16_t)0xFFFF)" +.LASF4178: + .string "USART_IT_IDLE ((uint16_t)0x0424)" +.LASF2627: + .string "I2C_STAR1_TIMEOUT ((uint16_t)0x4000)" +.LASF2791: + .string "RCC_USART2RST ((uint32_t)0x00020000)" +.LASF2370: + .string "AFIO_ECR_PIN_PX9 ((uint8_t)0x09)" +.LASF4751: + .string "IPRIOR" +.LASF2088: + .string "EXTI_INTF_INTF1 ((uint32_t)0x00000002)" +.LASF4165: + .string "USART_Clock_Disable ((uint16_t)0x0000)" +.LASF4709: + .string "DMA1_Channel6_IRQn" +.LASF146: + .string "__DEC_EVAL_METHOD__ 2" +.LASF3812: + .string "RCC_APB2Periph_ADC1 ((uint32_t)0x00000200)" +.LASF4645: + .string "_niobs" +.LASF1811: + .string "DMA_TEIF7 ((uint32_t)0x08000000)" +.LASF1342: + .string "DMA2_BASE (AHBPERIPH_BASE + 0x0400)" +.LASF1017: + .string "S_IWUSR 0000200" +.LASF2041: + .string "EXTI_RTENR_TR14 ((uint32_t)0x00004000)" +.LASF847: + .string "_REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)" +.LASF2940: + .string "TIM_OIS4 ((uint16_t)0x4000)" +.LASF1691: + .string "BKP_DATAR12_D ((uint16_t)0xFFFF)" +.LASF3471: + .string "DMA2_FLAG_TE3 ((uint32_t)0x10000800)" +.LASF1650: + .string "ADC_JSQ1_2 ((uint32_t)0x00000004)" +.LASF2107: + .string "FLASH_ACTLR_LATENCY ((uint8_t)0x03)" +.LASF3900: + .string "SPI_FirstBit_MSB ((uint16_t)0x0000)" +.LASF4667: + .string "_wcrtomb_state" +.LASF253: + .string "__FLT64X_DECIMAL_DIG__ 36" +.LASF4168: + .string "USART_CPOL_High ((uint16_t)0x0400)" +.LASF3123: + .string "USART_STATR_NE ((uint16_t)0x0004)" +.LASF773: + .string "__NULLABILITY_PRAGMA_PUSH " +.LASF553: + .string "_WANT_REGISTER_FINI 1" +.LASF1859: + .string "DMA_CFGR2_TCIE ((uint16_t)0x0002)" +.LASF3009: + .string "TIM_OC2PE ((uint16_t)0x0800)" +.LASF2217: + .string "GPIO_CFGHR_MODE10_0 ((uint32_t)0x00000100)" +.LASF297: + .string "__GCC_HAVE_DWARF2_CFI_ASM 1" +.LASF273: + .string "__DEC64_EPSILON__ 1E-15DD" +.LASF2231: + .string "GPIO_CFGHR_MODE15 ((uint32_t)0x30000000)" +.LASF4152: + .string "USART_StopBits_1 ((uint16_t)0x0000)" +.LASF3932: + .string "SPI_NSSInternalSoft_Reset ((uint16_t)0xFEFF)" +.LASF2840: + .string "RCC_PORRSTF ((uint32_t)0x08000000)" +.LASF519: + .string "RT_DEVICE_CTRL_GET_INT 0x12" +.LASF970: + .string "PTHREAD_SCOPE_PROCESS 0" +.LASF2691: + .string "RCC_HPRE_DIV2 ((uint32_t)0x00000080)" +.LASF2126: + .string "FLASH_CTLR_LOCK ((uint16_t)0x0080)" +.LASF2252: + .string "GPIO_CFGHR_CNF13_1 ((uint32_t)0x00800000)" +.LASF1824: + .string "DMA_CGIF4 ((uint32_t)0x00001000)" +.LASF3525: + .string "FLASH_WRProt_Pages64to67 ((uint32_t)0x00010000)" +.LASF2172: + .string "GPIO_CFGLR_MODE4 ((uint32_t)0x00030000)" +.LASF1129: + .string "rt_list_first_entry(ptr,type,member) rt_list_entry((ptr)->next, type, member)" +.LASF4102: + .string "TIM_OCFast_Disable ((uint16_t)0x0000)" +.LASF2849: + .string "RTC_CTLRL_ALRF ((uint8_t)0x02)" +.LASF1059: + .string "O_WRONLY 1" +.LASF2443: + .string "AFIO_EXTICR1_EXTI0_PC ((uint16_t)0x0002)" +.LASF953: + .string "_PID_T_DECLARED " +.LASF1563: + .string "ADC_SQ15_4 ((uint32_t)0x00004000)" +.LASF2418: + .string "AFIO_PCFR1_CAN_REMAP_0 ((uint32_t)0x00002000)" +.LASF4280: + .string "MASK_UIS_ENDP 0x0F" +.LASF3256: + .string "ADC_Channel_13 ((uint8_t)0x0D)" +.LASF3037: + .string "TIM_OC3M_0 ((uint16_t)0x0010)" +.LASF2304: + .string "GPIO_BSHR_BS13 ((uint32_t)0x00002000)" +.LASF1120: + .string "DT_DIR 0x02" +.LASF4405: + .string "HUB_SET_FEATURE 0x03" +.LASF3911: + .string "I2S_DataFormat_16b ((uint16_t)0x0000)" +.LASF1381: + .string "GPIOC ((GPIO_TypeDef *) GPIOC_BASE)" +.LASF759: + .string "__warn_references(sym,msg) __asm__(\".section .gnu.warning.\" #sym); __asm__(\".asciz \\\"\" msg \"\\\"\"); __asm__(\".previous\")" +.LASF2335: + .string "GPIO_BCR_BR12 ((uint16_t)0x1000)" +.LASF182: + .string "__DECIMAL_DIG__ 36" +.LASF100: + .string "__INT16_MAX__ 0x7fff" +.LASF3060: + .string "TIM_IC4PSC_0 ((uint16_t)0x0400)" +.LASF653: + .string "_T_WCHAR_ " +.LASF1848: + .string "DMA_CFGR1_PSIZE ((uint16_t)0x0300)" +.LASF1143: + .string "FINSH_API_H__ " +.LASF2991: + .string "TIM_CC4G ((uint8_t)0x10)" +.LASF477: + .string "RT_THREAD_STAT_SIGNAL_WAIT 0x20" +.LASF3966: + .string "TIM_CKD_DIV2 ((uint16_t)0x0100)" +.LASF2958: + .string "TIM_ECE ((uint16_t)0x4000)" +.LASF3090: + .string "TIM_DTG ((uint16_t)0x00FF)" +.LASF1109: + .string "AT_SYMLINK_FOLLOW 4" +.LASF3670: + .string "I2C_IT_BTF ((uint32_t)0x02000004)" +.LASF4203: + .string "USART_FLAG_PE ((uint16_t)0x0001)" +.LASF3486: + .string "EXTI_Line5 ((uint32_t)0x00020)" +.LASF2997: + .string "TIM_CC1S_1 ((uint16_t)0x0002)" +.LASF2561: + .string "AFIO_EXTICR4_EXTI15_PD ((uint16_t)0x3000)" +.LASF1879: + .string "DMA_CFGR3_TEIE ((uint16_t)0x0008)" +.LASF2693: + .string "RCC_HPRE_DIV8 ((uint32_t)0x000000A0)" +.LASF2895: + .string "SPI_RCRCR_RXCRC ((uint16_t)0xFFFF)" +.LASF2877: + .string "SPI_CTLR1_BIDIOE ((uint16_t)0x4000)" +.LASF3314: + .string "BKP_DR10 ((uint16_t)0x0028)" +.LASF977: + .string "_PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF)" +.LASF648: + .string "__size_t " +.LASF376: + .string "RT_DEBUG_THREAD 0" +.LASF3415: + .string "DMA2_IT_TE1 ((uint32_t)0x10000008)" +.LASF1707: + .string "BKP_DATAR28_D ((uint16_t)0xFFFF)" +.LASF2618: + .string "I2C_STAR1_ADD10 ((uint16_t)0x0008)" +.LASF577: + .string "_ATFILE_SOURCE" +.LASF3348: + .string "__CH32V10x_DBGMCU_H " +.LASF534: + .string "RTGRAPHIC_CTRL_GET_EXT 5" +.LASF1163: + .string "__MPU_PRESENT 0" +.LASF1940: + .string "DMA_CFG6_PSIZE_1 ((uint16_t)0x0200)" +.LASF2169: + .string "GPIO_CFGLR_MODE3 ((uint32_t)0x00003000)" +.LASF3209: + .string "EXTEN_LOCKUP_EN ((uint32_t)0x00000040)" +.LASF1093: + .string "F_SETOWN 6" +.LASF4771: + .string "DeviceVID" +.LASF2851: + .string "RTC_CTLRL_RSF ((uint8_t)0x08)" +.LASF3387: + .string "DMA1_IT_TE1 ((uint32_t)0x00000008)" +.LASF1475: + .string "ADC_SMP11_2 ((uint32_t)0x00000020)" +.LASF842: + .string "_REENT_CHECK_ASCTIME_BUF(ptr) " +.LASF1555: + .string "ADC_SQ14_2 ((uint32_t)0x00000080)" +.LASF3131: + .string "USART_DATAR_DR ((uint16_t)0x01FF)" +.LASF3487: + .string "EXTI_Line6 ((uint32_t)0x00040)" +.LASF3928: + .string "I2S_CPOL_High ((uint16_t)0x0008)" +.LASF3709: + .string "I2C_EVENT_SLAVE_BYTE_TRANSMITTING ((uint32_t)0x00060080)" +.LASF2959: + .string "TIM_ETP ((uint16_t)0x8000)" +.LASF1282: + .string "HSEStartUp_TimeOut HSE_STARTUP_TIMEOUT" +.LASF4135: + .string "TIM_DMABurstLength_5Bytes TIM_DMABurstLength_5Transfers" +.LASF122: + .string "__UINT16_C(c) c" +.LASF3179: + .string "USART_GPR_PSC_6 ((uint16_t)0x0040)" +.LASF3717: + .string "IWDG_Prescaler_32 ((uint8_t)0x03)" +.LASF4769: + .string "DeviceSpeed" +.LASF2492: + .string "AFIO_EXTICR2_EXTI6_PF ((uint16_t)0x0500)" +.LASF528: + .string "RT_DEVICE_CTRL_CURSOR_SET_TYPE 0x11" +.LASF1489: + .string "ADC_SMP15_0 ((uint32_t)0x00008000)" +.LASF4198: + .string "USART_FLAG_RXNE ((uint16_t)0x0020)" +.LASF4449: + .string "HUB_C_PORT_OVER_CURRENT 19" +.LASF745: + .string "__null_sentinel __attribute__((__sentinel__))" +.LASF4427: + .string "USB_REQ_RECIP_OTHER 0x03" +.LASF618: + .string "__EXP" +.LASF289: + .string "__GCC_ATOMIC_CHAR32_T_LOCK_FREE 2" +.LASF1573: + .string "ADC_L_2 ((uint32_t)0x00400000)" +.LASF679: + .string "__attribute_pure__ " +.LASF1726: + .string "BKP_TPE ((uint8_t)0x01)" +.LASF2272: + .string "GPIO_INDR_IDR13 ((uint16_t)0x2000)" +.LASF4584: + .string "__tm_sec" +.LASF4624: + .string "_stdout" +.LASF751: + .string "__printflike(fmtarg,firstvararg) __attribute__((__format__ (__printf__, fmtarg, firstvararg)))" +.LASF516: + .string "RT_DEVICE_CTRL_CLOSE 0x04" +.LASF4608: + .string "_cookie" +.LASF4334: + .string "MASK_UEP_R_RES 0x0C" +.LASF460: + .string "RT_TIMER_CTRL_GET_TIME 0x1" +.LASF1950: + .string "DMA_CFG7_HTIE ((uint16_t)0x0004)" +.LASF4688: + .string "_syscall_table_end" +.LASF1962: + .string "DMA_CFG7_PL ((uint16_t)0x3000)" +.LASF2578: + .string "I2C_CTLR1_ENGC ((uint16_t)0x0040)" +.LASF3142: + .string "USART_CTLR1_PEIE ((uint16_t)0x0100)" +.LASF1016: + .string "S_IRUSR 0000400" +.LASF3583: + .string "GPIO_Remap_USART2 ((uint32_t)0x00000008)" +.LASF2223: + .string "GPIO_CFGHR_MODE12_0 ((uint32_t)0x00010000)" +.LASF4104: + .string "TIM_OCClear_Disable ((uint16_t)0x0000)" +.LASF2947: + .string "TIM_TS_1 ((uint16_t)0x0020)" +.LASF1589: + .string "ADC_SQ9_1 ((uint32_t)0x00000800)" +.LASF2585: + .string "I2C_CTLR1_ALERT ((uint16_t)0x2000)" +.LASF3718: + .string "IWDG_Prescaler_64 ((uint8_t)0x04)" +.LASF2038: + .string "EXTI_RTENR_TR11 ((uint32_t)0x00000800)" +.LASF392: + .string "RT_FALSE 0" +.LASF4350: + .string "R8_UEP2_T_LEN (*((PUINT8V)(0x40023438)))" +.LASF3039: + .string "TIM_OC3M_2 ((uint16_t)0x0040)" +.LASF3432: + .string "DMA1_FLAG_GL1 ((uint32_t)0x00000001)" +.LASF3682: + .string "I2C_FLAG_PECERR ((uint32_t)0x10001000)" +.LASF617: + .string "___int_least64_t_defined 1" +.LASF1350: + .string "FLASH_R_BASE (AHBPERIPH_BASE + 0x2000)" +.LASF1963: + .string "DMA_CFG7_PL_0 ((uint16_t)0x1000)" +.LASF2078: + .string "EXTI_SWIEVR_SWIEVR11 ((uint32_t)0x00000800)" +.LASF1362: + .string "TIM14 ((TIM_TypeDef *) TIM14_BASE)" +.LASF4415: + .string "USB_REQ_TYP_OUT 0x00" +.LASF3134: + .string "USART_CTLR1_SBK ((uint16_t)0x0001)" +.LASF950: + .string "_DEV_T_DECLARED " +.LASF2936: + .string "TIM_OIS2 ((uint16_t)0x0400)" +.LASF3217: + .string "EXTEN_FLASH_CLK_TRIM ((uint32_t)0x00070000)" +.LASF4177: + .string "USART_IT_ORE_RX ((uint16_t)0x0325)" +.LASF1737: + .string "DAC_BOFF1 ((uint32_t)0x00000002)" +.LASF1506: + .string "ADC_SMP1_1 ((uint32_t)0x00000010)" +.LASF1610: + .string "ADC_SQ12_4 ((uint32_t)0x20000000)" +.LASF2583: + .string "I2C_CTLR1_POS ((uint16_t)0x0800)" +.LASF4005: + .string "TIM_ICPolarity_BothEdge ((uint16_t)0x000A)" +.LASF2159: + .string "GPIO_CFGLR_MODE ((uint32_t)0x33333333)" +.LASF722: + .string "__pure2 __attribute__((__const__))" +.LASF2518: + .string "AFIO_EXTICR3_EXTI9_PG ((uint16_t)0x0060)" +.LASF893: + .string "__int32_t_defined 1" +.LASF2004: + .string "EXTI_INTENR_MR17 ((uint32_t)0x00020000)" +.LASF3085: + .string "TIM_REP ((uint8_t)0xFF)" +.LASF2992: + .string "TIM_COMG ((uint8_t)0x20)" +.LASF3068: + .string "TIM_CC1P ((uint16_t)0x0002)" +.LASF4439: + .string "HUB_PORT_CONNECTION 0" +.LASF1315: + .string "GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)" +.LASF1505: + .string "ADC_SMP1_0 ((uint32_t)0x00000008)" +.LASF4316: + .string "R16_UH_RX_DMA R16_UEP2_DMA" +.LASF2149: + .string "FLASH_Data1_Data1 ((uint32_t)0x00FF0000)" +.LASF1933: + .string "DMA_CFG6_TEIE ((uint16_t)0x0008)" +.LASF4570: + .string "wint_t" +.LASF270: + .string "__DEC64_MAX_EXP__ 385" +.LASF3697: + .string "I2C_EVENT_MASTER_MODE_ADDRESS10 ((uint32_t)0x00030008)" +.LASF1896: + .string "DMA_CFG4_HTIE ((uint16_t)0x0004)" +.LASF3823: + .string "RCC_APB2Periph_TIM10 ((uint32_t)0x00100000)" +.LASF1068: + .string "FAPPEND _FAPPEND" +.LASF3327: + .string "BKP_DR23 ((uint16_t)0x0070)" +.LASF2415: + .string "AFIO_PCFR1_TIM3_REMAP_FULLREMAP ((uint32_t)0x00000C00)" +.LASF3106: + .string "TIM_AOE ((uint16_t)0x4000)" +.LASF1248: + .string "UINTMAX_MAX (__UINTMAX_MAX__)" +.LASF947: + .string "_ID_T_DECLARED " +.LASF3474: + .string "DMA2_FLAG_HT4 ((uint32_t)0x10004000)" +.LASF4523: + .string "ERR_USB_DISCON 0x16" +.LASF2464: + .string "AFIO_EXTICR1_EXTI3_PC ((uint16_t)0x2000)" +.LASF2889: + .string "SPI_STATR_CRCERR ((uint8_t)0x10)" +.LASF1343: + .string "DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408)" +.LASF386: + .string "__RT_DEF_H__ " +.LASF4299: + .string "RB_UH_EP_TBUF_MOD 0x10" +.LASF2597: + .string "I2C_CTLR2_DMAEN ((uint16_t)0x0800)" +.LASF3378: + .string "DMA_Priority_Low ((uint32_t)0x00000000)" +.LASF2160: + .string "GPIO_CFGLR_MODE0 ((uint32_t)0x00000003)" +.LASF2722: + .string "RCC_ADCPRE_DIV6 ((uint32_t)0x00008000)" +.LASF272: + .string "__DEC64_MAX__ 9.999999999999999E384DD" +.LASF4151: + .string "USART_WordLength_9b ((uint16_t)0x1000)" +.LASF1227: + .string "UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)" +.LASF975: + .string "PTHREAD_CREATE_JOINABLE 1" +.LASF863: + .string "_REENT_MBRTOWC_STATE(ptr) ((ptr)->_new._reent._mbrtowc_state)" +.LASF1456: + .string "ADC_JEXTSEL_0 ((uint32_t)0x00001000)" +.LASF1702: + .string "BKP_DATAR23_D ((uint16_t)0xFFFF)" +.LASF4639: + .string "_atexit0" +.LASF1614: + .string "ADC_SQ1_2 ((uint32_t)0x00000004)" +.LASF4556: + .string "unsigned int" +.LASF4003: + .string "TIM_ICPolarity_Rising ((uint16_t)0x0000)" +.LASF381: + .string "RT_DEBUG_CONTEXT_CHECK 1" +.LASF1545: + .string "ADC_LT ((uint16_t)0x0FFF)" +.LASF3641: + .string "I2C_Register_CTLR1 ((uint8_t)0x00)" +.LASF1202: + .string "__int_least64_t_defined 1" +.LASF4472: + .string "USB_DEV_CLASS_PRINTER 0x07" +.LASF4549: + .string "NVIC_PriorityGroup_4 ((uint32_t)0x04)" +.LASF4306: + .string "RB_UEP5_RX_EN 0x08" +.LASF3701: + .string "I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED ((uint32_t)0x00020002)" +.LASF3627: + .string "GPIO_PinSource14 ((uint8_t)0x0E)" +.LASF3854: + .string "RCC_MCO_PLLCLK_Div2 ((uint8_t)0x07)" +.LASF4246: + .string "RB_UIE_BUS_RST 0x01" +.LASF373: + .string "RT_DEBUG_MODULE 0" +.LASF4804: + .string "rt_assert_handler" +.LASF4648: + .string "_seed" +.LASF293: + .string "__GCC_ATOMIC_LONG_LOCK_FREE 2" +.LASF3967: + .string "TIM_CKD_DIV4 ((uint16_t)0x0200)" +.LASF234: + .string "__FLT32X_DIG__ 15" +.LASF4611: + .string "_seek" +.LASF4340: + .string "RB_UEP_T_RES0 0x01" +.LASF3889: + .string "SPI_CPHA_2Edge ((uint16_t)0x0001)" +.LASF2506: + .string "AFIO_EXTICR3_EXTI8_PB ((uint16_t)0x0001)" +.LASF1328: + .string "TIM15_BASE (APB2PERIPH_BASE + 0x4000)" +.LASF711: + .string "__CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1" +.LASF4173: + .string "USART_IT_PE ((uint16_t)0x0028)" + .ident "GCC: (GNU MCU Eclipse RISC-V Embedded GCC, 64-bit) 8.2.0" diff --git a/libcpu/risc-v/ch32v103/interrupt_gcc.S b/libcpu/risc-v/ch32v103/interrupt_gcc.S new file mode 100644 index 0000000000..eb9b0d06cd --- /dev/null +++ b/libcpu/risc-v/ch32v103/interrupt_gcc.S @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ + +#include "cpuport.h" + +.global SW_handler +.align 6 +SW_handler: + /* save all from thread context */ + addi sp, sp, -32 * REGBYTES + /* жmepcֵᱻӲ */ + + STORE x1, 1 * REGBYTES(sp) + li t0, 0x80 /* ൱жmie=0 */ + + STORE t0, 2 * REGBYTES(sp) + + STORE x4, 4 * REGBYTES(sp) + STORE x5, 5 * REGBYTES(sp) + STORE x6, 6 * REGBYTES(sp) + STORE x7, 7 * REGBYTES(sp) + STORE x8, 8 * REGBYTES(sp) + STORE x9, 9 * REGBYTES(sp) + STORE x10, 10 * REGBYTES(sp) + STORE x11, 11 * REGBYTES(sp) + STORE x12, 12 * REGBYTES(sp) + STORE x13, 13 * REGBYTES(sp) + STORE x14, 14 * REGBYTES(sp) + STORE x15, 15 * REGBYTES(sp) + STORE x16, 16 * REGBYTES(sp) + STORE x17, 17 * REGBYTES(sp) + STORE x18, 18 * REGBYTES(sp) + STORE x19, 19 * REGBYTES(sp) + STORE x20, 20 * REGBYTES(sp) + STORE x21, 21 * REGBYTES(sp) + STORE x22, 22 * REGBYTES(sp) + STORE x23, 23 * REGBYTES(sp) + STORE x24, 24 * REGBYTES(sp) + STORE x25, 25 * REGBYTES(sp) + STORE x26, 26 * REGBYTES(sp) + STORE x27, 27 * REGBYTES(sp) + STORE x28, 28 * REGBYTES(sp) + STORE x29, 29 * REGBYTES(sp) + STORE x30, 30 * REGBYTES(sp) + STORE x31, 31 * REGBYTES(sp) + + /* switch to interrupt stack */ + csrrw sp,mscratch,sp + /* interrupt handle */ + call rt_interrupt_enter + + + /* ӸжҪ,Ҫ,ջԲл */ + call rt_interrupt_leave + /* switch to from thread stack */ + csrrw sp,mscratch,sp + + /* need to switch new thread */ + la s0, rt_thread_switch_interrupt_flag + lw s2, 0(s0) + beqz s2, spurious_interrupt /* if rt_thread_switch_interrupt_flag ==0 Ҫл߳תspurious_interrupt˳ */ + /* clear switch interrupt flag */ + sw zero, 0(s0) /* if rt_thread_switch_interrupt_flag ==1,㣬л߳ */ + + csrr a0, mepc + STORE a0, 0 * REGBYTES(sp) /* 浱ǰ̵߳Ľжʱһpc̵ֵ߳Ķջ */ + + la s0, rt_interrupt_from_thread + LOAD s1, 0(s0) + STORE sp, 0(s1) /* 浱ǰ̵߳spram */ + + la s0, rt_interrupt_to_thread + LOAD s1, 0(s0) + LOAD sp, 0(s1) /* ȡҪл̵߳spָ */ + + LOAD a0, 0 * REGBYTES(sp) + csrw mepc, a0 + +spurious_interrupt: + LOAD x1, 1 * REGBYTES(sp) + + /* Remain in M-mode after mret */ + li t0, 0x00001800 + csrs mstatus, t0 + LOAD t0, 2 * REGBYTES(sp) + csrs mstatus, t0 + + LOAD x4, 4 * REGBYTES(sp) /* ָĴ */ + LOAD x5, 5 * REGBYTES(sp) + LOAD x6, 6 * REGBYTES(sp) + LOAD x7, 7 * REGBYTES(sp) + LOAD x8, 8 * REGBYTES(sp) + LOAD x9, 9 * REGBYTES(sp) + LOAD x10, 10 * REGBYTES(sp) + LOAD x11, 11 * REGBYTES(sp) + LOAD x12, 12 * REGBYTES(sp) + LOAD x13, 13 * REGBYTES(sp) + LOAD x14, 14 * REGBYTES(sp) + LOAD x15, 15 * REGBYTES(sp) + LOAD x16, 16 * REGBYTES(sp) + LOAD x17, 17 * REGBYTES(sp) + LOAD x18, 18 * REGBYTES(sp) + LOAD x19, 19 * REGBYTES(sp) + LOAD x20, 20 * REGBYTES(sp) + LOAD x21, 21 * REGBYTES(sp) + LOAD x22, 22 * REGBYTES(sp) + LOAD x23, 23 * REGBYTES(sp) + LOAD x24, 24 * REGBYTES(sp) + LOAD x25, 25 * REGBYTES(sp) + LOAD x26, 26 * REGBYTES(sp) + LOAD x27, 27 * REGBYTES(sp) + LOAD x28, 28 * REGBYTES(sp) + LOAD x29, 29 * REGBYTES(sp) + LOAD x30, 30 * REGBYTES(sp) + LOAD x31, 31 * REGBYTES(sp) + + addi sp, sp, 32 * REGBYTES /* ָspֵ */ + mret -- Gitee