diff --git a/bsp/ch32v103/.config b/bsp/ch32v103/.config new file mode 100644 index 0000000000000000000000000000000000000000..64f136ff830793b6c696958bc68c29b8f19196be --- /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 0000000000000000000000000000000000000000..ab8a04ff5c7c692bdb4d0daaaa08603349d8f085 --- /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 0000000000000000000000000000000000000000..1272c34c3d4c604dd628330b2c9bd79093ea7547 --- /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 0000000000000000000000000000000000000000..f8011d80fd1f6af53143bff3a25bfdb8bf7e7627 --- /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 0000000000000000000000000000000000000000..898d353ed7b8b1121001106dae9b4fcd44243ba3 --- /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 0000000000000000000000000000000000000000..4ee3a60be209d7ab316f94edfe975c5f1a4928eb --- /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 0000000000000000000000000000000000000000..78348e33abcff3a5eeeb6aef1a3fa053373e3fd5 --- /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 0000000000000000000000000000000000000000..42f9544b2a1683d46fbb55d0b6eef55985a68bbd --- /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 0000000000000000000000000000000000000000..f2efa4a561f7bd8742cdf7ded463ca3424c300a5 --- /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 0000000000000000000000000000000000000000..947d50900f9cdb3d7cac137194a1354c25f2438f --- /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 0000000000000000000000000000000000000000..534ec8eb5a34d300b893b887a896b5e39e33b613 --- /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 0000000000000000000000000000000000000000..33ab37287ff821f04c0ae0d695a4af845ccafffa --- /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 0000000000000000000000000000000000000000..ef1c39fd83245f317e1fb64035e62c169c430c62 --- /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 0000000000000000000000000000000000000000..cff240f22a52c748b4dad807121ccaea4156eff0 --- /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 0000000000000000000000000000000000000000..e9573713daf005c3466505259bf2a27a544a9bfc --- /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 0000000000000000000000000000000000000000..148c99f42c2c27dbb917e113e59cebb94c9db270 --- /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 0000000000000000000000000000000000000000..8003a94e912b11cc29bd234e5b59740d2462384b --- /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 0000000000000000000000000000000000000000..7e95c52cdf52efbd9c1988777691f87003296d45 --- /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 0000000000000000000000000000000000000000..3d5d145194539ad4b65b519a18ff6b539febedfb --- /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 0000000000000000000000000000000000000000..148f402a1404ea87536dc2b15c088075bddef74a --- /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 0000000000000000000000000000000000000000..e98381d746d15e4b14fedc310707f6c65c67cedf --- /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 0000000000000000000000000000000000000000..40b3aa4513454c1d02ba9e2b0fbf65c0682f87cb --- /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 0000000000000000000000000000000000000000..191b59e3417d654a51cc893c03a0d43273c0f398 --- /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 0000000000000000000000000000000000000000..eb92cefe9630e5a20a26a7a2d39959e889873e22 --- /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 Binary files /dev/null and b/bsp/ch32v103/figures/compile.jpg differ diff --git a/bsp/ch32v103/figures/demo.jpg b/bsp/ch32v103/figures/demo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78196bfcec69cafd2afc3f18d35402e7cf793b0b Binary files /dev/null and b/bsp/ch32v103/figures/demo.jpg differ diff --git a/bsp/ch32v103/figures/shell run.jpg b/bsp/ch32v103/figures/shell run.jpg new file mode 100644 index 0000000000000000000000000000000000000000..63f441503079c64a03c39a690f6d228defb4e751 Binary files /dev/null and b/bsp/ch32v103/figures/shell run.jpg differ diff --git a/bsp/ch32v103/libraries/Core/core_riscv.c b/bsp/ch32v103/libraries/Core/core_riscv.c new file mode 100644 index 0000000000000000000000000000000000000000..63d6d394335ade92a80eb21e4145a509b8aaa421 --- /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 0000000000000000000000000000000000000000..1b76b6e09f0cd195c36e2758265e47f9c7494f06 --- /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 0000000000000000000000000000000000000000..2a59d8e51f425fa2a980c2e4b10783809057d36e --- /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 0000000000000000000000000000000000000000..bc436cbd822893450f1c33fb5c581bd30b13cb26 --- /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 0000000000000000000000000000000000000000..c75bc99588ee5c761a9ecc2c4d4e21898060384b --- /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 0000000000000000000000000000000000000000..07d0a304ab5e76c91a0a69e3b9d2f28284be2434 --- /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 0000000000000000000000000000000000000000..0f65df7a816cfbb048f4dccd4232a801ce0a1ff4 --- /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 0000000000000000000000000000000000000000..4ff40007d323df9c701c7ae6b1c389b21db591d7 --- /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 0000000000000000000000000000000000000000..6599f129d9ae3a8904cd9aab68a2c0de8429f627 --- /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 0000000000000000000000000000000000000000..7024e68e4208521c1bcd043b14f15738577c1af2 --- /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 0000000000000000000000000000000000000000..b31768dee9225ba4e6f9292dea945cf2b156f386 --- /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 0000000000000000000000000000000000000000..4ae1a2bbc6bba7d188f3150900b38304d9c0e03d --- /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 0000000000000000000000000000000000000000..f83ad86b812f91074821a96089b98cf502526c55 --- /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 0000000000000000000000000000000000000000..79c4d2ec6297f2342e890fc6c5764ec055f286fc --- /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 0000000000000000000000000000000000000000..31dd06ab84ce26002537fcc533ccb6d7af5eb412 --- /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 0000000000000000000000000000000000000000..4523fa337ae8807d43f190c8d0c3883145620633 --- /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 0000000000000000000000000000000000000000..84a36f415dc1f85c65eabd36c799682c03c91973 --- /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 0000000000000000000000000000000000000000..e99c0ac827296d6286387eec040fba056d1a19a6 --- /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 0000000000000000000000000000000000000000..723472f6dd7f7c0a77daae5b80e4c91e876ec63a --- /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 0000000000000000000000000000000000000000..b37bdf07a0a5703552e821de50cae3e3b862e210 --- /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 0000000000000000000000000000000000000000..93512de341ba76677f6756cfa12ee903e8c695cb --- /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 0000000000000000000000000000000000000000..d621340ad5826d6bd199cd81a420f76b60e991f2 --- /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 0000000000000000000000000000000000000000..86a8fe000e391b52efe0bf8a93344aebac75acbc --- /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 0000000000000000000000000000000000000000..bbc9fd6f9b51ec15df19495bf26006f64c66ed23 --- /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 0000000000000000000000000000000000000000..f5592823de0ac5fa90e902c1bba5c92faac201e4 --- /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 0000000000000000000000000000000000000000..3bd110163091b27e12d17e426dbcdf8d42ec4378 --- /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 0000000000000000000000000000000000000000..3a5b7480c76cd941c458d491f86845f919e1b549 --- /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 0000000000000000000000000000000000000000..780eaeff758689d777679ee9b776100db1dda337 --- /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 0000000000000000000000000000000000000000..ab125bf62e3206f8d6affaf11058a1ccae15315d --- /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 0000000000000000000000000000000000000000..693101fe0933e714248ae96c8df859fcc8161b1f --- /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 0000000000000000000000000000000000000000..c5624cb51cf5a9629c9d1f9db91c4b1273c1c03d --- /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 0000000000000000000000000000000000000000..cb76368140ecfa1072cc0b97d400fe5031012249 --- /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 0000000000000000000000000000000000000000..a7d8895333f26f927085f65e817a2774355c6d6f --- /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 0000000000000000000000000000000000000000..7a0e0a0ad83632a71952da81b2738be2570919be --- /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 0000000000000000000000000000000000000000..cb9a21f986f325c25a10cb113257ea18bdabe577 --- /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 0000000000000000000000000000000000000000..e6e688ebbb4db00e5a21761fcf976f4c4da3d184 --- /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 0000000000000000000000000000000000000000..f5e801faa927a2036b520554495befc57c19c6ae --- /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 0000000000000000000000000000000000000000..0408c7c5185e2c5b22d0284a933b00d59f39ed8a --- /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 0000000000000000000000000000000000000000..96baf5ed9504bf3422adc5c403d7f3e3283d0fc6 --- /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 0000000000000000000000000000000000000000..ebdd8cf97eae542f62ac31a93284526f219d5edb --- /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 0000000000000000000000000000000000000000..1a468df030f1345573e750908f0854c5f8028c2d --- /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 0000000000000000000000000000000000000000..78ca436ebb7837e41dd00467234995fefb82b424 --- /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 0000000000000000000000000000000000000000..81d9252ef1cc46338bc4269790cfc6eae3987a74 --- /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 0000000000000000000000000000000000000000..80c4a50a09ef4b9f674b78ca7ff715ab105202e8 --- /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 0000000000000000000000000000000000000000..365d6c3e7a953b31eb2d689c04457b3022804a2f --- /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 0000000000000000000000000000000000000000..39b0ca5d04560497a8e88a8fd4e674b507953140 --- /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 0000000000000000000000000000000000000000..9776eaa546031efd1393b3a730237ede66d92484 --- /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 0000000000000000000000000000000000000000..c5d925dbdbde4a5ddad6c8b2dcaaf487486fb6a6 --- /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 0000000000000000000000000000000000000000..c11e93a9b635e02e24813afdf6759fb137bf6846 --- /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 0000000000000000000000000000000000000000..df208db0596671371bf101f64b91bfab76eb5a14 --- /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 0000000000000000000000000000000000000000..df36c9cf80ed427dea8980fa1728f74fad8eeac1 --- /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 0000000000000000000000000000000000000000..07750eaed79f5c1382439c1e5a9c2485dc1ad04e --- /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 0000000000000000000000000000000000000000..b0755df0d25414a89a324fd212b9558498d750b2 --- /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 2447aee65a29e73983f5c130b2d99181d98eca3e..adde94b4c91e04453fe8d931fcae93be65588aa1 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 0000000000000000000000000000000000000000..b0ae20ba0298e00e05eba2ddc73df9424d22ec79 --- /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 0000000000000000000000000000000000000000..641837f3f40925b4ed5d97d3f6b9354b4007964b --- /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 0000000000000000000000000000000000000000..89ad71533ae30cc8aa399e826e103a3b875b5818 --- /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 0000000000000000000000000000000000000000..b59746756e91fc6724f5aa6df889ee35c2a6daa0 --- /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 0000000000000000000000000000000000000000..915d59ea6f21151bab77eb8c09ae9a724cf8b897 --- /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 0000000000000000000000000000000000000000..eb9b0d06cd12bfb8bd24dd30b5da99c75c537efb --- /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