diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/Makefile b/demos/WB32/RT-WB32FQ95-GENERIC/Makefile new file mode 100644 index 00000000..53e62c3d --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/Makefile @@ -0,0 +1,194 @@ +############################################################################## +# Build global options +# NOTE: Can be overridden externally. +# + +# Compiler options here. +ifeq ($(USE_OPT),) + USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16 +endif + +# C specific options here (added to USE_OPT). +ifeq ($(USE_COPT),) + USE_COPT = +endif + +# C++ specific options here (added to USE_OPT). +ifeq ($(USE_CPPOPT),) + USE_CPPOPT = -fno-rtti +endif + +# Enable this if you want the linker to remove unused code and data. +ifeq ($(USE_LINK_GC),) + USE_LINK_GC = yes +endif + +# Linker extra options here. +ifeq ($(USE_LDOPT),) + USE_LDOPT = +endif + +# Enable this if you want link time optimizations (LTO). +ifeq ($(USE_LTO),) + USE_LTO = yes +endif + +# Enable this if you want to see the full log while compiling. +ifeq ($(USE_VERBOSE_COMPILE),) + USE_VERBOSE_COMPILE = yes +endif + +# If enabled, this option makes the build process faster by not compiling +# modules not used in the current configuration. +ifeq ($(USE_SMART_BUILD),) + USE_SMART_BUILD = yes +endif + +# +# Build global options +############################################################################## + +############################################################################## +# Architecture or project specific options +# + +# Stack size to be allocated to the Cortex-M process stack. This stack is +# the stack used by the main() thread. +ifeq ($(USE_PROCESS_STACKSIZE),) + USE_PROCESS_STACKSIZE = 0x400 +endif + +# Stack size to the allocated to the Cortex-M main/exceptions stack. This +# stack is used for processing interrupts and exceptions. +ifeq ($(USE_EXCEPTIONS_STACKSIZE),) + USE_EXCEPTIONS_STACKSIZE = 0x400 +endif + +# Enables the use of FPU (no, softfp, hard). +ifeq ($(USE_FPU),) + USE_FPU = no +endif + +# FPU-related options. +ifeq ($(USE_FPU_OPT),) + USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 +endif + +# +# Architecture or project specific options +############################################################################## + +############################################################################## +# Project, target, sources and paths +# + +# Define project name here +PROJECT = ch + +# Target settings. +MCU = cortex-m3 + +# Imported source files and paths. +CHIBIOS := ../../../../ChibiOS +CHIBIOS_CONTRIB = $(CHIBIOS)/../ChibiOS-Contrib +CONFDIR := ./cfg +BUILDDIR := ./build +DEPDIR := ./.dep +BOARDDIR := ./board + +# Licensing files. +include $(CHIBIOS)/os/license/license.mk +# Startup files. +include $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_wb32fq95xx.mk +# HAL-OSAL files (optional). +include $(CHIBIOS)/os/hal/hal.mk +include $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/WB32FQ95xx/platform.mk +include $(BOARDDIR)/board.mk +include $(CHIBIOS)/os/hal/osal/rt-nil/osal.mk +# RTOS files (optional). +include $(CHIBIOS)/os/rt/rt.mk +include $(CHIBIOS)/os/common/ports/ARMv7-M/compilers/GCC/mk/port.mk +# Auto-build files in ./source recursively. +include $(CHIBIOS)/tools/mk/autobuild.mk +# Other files (optional). +# include $(CHIBIOS)/test/lib/test.mk +# include $(CHIBIOS)/test/rt/rt_test.mk +# include $(CHIBIOS)/test/oslib/oslib_test.mk +# include $(CHIBIOS)/os/hal/lib/streams/streams.mk +# include $(CHIBIOS)/os/various/shell/shell.mk + +# Define linker script file here +LDSCRIPT= $(STARTUPLD_CONTRIB)/WB32FQ95xC.ld + + +# C sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CSRC = $(ALLCSRC) \ + $(TESTSRC) \ + main.c + +# C++ sources that can be compiled in ARM or THUMB mode depending on the global +# setting. +CPPSRC = $(ALLCPPSRC) + +# List ASM source files here. +ASMSRC = $(ALLASMSRC) + +# List ASM with preprocessor source files here. +ASMXSRC = $(ALLXASMSRC) + +# Inclusion directories. +INCDIR = $(CONFDIR) $(ALLINC) $(TESTINC) + +# Define C warning options here. +CWARN = -Wall -Wextra -Wundef -Wstrict-prototypes + +# Define C++ warning options here. +CPPWARN = -Wall -Wextra -Wundef + +# +# Project, target, sources and paths +############################################################################## + +############################################################################## +# Start of user section +# + +# List all user C define here, like -D_DEBUG=1 +UDEFS = + +# Define ASM defines here +UADEFS = + +# List all user directories here +UINCDIR = + +# List the user directory to look for the libraries here +ULIBDIR = + +# List all user libraries here +ULIBS = + +# +# End of user section +############################################################################## + +############################################################################## +# Common rules +# + +RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk +include $(RULESPATH)/arm-none-eabi.mk +include $(RULESPATH)/rules.mk + +# +# Common rules +############################################################################## + +############################################################################## +# Custom rules +# + +# +# Custom rules +############################################################################## diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/board/board.c b/demos/WB32/RT-WB32FQ95-GENERIC/board/board.c new file mode 100644 index 00000000..e38a7e00 --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/board/board.c @@ -0,0 +1,82 @@ +/* + Copyright (C) 2021 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + +#include "hal.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +static void wb32_gpio_init(void) { + +#if WB32_HAS_GPIOA + rccEnableAPB1(RCC_APB1ENR_GPIOAEN); +#endif + +#if WB32_HAS_GPIOB + rccEnableAPB1(RCC_APB1ENR_GPIOBEN); +#endif + +#if WB32_HAS_GPIOC + rccEnableAPB1(RCC_APB1ENR_GPIOCEN); +#endif + +#if WB32_HAS_GPIOD + rccEnableAPB1(RCC_APB1ENR_GPIODEN); +#endif +} + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ +/* + * Early initialization code. + * This initialization must be performed just after stack setup and before + * any other initialization. + */ +void __early_init(void) { + + wb32_clock_init(); + wb32_gpio_init(); +} +/** + * @brief Board-specific initialization code. + * @note You can add your board-specific code here. + */ +void boardInit(void) { + +} diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/board/board.h b/demos/WB32/RT-WB32FQ95-GENERIC/board/board.h new file mode 100644 index 00000000..5e40ee1b --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/board/board.h @@ -0,0 +1,56 @@ +#pragma once +/* + Copyright (C) 2021 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * This file has been automatically generated using ChibiStudio board + * generator plugin. Do not edit manually. + */ + +#ifndef BOARD_H +#define BOARD_H + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/* + * Setup board. + */ + +/* + * Board identifier. + */ +#define WB32FQ95xC +#if !defined(WB32FQ95xx) + #define WB32FQ95xx +#endif + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#if !defined(_FROM_ASM_) +#ifdef __cplusplus +extern "C" { +#endif + void boardInit(void); +#ifdef __cplusplus +} +#endif +#endif /* _FROM_ASM_ */ + +#endif /* BOARD_H */ diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/board/board.mk b/demos/WB32/RT-WB32FQ95-GENERIC/board/board.mk new file mode 100644 index 00000000..60673b37 --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/board/board.mk @@ -0,0 +1,9 @@ +# List of all the board related files. +BOARDSRC = $(BOARDDIR)/board.c + +# Required include directories +BOARDINC = $(BOARDDIR) + +# Shared variables +ALLCSRC += $(BOARDSRC) +ALLINC += $(BOARDINC) diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/cfg/chconf.h b/demos/WB32/RT-WB32FQ95-GENERIC/cfg/chconf.h new file mode 100644 index 00000000..3fd3c65f --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/cfg/chconf.h @@ -0,0 +1,834 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file rt/templates/chconf.h + * @brief Configuration file template. + * @details A copy of this file must be placed in each project directory, it + * contains the application specific kernel settings. + * + * @addtogroup config + * @details Kernel related settings and hooks. + * @{ + */ + +#ifndef CHCONF_H +#define CHCONF_H + +#define _CHIBIOS_RT_CONF_ +#define _CHIBIOS_RT_CONF_VER_7_0_ + +/*===========================================================================*/ +/** + * @name System settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Handling of instances. + * @note If enabled then threads assigned to various instances can + * interact each other using the same synchronization objects. + * If disabled then each OS instance is a separate world, no + * direct interactions are handled by the OS. + */ +#if !defined(CH_CFG_SMP_MODE) +#define CH_CFG_SMP_MODE FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name System timers settings + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System time counter resolution. + * @note Allowed values are 16, 32 or 64 bits. + */ +#if !defined(CH_CFG_ST_RESOLUTION) +#define CH_CFG_ST_RESOLUTION 32 +#endif + +/** + * @brief System tick frequency. + * @details Frequency of the system timer that drives the system ticks. This + * setting also defines the system tick time unit. + */ +#if !defined(CH_CFG_ST_FREQUENCY) +#define CH_CFG_ST_FREQUENCY 10000 +#endif + +/** + * @brief Time intervals data size. + * @note Allowed values are 16, 32 or 64 bits. + */ +#if !defined(CH_CFG_INTERVALS_SIZE) +#define CH_CFG_INTERVALS_SIZE 32 +#endif + +/** + * @brief Time types data size. + * @note Allowed values are 16 or 32 bits. + */ +#if !defined(CH_CFG_TIME_TYPES_SIZE) +#define CH_CFG_TIME_TYPES_SIZE 32 +#endif + +/** + * @brief Time delta constant for the tick-less mode. + * @note If this value is zero then the system uses the classic + * periodic tick. This value represents the minimum number + * of ticks that is safe to specify in a timeout directive. + * The value one is not valid, timeouts are rounded up to + * this value. + */ +#if !defined(CH_CFG_ST_TIMEDELTA) +#define CH_CFG_ST_TIMEDELTA 0 +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel parameters and options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Round robin interval. + * @details This constant is the number of system ticks allowed for the + * threads before preemption occurs. Setting this value to zero + * disables the preemption for threads with equal priority and the + * round robin becomes cooperative. Note that higher priority + * threads can still preempt, the kernel is always preemptive. + * @note Disabling the round robin preemption makes the kernel more compact + * and generally faster. + * @note The round robin preemption is not supported in tickless mode and + * must be set to zero in that case. + */ +#if !defined(CH_CFG_TIME_QUANTUM) +#define CH_CFG_TIME_QUANTUM 0 +#endif + +/** + * @brief Idle thread automatic spawn suppression. + * @details When this option is activated the function @p chSysInit() + * does not spawn the idle thread. The application @p main() + * function becomes the idle thread and must implement an + * infinite loop. + */ +#if !defined(CH_CFG_NO_IDLE_THREAD) +#define CH_CFG_NO_IDLE_THREAD FALSE +#endif + +/** + * @brief Kernel hardening level. + * @details This option is the level of functional-safety checks enabled + * in the kerkel. The meaning is: + * - 0: No checks, maximum performance. + * - 1: Reasonable checks. + * - 2: All checks. + * . + */ +#if !defined(CH_CFG_HARDENING_LEVEL) +#define CH_CFG_HARDENING_LEVEL 0 +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Performance options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief OS optimization. + * @details If enabled then time efficient rather than space efficient code + * is used when two possible implementations exist. + * + * @note This is not related to the compiler optimization options. + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_OPTIMIZE_SPEED) +#define CH_CFG_OPTIMIZE_SPEED TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Subsystem options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Time Measurement APIs. + * @details If enabled then the time measurement APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_TM) +#define CH_CFG_USE_TM TRUE +#endif + +/** + * @brief Time Stamps APIs. + * @details If enabled then the time time stamps APIs are included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_TIMESTAMP) +#define CH_CFG_USE_TIMESTAMP TRUE +#endif + +/** + * @brief Threads registry APIs. + * @details If enabled then the registry APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_REGISTRY) +#define CH_CFG_USE_REGISTRY TRUE +#endif + +/** + * @brief Threads synchronization APIs. + * @details If enabled then the @p chThdWait() function is included in + * the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_WAITEXIT) +#define CH_CFG_USE_WAITEXIT TRUE +#endif + +/** + * @brief Semaphores APIs. + * @details If enabled then the Semaphores APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_SEMAPHORES) +#define CH_CFG_USE_SEMAPHORES TRUE +#endif + +/** + * @brief Semaphores queuing mode. + * @details If enabled then the threads are enqueued on semaphores by + * priority rather than in FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY) +#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE +#endif + +/** + * @brief Mutexes APIs. + * @details If enabled then the mutexes APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MUTEXES) +#define CH_CFG_USE_MUTEXES TRUE +#endif + +/** + * @brief Enables recursive behavior on mutexes. + * @note Recursive mutexes are heavier and have an increased + * memory footprint. + * + * @note The default is @p FALSE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE) +#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE +#endif + +/** + * @brief Conditional Variables APIs. + * @details If enabled then the conditional variables APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MUTEXES. + */ +#if !defined(CH_CFG_USE_CONDVARS) +#define CH_CFG_USE_CONDVARS TRUE +#endif + +/** + * @brief Conditional Variables APIs with timeout. + * @details If enabled then the conditional variables APIs with timeout + * specification are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_CONDVARS. + */ +#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT) +#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE +#endif + +/** + * @brief Events Flags APIs. + * @details If enabled then the event flags APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_EVENTS) +#define CH_CFG_USE_EVENTS TRUE +#endif + +/** + * @brief Events Flags APIs with timeout. + * @details If enabled then the events APIs with timeout specification + * are included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_EVENTS. + */ +#if !defined(CH_CFG_USE_EVENTS_TIMEOUT) +#define CH_CFG_USE_EVENTS_TIMEOUT TRUE +#endif + +/** + * @brief Synchronous Messages APIs. + * @details If enabled then the synchronous messages APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MESSAGES) +#define CH_CFG_USE_MESSAGES TRUE +#endif + +/** + * @brief Synchronous Messages queuing mode. + * @details If enabled then messages are served by priority rather than in + * FIFO order. + * + * @note The default is @p FALSE. Enable this if you have special + * requirements. + * @note Requires @p CH_CFG_USE_MESSAGES. + */ +#if !defined(CH_CFG_USE_MESSAGES_PRIORITY) +#define CH_CFG_USE_MESSAGES_PRIORITY FALSE +#endif + +/** + * @brief Dynamic Threads APIs. + * @details If enabled then the dynamic threads creation APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_WAITEXIT. + * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. + */ +#if !defined(CH_CFG_USE_DYNAMIC) +#define CH_CFG_USE_DYNAMIC TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name OSLIB options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Mailboxes APIs. + * @details If enabled then the asynchronous messages (mailboxes) APIs are + * included in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_SEMAPHORES. + */ +#if !defined(CH_CFG_USE_MAILBOXES) +#define CH_CFG_USE_MAILBOXES TRUE +#endif + +/** + * @brief Memory checks APIs. + * @details If enabled then the memory checks APIs are included in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCHECKS) +#define CH_CFG_USE_MEMCHECKS TRUE +#endif + +/** + * @brief Core Memory Manager APIs. + * @details If enabled then the core memory manager APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMCORE) +#define CH_CFG_USE_MEMCORE TRUE +#endif + +/** + * @brief Managed RAM size. + * @details Size of the RAM area to be managed by the OS. If set to zero + * then the whole available RAM is used. The core memory is made + * available to the heap allocator and/or can be used directly through + * the simplified core memory allocator. + * + * @note In order to let the OS manage the whole RAM the linker script must + * provide the @p __heap_base__ and @p __heap_end__ symbols. + * @note Requires @p CH_CFG_USE_MEMCORE. + */ +#if !defined(CH_CFG_MEMCORE_SIZE) +#define CH_CFG_MEMCORE_SIZE 0 +#endif + +/** + * @brief Heap Allocator APIs. + * @details If enabled then the memory heap allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or + * @p CH_CFG_USE_SEMAPHORES. + * @note Mutexes are recommended. + */ +#if !defined(CH_CFG_USE_HEAP) +#define CH_CFG_USE_HEAP TRUE +#endif + +/** + * @brief Memory Pools Allocator APIs. + * @details If enabled then the memory pools allocator APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_MEMPOOLS) +#define CH_CFG_USE_MEMPOOLS TRUE +#endif + +/** + * @brief Objects FIFOs APIs. + * @details If enabled then the objects FIFOs APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_FIFOS) +#define CH_CFG_USE_OBJ_FIFOS TRUE +#endif + +/** + * @brief Pipes APIs. + * @details If enabled then the pipes APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_PIPES) +#define CH_CFG_USE_PIPES TRUE +#endif + +/** + * @brief Objects Caches APIs. + * @details If enabled then the objects caches APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_OBJ_CACHES) +#define CH_CFG_USE_OBJ_CACHES TRUE +#endif + +/** + * @brief Delegate threads APIs. + * @details If enabled then the delegate threads APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_DELEGATES) +#define CH_CFG_USE_DELEGATES TRUE +#endif + +/** + * @brief Jobs Queues APIs. + * @details If enabled then the jobs queues APIs are included + * in the kernel. + * + * @note The default is @p TRUE. + */ +#if !defined(CH_CFG_USE_JOBS) +#define CH_CFG_USE_JOBS TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Objects factory options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Objects Factory APIs. + * @details If enabled then the objects factory APIs are included in the + * kernel. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_CFG_USE_FACTORY) +#define CH_CFG_USE_FACTORY TRUE +#endif + +/** + * @brief Maximum length for object names. + * @details If the specified length is zero then the name is stored by + * pointer but this could have unintended side effects. + */ +#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH) +#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8 +#endif + +/** + * @brief Enables the registry of generic objects. + */ +#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) +#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE +#endif + +/** + * @brief Enables factory for generic buffers. + */ +#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) +#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE +#endif + +/** + * @brief Enables factory for semaphores. + */ +#if !defined(CH_CFG_FACTORY_SEMAPHORES) +#define CH_CFG_FACTORY_SEMAPHORES TRUE +#endif + +/** + * @brief Enables factory for mailboxes. + */ +#if !defined(CH_CFG_FACTORY_MAILBOXES) +#define CH_CFG_FACTORY_MAILBOXES TRUE +#endif + +/** + * @brief Enables factory for objects FIFOs. + */ +#if !defined(CH_CFG_FACTORY_OBJ_FIFOS) +#define CH_CFG_FACTORY_OBJ_FIFOS TRUE +#endif + +/** + * @brief Enables factory for Pipes. + */ +#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__) +#define CH_CFG_FACTORY_PIPES TRUE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Debug options + * @{ + */ +/*===========================================================================*/ + +/** + * @brief Debug option, kernel statistics. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_STATISTICS) +#define CH_DBG_STATISTICS FALSE +#endif + +/** + * @brief Debug option, system state check. + * @details If enabled the correct call protocol for system APIs is checked + * at runtime. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_SYSTEM_STATE_CHECK) +#define CH_DBG_SYSTEM_STATE_CHECK TRUE +#endif + +/** + * @brief Debug option, parameters checks. + * @details If enabled then the checks on the API functions input + * parameters are activated. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_CHECKS) +#define CH_DBG_ENABLE_CHECKS TRUE +#endif + +/** + * @brief Debug option, consistency checks. + * @details If enabled then all the assertions in the kernel code are + * activated. This includes consistency checks inside the kernel, + * runtime anomalies and port-defined checks. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_ENABLE_ASSERTS) +#define CH_DBG_ENABLE_ASSERTS TRUE +#endif + +/** + * @brief Debug option, trace buffer. + * @details If enabled then the trace buffer is activated. + * + * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. + */ +#if !defined(CH_DBG_TRACE_MASK) +#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_ALL +#endif + +/** + * @brief Trace buffer entries. + * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is + * different from @p CH_DBG_TRACE_MASK_DISABLED. + */ +#if !defined(CH_DBG_TRACE_BUFFER_SIZE) +#define CH_DBG_TRACE_BUFFER_SIZE 128 +#endif + +/** + * @brief Debug option, stack checks. + * @details If enabled then a runtime stack check is performed. + * + * @note The default is @p FALSE. + * @note The stack check is performed in a architecture/port dependent way. + * It may not be implemented or some ports. + * @note The default failure mode is to halt the system with the global + * @p panic_msg variable set to @p NULL. + */ +#if !defined(CH_DBG_ENABLE_STACK_CHECK) +#define CH_DBG_ENABLE_STACK_CHECK TRUE +#endif + +/** + * @brief Debug option, stacks initialization. + * @details If enabled then the threads working area is filled with a byte + * value when a thread is created. This can be useful for the + * runtime measurement of the used stack. + * + * @note The default is @p FALSE. + */ +#if !defined(CH_DBG_FILL_THREADS) +#define CH_DBG_FILL_THREADS TRUE +#endif + +/** + * @brief Debug option, threads profiling. + * @details If enabled then a field is added to the @p thread_t structure that + * counts the system ticks occurred while executing the thread. + * + * @note The default is @p FALSE. + * @note This debug option is not currently compatible with the + * tickless mode. + */ +#if !defined(CH_DBG_THREADS_PROFILING) +#define CH_DBG_THREADS_PROFILING FALSE +#endif + +/** @} */ + +/*===========================================================================*/ +/** + * @name Kernel hooks + * @{ + */ +/*===========================================================================*/ + +/** + * @brief System structure extension. + * @details User fields added to the end of the @p ch_system_t structure. + */ +#define CH_CFG_SYSTEM_EXTRA_FIELDS \ + /* Add system custom fields here.*/ + +/** + * @brief System initialization hook. + * @details User initialization code added to the @p chSysInit() function + * just before interrupts are enabled globally. + */ +#define CH_CFG_SYSTEM_INIT_HOOK() { \ + /* Add system initialization code here.*/ \ +} + +/** + * @brief OS instance structure extension. + * @details User fields added to the end of the @p os_instance_t structure. + */ +#define CH_CFG_OS_INSTANCE_EXTRA_FIELDS \ + /* Add OS instance custom fields here.*/ + +/** + * @brief OS instance initialization hook. + * + * @param[in] oip pointer to the @p os_instance_t structure + */ +#define CH_CFG_OS_INSTANCE_INIT_HOOK(oip) { \ + /* Add OS instance initialization code here.*/ \ +} + +/** + * @brief Threads descriptor structure extension. + * @details User fields added to the end of the @p thread_t structure. + */ +#define CH_CFG_THREAD_EXTRA_FIELDS \ + /* Add threads custom fields here.*/ + +/** + * @brief Threads initialization hook. + * @details User initialization code added to the @p _thread_init() function. + * + * @note It is invoked from within @p _thread_init() and implicitly from all + * the threads creation APIs. + */ +#define CH_CFG_THREAD_INIT_HOOK(tp) { \ + /* Add threads initialization code here.*/ \ +} + +/** + * @brief Threads finalization hook. + * @details User finalization code added to the @p chThdExit() API. + */ +#define CH_CFG_THREAD_EXIT_HOOK(tp) { \ + /* Add threads finalization code here.*/ \ +} + +/** + * @brief Context switch hook. + * @details This hook is invoked just before switching between threads. + */ +#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \ + /* Context switch code here.*/ \ +} + +/** + * @brief ISR enter hook. + */ +#define CH_CFG_IRQ_PROLOGUE_HOOK() { \ + /* IRQ prologue code here.*/ \ +} + +/** + * @brief ISR exit hook. + */ +#define CH_CFG_IRQ_EPILOGUE_HOOK() { \ + /* IRQ epilogue code here.*/ \ +} + +/** + * @brief Idle thread enter hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to activate a power saving mode. + */ +#define CH_CFG_IDLE_ENTER_HOOK() { \ + /* Idle-enter code here.*/ \ +} + +/** + * @brief Idle thread leave hook. + * @note This hook is invoked within a critical zone, no OS functions + * should be invoked from here. + * @note This macro can be used to deactivate a power saving mode. + */ +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + /* Idle-leave code here.*/ \ +} + +/** + * @brief Idle Loop hook. + * @details This hook is continuously invoked by the idle thread loop. + */ +#define CH_CFG_IDLE_LOOP_HOOK() { \ + /* Idle loop code here.*/ \ +} + +/** + * @brief System tick event hook. + * @details This hook is invoked in the system tick handler immediately + * after processing the virtual timers queue. + */ +#define CH_CFG_SYSTEM_TICK_HOOK() { \ + /* System tick event code here.*/ \ +} + +/** + * @brief System halt hook. + * @details This hook is invoked in case to a system halting error before + * the system is halted. + */ +#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ + /* System halt code here.*/ \ +} + +/** + * @brief Trace hook. + * @details This hook is invoked each time a new record is written in the + * trace buffer. + */ +#define CH_CFG_TRACE_HOOK(tep) { \ + /* Trace code here.*/ \ +} + +/** + * @brief Runtime Faults Collection Unit hook. + * @details This hook is invoked each time new faults are collected and stored. + */ +#define CH_CFG_RUNTIME_FAULTS_HOOK(mask) { \ + /* Faults handling code here.*/ \ +} + +/** @} */ + +/*===========================================================================*/ +/* Port-specific settings (override port settings defaulted in chcore.h). */ +/*===========================================================================*/ + +#endif /* CHCONF_H */ + +/** @} */ diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/cfg/halconf.h b/demos/WB32/RT-WB32FQ95-GENERIC/cfg/halconf.h new file mode 100644 index 00000000..d340d982 --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/cfg/halconf.h @@ -0,0 +1,531 @@ +/* + ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file templates/halconf.h + * @brief HAL configuration header. + * @details HAL configuration file, this file allows to enable or disable the + * various device drivers from your application. You may also use + * this file in order to override the device drivers default settings. + * + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef HALCONF_H +#define HALCONF_H + +#define _CHIBIOS_HAL_CONF_ +#define _CHIBIOS_HAL_CONF_VER_8_0_ + +#include "mcuconf.h" + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__) +#define HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__) +#define HAL_USE_ADC FALSE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__) +#define HAL_USE_CAN FALSE +#endif + +/** + * @brief Enables the cryptographic subsystem. + */ +#if !defined(HAL_USE_CRY) || defined(__DOXYGEN__) +#define HAL_USE_CRY FALSE +#endif + +/** + * @brief Enables the DAC subsystem. + */ +#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__) +#define HAL_USE_DAC FALSE +#endif + +/** + * @brief Enables the EFlash subsystem. + */ +#if !defined(HAL_USE_EFL) || defined(__DOXYGEN__) +#define HAL_USE_EFL FALSE +#endif + +/** + * @brief Enables the GPT subsystem. + */ +#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__) +#define HAL_USE_GPT FALSE +#endif + +/** + * @brief Enables the I2C subsystem. + */ +#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__) +#define HAL_USE_I2C FALSE +#endif + +/** + * @brief Enables the I2S subsystem. + */ +#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__) +#define HAL_USE_I2S FALSE +#endif + +/** + * @brief Enables the ICU subsystem. + */ +#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__) +#define HAL_USE_ICU FALSE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__) +#define HAL_USE_MAC FALSE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define HAL_USE_MMC_SPI FALSE +#endif + +/** + * @brief Enables the PWM subsystem. + */ +#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__) +#define HAL_USE_PWM FALSE +#endif + +/** + * @brief Enables the RTC subsystem. + */ +#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__) +#define HAL_USE_RTC FALSE +#endif + +/** + * @brief Enables the SDC subsystem. + */ +#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__) +#define HAL_USE_SDC FALSE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL FALSE +#endif + +/** + * @brief Enables the SERIAL over USB subsystem. + */ +#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__) +#define HAL_USE_SERIAL_USB FALSE +#endif + +/** + * @brief Enables the SIO subsystem. + */ +#if !defined(HAL_USE_SIO) || defined(__DOXYGEN__) +#define HAL_USE_SIO FALSE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__) +#define HAL_USE_SPI FALSE +#endif + +/** + * @brief Enables the TRNG subsystem. + */ +#if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__) +#define HAL_USE_TRNG FALSE +#endif + +/** + * @brief Enables the UART subsystem. + */ +#if !defined(HAL_USE_UART) || defined(__DOXYGEN__) +#define HAL_USE_UART FALSE +#endif + +/** + * @brief Enables the USB subsystem. + */ +#if !defined(HAL_USE_USB) || defined(__DOXYGEN__) +#define HAL_USE_USB FALSE +#endif + +/** + * @brief Enables the WDG subsystem. + */ +#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__) +#define HAL_USE_WDG FALSE +#endif + +/** + * @brief Enables the WSPI subsystem. + */ +#if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__) +#define HAL_USE_WSPI FALSE +#endif + +/*===========================================================================*/ +/* PAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__) +#define PAL_USE_CALLBACKS TRUE +#endif + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__) +#define PAL_USE_WAIT TRUE +#endif + +/*===========================================================================*/ +/* ADC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__) +#define ADC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define ADC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* CAN driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Sleep mode related APIs inclusion switch. + */ +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) +#define CAN_USE_SLEEP_MODE TRUE +#endif + +/** + * @brief Enforces the driver to use direct callbacks rather than OSAL events. + */ +#if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__) +#define CAN_ENFORCE_USE_CALLBACKS FALSE +#endif + +/*===========================================================================*/ +/* CRY driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the SW fall-back of the cryptographic driver. + * @details When enabled, this option, activates a fall-back software + * implementation for algorithms not supported by the underlying + * hardware. + * @note Fall-back implementations may not be present for all algorithms. + */ +#if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__) +#define HAL_CRY_USE_FALLBACK FALSE +#endif + +/** + * @brief Makes the driver forcibly use the fall-back implementations. + */ +#if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__) +#define HAL_CRY_ENFORCE_FALLBACK FALSE +#endif + +/*===========================================================================*/ +/* DAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__) +#define DAC_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define DAC_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* I2C driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the I2C bus. + */ +#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define I2C_USE_MUTUAL_EXCLUSION TRUE +#endif + +/*===========================================================================*/ +/* MAC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the zero-copy API. + */ +#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__) +#define MAC_USE_ZERO_COPY FALSE +#endif + +/** + * @brief Enables an event sources for incoming packets. + */ +#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__) +#define MAC_USE_EVENTS TRUE +#endif + +/*===========================================================================*/ +/* MMC_SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + * This option is recommended also if the SPI driver does not + * use a DMA channel and heavily loads the CPU. + */ +#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__) +#define MMC_NICE_WAITING TRUE +#endif + +/*===========================================================================*/ +/* SDC driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Number of initialization attempts before rejecting the card. + * @note Attempts are performed at 10mS intervals. + */ +#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__) +#define SDC_INIT_RETRY 100 +#endif + +/** + * @brief Include support for MMC cards. + * @note MMC support is not yet implemented so this option must be kept + * at @p FALSE. + */ +#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__) +#define SDC_MMC_SUPPORT FALSE +#endif + +/** + * @brief Delays insertions. + * @details If enabled this options inserts delays into the MMC waiting + * routines releasing some extra CPU time for the threads with + * lower priority, this may slow down the driver a bit however. + */ +#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__) +#define SDC_NICE_WAITING TRUE +#endif + +/** + * @brief OCR initialization constant for V20 cards. + */ +#if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__) +#define SDC_INIT_OCR_V20 0x50FF8000U +#endif + +/** + * @brief OCR initialization constant for non-V20 cards. + */ +#if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__) +#define SDC_INIT_OCR 0x80100000U +#endif + +/*===========================================================================*/ +/* SERIAL driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Default bit rate. + * @details Configuration parameter, this is the baud rate selected for the + * default configuration. + */ +#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__) +#define SERIAL_DEFAULT_BITRATE 38400 +#endif + +/** + * @brief Serial buffers size. + * @details Configuration parameter, you can change the depth of the queue + * buffers depending on the requirements of your application. + * @note The default is 16 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 16 +#endif + +/*===========================================================================*/ +/* SERIAL_USB driver related setting. */ +/*===========================================================================*/ + +/** + * @brief Serial over USB buffers size. + * @details Configuration parameter, the buffer size must be a multiple of + * the USB data endpoint maximum packet size. + * @note The default is 256 bytes for both the transmission and receive + * buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_SIZE 256 +#endif + +/** + * @brief Serial over USB number of buffers. + * @note The default is 2 buffers. + */ +#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__) +#define SERIAL_USB_BUFFERS_NUMBER 2 +#endif + +/*===========================================================================*/ +/* SPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__) +#define SPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables circular transfers APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__) +#define SPI_USE_CIRCULAR FALSE +#endif + +/** + * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define SPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +/** + * @brief Handling method for SPI CS line. + * @note Disabling this option saves both code and data space. + */ +#if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__) +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD +#endif + +/*===========================================================================*/ +/* UART driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__) +#define UART_USE_WAIT FALSE +#endif + +/** + * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define UART_USE_MUTUAL_EXCLUSION FALSE +#endif + +/*===========================================================================*/ +/* USB driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__) +#define USB_USE_WAIT FALSE +#endif + +/*===========================================================================*/ +/* WSPI driver related settings. */ +/*===========================================================================*/ + +/** + * @brief Enables synchronous APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__) +#define WSPI_USE_WAIT TRUE +#endif + +/** + * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs. + * @note Disabling this option saves both code and data space. + */ +#if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define WSPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +#endif /* HALCONF_H */ + +/** @} */ diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/cfg/mcuconf.h b/demos/WB32/RT-WB32FQ95-GENERIC/cfg/mcuconf.h new file mode 100644 index 00000000..089d501f --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/cfg/mcuconf.h @@ -0,0 +1,168 @@ +/* + Copyright (C) 2021 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef MCUCONF_H +#define MCUCONF_H + +#define WB32FQ95xx_MCUCONF TRUE + +/* + * WB32FQ95 drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the whole + * driver is enabled in halconf.h. + * + * IRQ priorities: + * 15...0 Lowest...Highest. + * + */ + +/** + * @name Internal clock sources + * @{ + */ +#define WB32_HSECLK 12000000 +#define WB32_LSECLK 32768 + +/* + * HAL driver system settings. + */ +#define WB32_NO_INIT FALSE +#define WB32_MHSI_ENABLED TRUE +#define WB32_FHSI_ENABLED FALSE +#define WB32_LSI_ENABLED FALSE +#define WB32_HSE_ENABLED TRUE +#define WB32_LSE_ENABLED FALSE +#define WB32_PLL_ENABLED TRUE +#define WB32_MAINCLKSRC WB32_MAINCLKSRC_PLL +#define WB32_PLLSRC WB32_PLLSRC_HSE +#define WB32_PLLDIV_VALUE 2 +#define WB32_PLLMUL_VALUE 12 // The allowed range is 12,16,20,24. +#define WB32_HPRE 1 +#define WB32_PPRE1 1 +#define WB32_PPRE2 1 +#define WB32_USBPRE WB32_USBPRE_DIV1P5 + +/* + * EXTI driver system settings. + */ +#define WB32_IRQ_EXTI0_PRIORITY 6 +#define WB32_IRQ_EXTI1_PRIORITY 6 +#define WB32_IRQ_EXTI2_PRIORITY 6 +#define WB32_IRQ_EXTI3_PRIORITY 6 +#define WB32_IRQ_EXTI4_PRIORITY 6 +#define WB32_IRQ_EXTI5_9_PRIORITY 6 +#define WB32_IRQ_EXTI10_15_PRIORITY 6 +#define WB32_IRQ_EXTI16_PRIORITY 6 +#define WB32_IRQ_EXTI17_PRIORITY 6 +#define WB32_IRQ_EXTI18_PRIORITY 6 +#define WB32_IRQ_EXTI19_PRIORITY 6 + +/* + * GPT driver system settings. + */ +#define WB32_TIM_MAX_CHANNELS 4 +#define WB32_GPT_USE_TIM1 FALSE +#define WB32_GPT_USE_TIM2 FALSE +#define WB32_GPT_USE_TIM3 FALSE +#define WB32_GPT_USE_TIM4 FALSE +#define WB32_GPT_TIM1_IRQ_PRIORITY 7 +#define WB32_GPT_TIM2_IRQ_PRIORITY 7 +#define WB32_GPT_TIM3_IRQ_PRIORITY 7 +#define WB32_GPT_TIM4_IRQ_PRIORITY 7 + +/* + * ICU driver system settings. + */ +#define WB32_ICU_USE_TIM1 FALSE +#define WB32_ICU_USE_TIM2 FALSE +#define WB32_ICU_USE_TIM3 FALSE +#define WB32_ICU_USE_TIM4 FALSE +#define WB32_ICU_TIM1_IRQ_PRIORITY 7 +#define WB32_ICU_TIM2_IRQ_PRIORITY 7 +#define WB32_ICU_TIM3_IRQ_PRIORITY 7 +#define WB32_ICU_TIM4_IRQ_PRIORITY 7 + +/* + * PWM driver system settings. + */ +#define WB32_PWM_USE_ADVANCED FALSE +#define WB32_PWM_USE_TIM1 FALSE +#define WB32_PWM_USE_TIM2 FALSE +#define WB32_PWM_USE_TIM3 FALSE +#define WB32_PWM_USE_TIM4 FALSE +#define WB32_PWM_TIM1_IRQ_PRIORITY 7 +#define WB32_PWM_TIM2_IRQ_PRIORITY 7 +#define WB32_PWM_TIM3_IRQ_PRIORITY 7 +#define WB32_PWM_TIM4_IRQ_PRIORITY 7 + +/* + * I2C driver system settings. + */ +#define WB32_I2C_USE_I2C1 FALSE +#define WB32_I2C_USE_I2C2 FALSE +#define WB32_I2C_BUSY_TIMEOUT 50 +#define WB32_I2C_I2C1_IRQ_PRIORITY 5 +#define WB32_I2C_I2C2_IRQ_PRIORITY 5 + +/* + * SERIAL driver system settings. + */ +#define WB32_SERIAL_USE_UART1 FALSE +#define WB32_SERIAL_USE_UART2 FALSE +#define WB32_SERIAL_USE_UART3 FALSE +#define WB32_SERIAL_USART1_PRIORITY 12 +#define WB32_SERIAL_USART2_PRIORITY 12 +#define WB32_SERIAL_USART3_PRIORITY 12 + +/* + * SPI driver system settings. + */ +#define WB32_SPI_USE_QSPI FALSE +#define WB32_SPI_USE_SPIM2 FALSE +#define WB32_SPI_USE_SPIS1 FALSE +#define WB32_SPI_USE_SPIS2 FALSE +#define WB32_SPI_QSPI_IRQ_PRIORITY 10 +#define WB32_SPI_SPIM2_IRQ_PRIORITY 10 +#define WB32_SPI_SPIS1_IRQ_PRIORITY 10 +#define WB32_SPI_SPIS2_IRQ_PRIORITY 10 + +/* + * ST driver system settings. + */ +#define WB32_ST_IRQ_PRIORITY 8 +#define WB32_ST_USE_TIMER 2 + +/* + * UART driver system settings. + */ +#define WB32_UART_USE_UART1 FALSE +#define WB32_UART_USE_UART2 FALSE +#define WB32_UART_USE_UART3 FALSE +#define WB32_UART_UART1_IRQ_PRIORITY 12 +#define WB32_UART_UART2_IRQ_PRIORITY 12 +#define WB32_UART_UART3_IRQ_PRIORITY 12 + +/* + * USB driver system settings. + */ +#define WB32_USB_USE_USB1 TRUE +#define WB32_USB_USB1_IRQ_PRIORITY 13 +#define WB32_USB_HOST_WAKEUP_DURATION 10 + + +#endif /* MCUCONF_H */ diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/keil/ch.uvoptx b/demos/WB32/RT-WB32FQ95-GENERIC/keil/ch.uvoptx new file mode 100644 index 00000000..654ac156 --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/keil/ch.uvoptx @@ -0,0 +1,2410 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp; *.cc; *.cxx + 0 + + + + 0 + 0 + + + + Demo + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\lst\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 7 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + JL2CM3 + -U59408565 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0WB32F10x_256 -FS08000000 -FL040000 + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000) + + + + + 0 + 0 + 47 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\main.c + + +
+
+ + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + license + 0 + 0 + 0 + 0 + + 1 + 1 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\license\chcustomer.h + chcustomer.h + 0 + 0 + + + 1 + 2 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\license\chlicense.h + chlicense.h + 0 + 0 + + + 1 + 3 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\license\chversion.h + chversion.h + 0 + 0 + + + + + startup + 0 + 0 + 0 + 0 + + 2 + 4 + 2 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\common\startup\ARMCMx\compilers\RVCT\cstartup.s + cstartup.s + 0 + 0 + + + 2 + 5 + 2 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\common\startup\ARMCMx\compilers\RVCT\vectors.s + vectors.s + 0 + 0 + + + 2 + 6 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS-Contrib\os\common\startup\ARMCMx\devices\WB32FQ95xx\cmparams.h + cmparams.h + 0 + 0 + + + + + cmsis + 0 + 0 + 0 + 0 + + 3 + 7 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\common\ext\ARM\CMSIS\Core\Include\core_cm3.h + core_cm3.h + 0 + 0 + + + 3 + 8 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS-Contrib\os\common\ext\CMSIS\WB32\WB32FQ95xx\wb32fq95xx.h + wb32fq95xx.h + 0 + 0 + + + + + kernel port + 0 + 0 + 0 + 0 + + 4 + 9 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M\chcore.c + chcore.c + 0 + 0 + + + 4 + 10 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M\chcore.h + chcore.h + 0 + 0 + + + 4 + 11 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M\mpu.h + mpu.h + 0 + 0 + + + 4 + 12 + 2 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M\compilers\RVCT\chcoreasm.s + chcoreasm.s + 0 + 0 + + + + + kernel + 0 + 0 + 0 + 0 + + 5 + 13 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chalign.h + chalign.h + 0 + 0 + + + 5 + 14 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\ch.h + ch.h + 0 + 0 + + + 5 + 15 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chcond.h + chcond.h + 0 + 0 + + + 5 + 16 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chdebug.h + chdebug.h + 0 + 0 + + + 5 + 17 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chdynamic.h + chdynamic.h + 0 + 0 + + + 5 + 18 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chevents.h + chevents.h + 0 + 0 + + + 5 + 19 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chmsg.h + chmsg.h + 0 + 0 + + + 5 + 20 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chmtx.h + chmtx.h + 0 + 0 + + + 5 + 21 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chregistry.h + chregistry.h + 0 + 0 + + + 5 + 22 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chschd.h + chschd.h + 0 + 0 + + + 5 + 23 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chsem.h + chsem.h + 0 + 0 + + + 5 + 24 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chstats.h + chstats.h + 0 + 0 + + + 5 + 25 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chsys.h + chsys.h + 0 + 0 + + + 5 + 26 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chthreads.h + chthreads.h + 0 + 0 + + + 5 + 27 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chtm.h + chtm.h + 0 + 0 + + + 5 + 28 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chvt.h + chvt.h + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chcond.c + chcond.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chdebug.c + chdebug.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chdynamic.c + chdynamic.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chevents.c + chevents.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chmsg.c + chmsg.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chmtx.c + chmtx.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chregistry.c + chregistry.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chschd.c + chschd.c + 0 + 0 + + + 5 + 37 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chsem.c + chsem.c + 0 + 0 + + + 5 + 38 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chstats.c + chstats.c + 0 + 0 + + + 5 + 39 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chsys.c + chsys.c + 0 + 0 + + + 5 + 40 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chthreads.c + chthreads.c + 0 + 0 + + + 5 + 41 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chtm.c + chtm.c + 0 + 0 + + + 5 + 42 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chvt.c + chvt.c + 0 + 0 + + + 5 + 43 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chrfcu.c + chrfcu.c + 0 + 0 + + + 5 + 44 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chinstances.c + chinstances.c + 0 + 0 + + + 5 + 45 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chchecks.h + chchecks.h + 0 + 0 + + + 5 + 46 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chtrace.h + chtrace.h + 0 + 0 + + + 5 + 47 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\src\chtrace.c + chtrace.c + 0 + 0 + + + 5 + 48 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chrestrictions.h + chrestrictions.h + 0 + 0 + + + 5 + 49 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\rt\include\chtime.h + chtime.h + 0 + 0 + + + + + oslib + 0 + 0 + 0 + 0 + + 6 + 50 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chbsem.h + chbsem.h + 0 + 0 + + + 6 + 51 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chdelegates.h + chdelegates.h + 0 + 0 + + + 6 + 52 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chfactory.h + chfactory.h + 0 + 0 + + + 6 + 53 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chjobs.h + chjobs.h + 0 + 0 + + + 6 + 54 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chlib.h + chlib.h + 0 + 0 + + + 6 + 55 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chmboxes.h + chmboxes.h + 0 + 0 + + + 6 + 56 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chmemcore.h + chmemcore.h + 0 + 0 + + + 6 + 57 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chmemheaps.h + chmemheaps.h + 0 + 0 + + + 6 + 58 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chmempools.h + chmempools.h + 0 + 0 + + + 6 + 59 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chobjcaches.h + chobjcaches.h + 0 + 0 + + + 6 + 60 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chobjfifos.h + chobjfifos.h + 0 + 0 + + + 6 + 61 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\include\chpipes.h + chpipes.h + 0 + 0 + + + 6 + 62 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\src\chdelegates.c + chdelegates.c + 0 + 0 + + + 6 + 63 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\src\chfactory.c + chfactory.c + 0 + 0 + + + 6 + 64 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\src\chmboxes.c + chmboxes.c + 0 + 0 + + + 6 + 65 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\src\chmemcore.c + chmemcore.c + 0 + 0 + + + 6 + 66 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\src\chmemheaps.c + chmemheaps.c + 0 + 0 + + + 6 + 67 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\src\chmempools.c + chmempools.c + 0 + 0 + + + 6 + 68 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\src\chobjcaches.c + chobjcaches.c + 0 + 0 + + + 6 + 69 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\oslib\src\chpipes.c + chpipes.c + 0 + 0 + + + + + osal + 0 + 0 + 0 + 0 + + 7 + 70 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\osal\rt-nil\osal.c + osal.c + 0 + 0 + + + 7 + 71 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\osal\rt-nil\osal.h + osal.h + 0 + 0 + + + + + hal + 0 + 0 + 0 + 0 + + 8 + 72 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal.h + hal.h + 0 + 0 + + + 8 + 73 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_adc.h + hal_adc.h + 0 + 0 + + + 8 + 74 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_buffers.h + hal_buffers.h + 0 + 0 + + + 8 + 75 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_can.h + hal_can.h + 0 + 0 + + + 8 + 76 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_channels.h + hal_channels.h + 0 + 0 + + + 8 + 77 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_dac.h + hal_dac.h + 0 + 0 + + + 8 + 78 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_files.h + hal_files.h + 0 + 0 + + + 8 + 79 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_gpt.h + hal_gpt.h + 0 + 0 + + + 8 + 80 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_i2c.h + hal_i2c.h + 0 + 0 + + + 8 + 81 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_i2s.h + hal_i2s.h + 0 + 0 + + + 8 + 82 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_icu.h + hal_icu.h + 0 + 0 + + + 8 + 83 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_ioblock.h + hal_ioblock.h + 0 + 0 + + + 8 + 84 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_mac.h + hal_mac.h + 0 + 0 + + + 8 + 85 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_mii.h + hal_mii.h + 0 + 0 + + + 8 + 86 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_mmc_spi.h + hal_mmc_spi.h + 0 + 0 + + + 8 + 87 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_mmcsd.h + hal_mmcsd.h + 0 + 0 + + + 8 + 88 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_pal.h + hal_pal.h + 0 + 0 + + + 8 + 89 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_pwm.h + hal_pwm.h + 0 + 0 + + + 8 + 90 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_queues.h + hal_queues.h + 0 + 0 + + + 8 + 91 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_rtc.h + hal_rtc.h + 0 + 0 + + + 8 + 92 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_sdc.h + hal_sdc.h + 0 + 0 + + + 8 + 93 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_serial.h + hal_serial.h + 0 + 0 + + + 8 + 94 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_serial_usb.h + hal_serial_usb.h + 0 + 0 + + + 8 + 95 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_spi.h + hal_spi.h + 0 + 0 + + + 8 + 96 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_st.h + hal_st.h + 0 + 0 + + + 8 + 97 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_streams.h + hal_streams.h + 0 + 0 + + + 8 + 98 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_uart.h + hal_uart.h + 0 + 0 + + + 8 + 99 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_usb.h + hal_usb.h + 0 + 0 + + + 8 + 100 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_usb_cdc.h + hal_usb_cdc.h + 0 + 0 + + + 8 + 101 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_wdg.h + hal_wdg.h + 0 + 0 + + + 8 + 102 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal.c + hal.c + 0 + 0 + + + 8 + 103 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_adc.c + hal_adc.c + 0 + 0 + + + 8 + 104 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_buffers.c + hal_buffers.c + 0 + 0 + + + 8 + 105 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_can.c + hal_can.c + 0 + 0 + + + 8 + 106 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_dac.c + hal_dac.c + 0 + 0 + + + 8 + 107 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_gpt.c + hal_gpt.c + 0 + 0 + + + 8 + 108 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_i2c.c + hal_i2c.c + 0 + 0 + + + 8 + 109 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_i2s.c + hal_i2s.c + 0 + 0 + + + 8 + 110 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_icu.c + hal_icu.c + 0 + 0 + + + 8 + 111 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_mac.c + hal_mac.c + 0 + 0 + + + 8 + 112 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_mmc_spi.c + hal_mmc_spi.c + 0 + 0 + + + 8 + 113 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_mmcsd.c + hal_mmcsd.c + 0 + 0 + + + 8 + 114 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_pal.c + hal_pal.c + 0 + 0 + + + 8 + 115 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_pwm.c + hal_pwm.c + 0 + 0 + + + 8 + 116 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_queues.c + hal_queues.c + 0 + 0 + + + 8 + 117 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_rtc.c + hal_rtc.c + 0 + 0 + + + 8 + 118 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_sdc.c + hal_sdc.c + 0 + 0 + + + 8 + 119 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_serial.c + hal_serial.c + 0 + 0 + + + 8 + 120 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_serial_usb.c + hal_serial_usb.c + 0 + 0 + + + 8 + 121 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_spi.c + hal_spi.c + 0 + 0 + + + 8 + 122 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_st.c + hal_st.c + 0 + 0 + + + 8 + 123 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_uart.c + hal_uart.c + 0 + 0 + + + 8 + 124 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_usb.c + hal_usb.c + 0 + 0 + + + 8 + 125 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_wdg.c + hal_wdg.c + 0 + 0 + + + 8 + 126 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_crypto.h + hal_crypto.h + 0 + 0 + + + 8 + 127 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_efl.h + hal_efl.h + 0 + 0 + + + 8 + 128 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_flash.h + hal_flash.h + 0 + 0 + + + 8 + 129 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_objects.h + hal_objects.h + 0 + 0 + + + 8 + 130 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_persistent.h + hal_persistent.h + 0 + 0 + + + 8 + 131 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_sio.h + hal_sio.h + 0 + 0 + + + 8 + 132 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_trng.h + hal_trng.h + 0 + 0 + + + 8 + 133 + 5 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_wspi.h + hal_wspi.h + 0 + 0 + + + 8 + 134 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_crypto.c + hal_crypto.c + 0 + 0 + + + 8 + 135 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_efl.c + hal_efl.c + 0 + 0 + + + 8 + 136 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_flash.c + hal_flash.c + 0 + 0 + + + 8 + 137 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_sio.c + hal_sio.c + 0 + 0 + + + 8 + 138 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_trng.c + hal_trng.c + 0 + 0 + + + 8 + 139 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_wspi.c + hal_wspi.c + 0 + 0 + + + + + hal_port + 0 + 0 + 0 + 0 + + 9 + 140 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS-Contrib\os\hal\ports\WB32\LLD\GPIOv1\hal_pal_lld.c + hal_pal_lld.c + 0 + 0 + + + 9 + 141 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS-Contrib\os\hal\ports\WB32\WB32FQ95xx\hal_lld.c + hal_lld.c + 0 + 0 + + + 9 + 142 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS-Contrib\os\hal\ports\WB32\WB32FQ95xx\wb32_isr.c + wb32_isr.c + 0 + 0 + + + 9 + 143 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\hal\ports\common\ARMCMx\nvic.c + nvic.c + 0 + 0 + + + 9 + 144 + 1 + 0 + 0 + 0 + ..\..\..\..\os\hal\ports\WB32\LLD\TIMv1\hal_st_lld.c + hal_st_lld.c + 0 + 0 + + + + + board + 0 + 0 + 0 + 0 + + 10 + 145 + 1 + 0 + 0 + 0 + ..\board\board.c + board.c + 0 + 0 + + + 10 + 146 + 5 + 0 + 0 + 0 + ..\board\board.h + board.h + 0 + 0 + + + + + test + 0 + 0 + 0 + 0 + + 11 + 147 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_root.c + rt_test_root.c + 0 + 0 + + + 11 + 148 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_001.c + rt_test_sequence_001.c + 0 + 0 + + + 11 + 149 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_002.c + rt_test_sequence_002.c + 0 + 0 + + + 11 + 150 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_003.c + rt_test_sequence_003.c + 0 + 0 + + + 11 + 151 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_004.c + rt_test_sequence_004.c + 0 + 0 + + + 11 + 152 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_005.c + rt_test_sequence_005.c + 0 + 0 + + + 11 + 153 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_006.c + rt_test_sequence_006.c + 0 + 0 + + + 11 + 154 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_007.c + rt_test_sequence_007.c + 0 + 0 + + + 11 + 155 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_008.c + rt_test_sequence_008.c + 0 + 0 + + + 11 + 156 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_009.c + rt_test_sequence_009.c + 0 + 0 + + + 11 + 157 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_010.c + rt_test_sequence_010.c + 0 + 0 + + + 11 + 158 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_011.c + rt_test_sequence_011.c + 0 + 0 + + + 11 + 159 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_012.c + rt_test_sequence_012.c + 0 + 0 + + + 11 + 160 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_root.c + oslib_test_root.c + 0 + 0 + + + 11 + 161 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_001.c + oslib_test_sequence_001.c + 0 + 0 + + + 11 + 162 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_002.c + oslib_test_sequence_002.c + 0 + 0 + + + 11 + 163 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_003.c + oslib_test_sequence_003.c + 0 + 0 + + + 11 + 164 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_004.c + oslib_test_sequence_004.c + 0 + 0 + + + 11 + 165 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_005.c + oslib_test_sequence_005.c + 0 + 0 + + + 11 + 166 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_006.c + oslib_test_sequence_006.c + 0 + 0 + + + 11 + 167 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_007.c + oslib_test_sequence_007.c + 0 + 0 + + + 11 + 168 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_008.c + oslib_test_sequence_008.c + 0 + 0 + + + 11 + 169 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_009.c + oslib_test_sequence_009.c + 0 + 0 + + + 11 + 170 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\test\src\ch_test.c + ch_test.c + 0 + 0 + + + 11 + 171 + 1 + 0 + 0 + 0 + ..\..\..\..\..\ChibiOS\os\test\src\ch_test_printf.c + ch_test_printf.c + 0 + 0 + + + + + demo + 0 + 0 + 0 + 0 + + 12 + 172 + 1 + 0 + 0 + 0 + ..\main.c + main.c + 0 + 0 + + + 12 + 173 + 5 + 0 + 0 + 0 + ..\cfg\chconf.h + chconf.h + 0 + 0 + + + 12 + 174 + 5 + 0 + 0 + 0 + ..\cfg\halconf.h + halconf.h + 0 + 0 + + + 12 + 175 + 5 + 0 + 0 + 0 + ..\cfg\mcuconf.h + mcuconf.h + 0 + 0 + + + +
diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/keil/ch.uvprojx b/demos/WB32/RT-WB32FQ95-GENERIC/keil/ch.uvprojx new file mode 100644 index 00000000..805d2597 --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/keil/ch.uvprojx @@ -0,0 +1,1328 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Demo + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::.\ARMCC + 0 + + + ARMCM3 + ARM + ARM.CMSIS.5.8.0 + http://www.keil.com/pack/ + IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(12000000) ESEL ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000) + 0 + $$Device:ARMCM3$Device\ARM\ARMCM3\Include\ARMCM3.h + + + + + + + + + + + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\obj\ + ch + 1 + 0 + 1 + 1 + 1 + .\lst\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -MPU + DCM.DLL + -pCM3 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 0 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x0 + 0x40000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x40000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x9000 + + + 0 + 0x2000a000 + 0x1 + + + + + + 1 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + -UWB32FQ95xx + CORTEX_USE_FPU=0 TEST_CFG_SIZE_REPORT=0 __heap_base__=Image$$$$RW_IRAM1$$$$ZI$$$$Limit __heap_end__=Image$$$$RW_IRAM1$$$$Base + + ..\;..\cfg;..\..\..\..\..\ChibiOS\os\license;..\..\..\..\..\ChibiOS-Contrib\os\common\startup\ARMCMx\devices\WB32FQ95xx;..\..\..\..\..\ChibiOS\os\common\ext\ARM\CMSIS\Core\Include;..\..\..\..\..\ChibiOS-Contrib\os\common\ext\CMSIS\WB32\WB32FQ95xx;..\..\..\..\..\ChibiOS\os\common\portability\Keil;..\..\..\..\..\ChibiOS\os\common\ports\ARM-common;..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M;..\..\..\..\..\ChibiOS\os\rt\include;..\..\..\..\..\ChibiOS\os\oslib\include;..\..\..\..\..\ChibiOS\os\hal\osal\rt-nil;..\..\..\..\..\ChibiOS\os\hal\include;..\board;..\..\..\..\..\ChibiOS\os\hal\ports\common\ARMCMx;..\..\..\..\..\ChibiOS-Contrib\os\hal\ports\WB32\WB32FQ95xx;..\..\..\..\..\ChibiOS-Contrib\os\hal\ports\WB32\LLD\GPIOv1;..\..\..\..\os\hal\ports\WB32\LLD\TIMv1;..\..\..\..\..\ChibiOS\os\test\include;..\..\..\..\..\ChibiOS\test\rt\source\test;..\..\..\..\..\ChibiOS\test\oslib\source\test + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + --cpreproc --cpreproc_opts=-DCORTEX_USE_FPU=0 + + + ..\;..\cfg;..\..\..\..\..\ChibiOS\os\license;..\..\..\..\..\ChibiOS-Contrib\os\common\startup\ARMCMx\devices\WB32FQ95xx;..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M;..\board + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + license + + + chcustomer.h + 5 + ..\..\..\..\..\ChibiOS\os\license\chcustomer.h + + + chlicense.h + 5 + ..\..\..\..\..\ChibiOS\os\license\chlicense.h + + + chversion.h + 5 + ..\..\..\..\..\ChibiOS\os\license\chversion.h + + + + + startup + + + cstartup.s + 2 + ..\..\..\..\..\ChibiOS\os\common\startup\ARMCMx\compilers\RVCT\cstartup.s + + + vectors.s + 2 + ..\..\..\..\..\ChibiOS\os\common\startup\ARMCMx\compilers\RVCT\vectors.s + + + cmparams.h + 5 + ..\..\..\..\..\ChibiOS-Contrib\os\common\startup\ARMCMx\devices\WB32FQ95xx\cmparams.h + + + + + cmsis + + + core_cm3.h + 5 + ..\..\..\..\..\ChibiOS\os\common\ext\ARM\CMSIS\Core\Include\core_cm3.h + + + wb32fq95xx.h + 5 + ..\..\..\..\..\ChibiOS-Contrib\os\common\ext\CMSIS\WB32\WB32FQ95xx\wb32fq95xx.h + + + + + kernel port + + + chcore.c + 1 + ..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M\chcore.c + + + chcore.h + 5 + ..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M\chcore.h + + + mpu.h + 5 + ..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M\mpu.h + + + chcoreasm.s + 2 + ..\..\..\..\..\ChibiOS\os\common\ports\ARMv7-M\compilers\RVCT\chcoreasm.s + + + + + kernel + + + chalign.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chalign.h + + + ch.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\ch.h + + + chcond.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chcond.h + + + chdebug.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chdebug.h + + + chdynamic.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chdynamic.h + + + chevents.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chevents.h + + + chmsg.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chmsg.h + + + chmtx.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chmtx.h + + + chregistry.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chregistry.h + + + chschd.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chschd.h + + + chsem.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chsem.h + + + chstats.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chstats.h + + + chsys.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chsys.h + + + chthreads.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chthreads.h + + + chtm.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chtm.h + + + chvt.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chvt.h + + + chcond.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chcond.c + + + chdebug.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chdebug.c + + + chdynamic.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chdynamic.c + + + chevents.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chevents.c + + + chmsg.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chmsg.c + + + chmtx.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chmtx.c + + + chregistry.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chregistry.c + + + chschd.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chschd.c + + + chsem.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chsem.c + + + chstats.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chstats.c + + + chsys.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chsys.c + + + chthreads.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chthreads.c + + + chtm.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chtm.c + + + chvt.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chvt.c + + + chrfcu.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chrfcu.c + + + chinstances.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chinstances.c + + + chchecks.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chchecks.h + + + chtrace.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chtrace.h + + + chtrace.c + 1 + ..\..\..\..\..\ChibiOS\os\rt\src\chtrace.c + + + chrestrictions.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chrestrictions.h + + + chtime.h + 5 + ..\..\..\..\..\ChibiOS\os\rt\include\chtime.h + + + + + oslib + + + chbsem.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chbsem.h + + + chdelegates.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chdelegates.h + + + chfactory.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chfactory.h + + + chjobs.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chjobs.h + + + chlib.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chlib.h + + + chmboxes.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chmboxes.h + + + chmemcore.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chmemcore.h + + + chmemheaps.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chmemheaps.h + + + chmempools.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chmempools.h + + + chobjcaches.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chobjcaches.h + + + chobjfifos.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chobjfifos.h + + + chpipes.h + 5 + ..\..\..\..\..\ChibiOS\os\oslib\include\chpipes.h + + + chdelegates.c + 1 + ..\..\..\..\..\ChibiOS\os\oslib\src\chdelegates.c + + + chfactory.c + 1 + ..\..\..\..\..\ChibiOS\os\oslib\src\chfactory.c + + + chmboxes.c + 1 + ..\..\..\..\..\ChibiOS\os\oslib\src\chmboxes.c + + + chmemcore.c + 1 + ..\..\..\..\..\ChibiOS\os\oslib\src\chmemcore.c + + + chmemheaps.c + 1 + ..\..\..\..\..\ChibiOS\os\oslib\src\chmemheaps.c + + + chmempools.c + 1 + ..\..\..\..\..\ChibiOS\os\oslib\src\chmempools.c + + + chobjcaches.c + 1 + ..\..\..\..\..\ChibiOS\os\oslib\src\chobjcaches.c + + + chpipes.c + 1 + ..\..\..\..\..\ChibiOS\os\oslib\src\chpipes.c + + + + + osal + + + osal.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\osal\rt-nil\osal.c + + + osal.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\osal\rt-nil\osal.h + + + + + hal + + + hal.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal.h + + + hal_adc.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_adc.h + + + hal_buffers.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_buffers.h + + + hal_can.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_can.h + + + hal_channels.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_channels.h + + + hal_dac.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_dac.h + + + hal_files.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_files.h + + + hal_gpt.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_gpt.h + + + hal_i2c.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_i2c.h + + + hal_i2s.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_i2s.h + + + hal_icu.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_icu.h + + + hal_ioblock.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_ioblock.h + + + hal_mac.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_mac.h + + + hal_mii.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_mii.h + + + hal_mmc_spi.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_mmc_spi.h + + + hal_mmcsd.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_mmcsd.h + + + hal_pal.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_pal.h + + + hal_pwm.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_pwm.h + + + hal_queues.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_queues.h + + + hal_rtc.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_rtc.h + + + hal_sdc.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_sdc.h + + + hal_serial.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_serial.h + + + hal_serial_usb.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_serial_usb.h + + + hal_spi.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_spi.h + + + hal_st.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_st.h + + + hal_streams.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_streams.h + + + hal_uart.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_uart.h + + + hal_usb.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_usb.h + + + hal_usb_cdc.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_usb_cdc.h + + + hal_wdg.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_wdg.h + + + hal.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal.c + + + hal_adc.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_adc.c + + + hal_buffers.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_buffers.c + + + hal_can.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_can.c + + + hal_dac.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_dac.c + + + hal_gpt.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_gpt.c + + + hal_i2c.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_i2c.c + + + hal_i2s.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_i2s.c + + + hal_icu.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_icu.c + + + hal_mac.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_mac.c + + + hal_mmc_spi.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_mmc_spi.c + + + hal_mmcsd.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_mmcsd.c + + + hal_pal.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_pal.c + + + hal_pwm.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_pwm.c + + + hal_queues.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_queues.c + + + hal_rtc.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_rtc.c + + + hal_sdc.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_sdc.c + + + hal_serial.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_serial.c + + + hal_serial_usb.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_serial_usb.c + + + hal_spi.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_spi.c + + + hal_st.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_st.c + + + hal_uart.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_uart.c + + + hal_usb.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_usb.c + + + hal_wdg.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_wdg.c + + + hal_crypto.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_crypto.h + + + hal_efl.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_efl.h + + + hal_flash.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_flash.h + + + hal_objects.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_objects.h + + + hal_persistent.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_persistent.h + + + hal_sio.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_sio.h + + + hal_trng.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_trng.h + + + hal_wspi.h + 5 + ..\..\..\..\..\ChibiOS\os\hal\include\hal_wspi.h + + + hal_crypto.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_crypto.c + + + hal_efl.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_efl.c + + + hal_flash.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_flash.c + + + hal_sio.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_sio.c + + + hal_trng.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_trng.c + + + hal_wspi.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\src\hal_wspi.c + + + + + hal_port + + + hal_pal_lld.c + 1 + ..\..\..\..\..\ChibiOS-Contrib\os\hal\ports\WB32\LLD\GPIOv1\hal_pal_lld.c + + + hal_lld.c + 1 + ..\..\..\..\..\ChibiOS-Contrib\os\hal\ports\WB32\WB32FQ95xx\hal_lld.c + + + wb32_isr.c + 1 + ..\..\..\..\..\ChibiOS-Contrib\os\hal\ports\WB32\WB32FQ95xx\wb32_isr.c + + + nvic.c + 1 + ..\..\..\..\..\ChibiOS\os\hal\ports\common\ARMCMx\nvic.c + + + hal_st_lld.c + 1 + ..\..\..\..\os\hal\ports\WB32\LLD\TIMv1\hal_st_lld.c + + + + + board + + + board.c + 1 + ..\board\board.c + + + board.h + 5 + ..\board\board.h + + + + + test + + + rt_test_root.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_root.c + + + rt_test_sequence_001.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_001.c + + + rt_test_sequence_002.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_002.c + + + rt_test_sequence_003.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_003.c + + + rt_test_sequence_004.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_004.c + + + rt_test_sequence_005.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_005.c + + + rt_test_sequence_006.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_006.c + + + rt_test_sequence_007.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_007.c + + + rt_test_sequence_008.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_008.c + + + rt_test_sequence_009.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_009.c + + + rt_test_sequence_010.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_010.c + + + rt_test_sequence_011.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_011.c + + + rt_test_sequence_012.c + 1 + ..\..\..\..\..\ChibiOS\test\rt\source\test\rt_test_sequence_012.c + + + oslib_test_root.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_root.c + + + oslib_test_sequence_001.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_001.c + + + oslib_test_sequence_002.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_002.c + + + oslib_test_sequence_003.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_003.c + + + oslib_test_sequence_004.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_004.c + + + oslib_test_sequence_005.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_005.c + + + oslib_test_sequence_006.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_006.c + + + oslib_test_sequence_007.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_007.c + + + oslib_test_sequence_008.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_008.c + + + oslib_test_sequence_009.c + 1 + ..\..\..\..\..\ChibiOS\test\oslib\source\test\oslib_test_sequence_009.c + + + ch_test.c + 1 + ..\..\..\..\..\ChibiOS\os\test\src\ch_test.c + + + ch_test_printf.c + 1 + ..\..\..\..\..\ChibiOS\os\test\src\ch_test_printf.c + + + + + demo + + + main.c + 1 + ..\main.c + + + chconf.h + 5 + ..\cfg\chconf.h + + + halconf.h + 5 + ..\cfg\halconf.h + + + mcuconf.h + 5 + ..\cfg\mcuconf.h + + + + + + + + + + + + + +
diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/main.c b/demos/WB32/RT-WB32FQ95-GENERIC/main.c new file mode 100644 index 00000000..9b9129a3 --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/main.c @@ -0,0 +1,124 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include "ch.h" +#include "hal.h" +#include "board.h" + +/*===========================================================================*/ +/* Private variables. */ +/*===========================================================================*/ +/*===========================================================================*/ +/* Generic code. */ +/*===========================================================================*/ + +#define PORTAB_LINE_LED1 PAL_LINE(GPIOB, 14U) +#define PORTAB_LINE_LED2 PAL_LINE(GPIOB, 13U) +#define PORTAB_LED_OFF PAL_HIGH +#define PORTAB_LED_ON AL_LOW + +#define PORTAB_LINE_BUTTON PAL_LINE(GPIOA, 0U) +#define PORTAB_BUTTON_PRESSED PAL_LOW + +#if defined(PORTAB_LINE_LED2) +/* + * LED blinker thread, times are in milliseconds. + */ +static THD_WORKING_AREA(waThread1, 128); +static THD_FUNCTION(Thread1, arg) +{ + (void)arg; + chRegSetThreadName("blinker"); + while (true) + { + systime_t time = palReadLine(PORTAB_LINE_BUTTON) == PORTAB_BUTTON_PRESSED ? 250 : 500; + palToggleLine(PORTAB_LINE_LED2); + chThdSleepMilliseconds(time); + } +} +#endif + +#if PAL_USE_WAIT || defined(__DOXYGEN__) + +/** + * @brief Configure PORTAB_LINE_BUTTON in interrupt mode + * @param None + * @return None + */ +void EXTI0_Config(void) +{ + /* + * Init button port and pad. + */ + palSetPadMode(PAL_PORT(PORTAB_LINE_BUTTON), PAL_PAD(PORTAB_LINE_BUTTON), PAL_WB32_MODE_INPUT | PAL_WB32_PUPDR_PULLDOWN); + + /* + * Enabling events on both edges of the button line. + */ + palEnableLineEvent(PORTAB_LINE_BUTTON, PAL_EVENT_MODE_RISING_EDGE); + + /* + * Configure the interrupt priority. + */ + nvicEnableVector(EXTI0_IRQn, WB32_IRQ_EXTI0_PRIORITY); +} + +/* + * Application entry point. + */ +int main(void) +{ + /* + * System initializations. + * - HAL initialization, this also initializes the configured device drivers + * and performs the board-specific initializations. + * - Kernel initialization, the main() function becomes a thread and the + * RTOS is active. + */ + halInit(); + chSysInit(); + + /* + * Init LED port and pad. + */ + palSetPadMode(PAL_PORT(PORTAB_LINE_LED1), PAL_PAD(PORTAB_LINE_LED1), PAL_WB32_MODE_OUTPUT | PAL_WB32_OTYPE_PUSHPULL); + palSetPadMode(PAL_PORT(PORTAB_LINE_LED2), PAL_PAD(PORTAB_LINE_LED2), PAL_WB32_MODE_OUTPUT | PAL_WB32_OTYPE_PUSHPULL); + + /* + * Configure PA0 in interrupt mode + */ + EXTI0_Config(); + +#if defined(PORTAB_LINE_LED2) + /* + * Creates the blinker thread. + */ + chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); +#endif + + /* + * Normal main() thread activity. + */ + while (true) + { + /* Waiting for an edge on the button.*/ + palWaitLineTimeout(PORTAB_LINE_BUTTON, TIME_INFINITE); + + palToggleLine(PORTAB_LINE_LED1); + } +} + +#endif /* PAL_USE_WAIT */ diff --git a/demos/WB32/RT-WB32FQ95-GENERIC/readme.md b/demos/WB32/RT-WB32FQ95-GENERIC/readme.md new file mode 100644 index 00000000..7b4115d4 --- /dev/null +++ b/demos/WB32/RT-WB32FQ95-GENERIC/readme.md @@ -0,0 +1,4 @@ +# WB32FQ95xx Serial MCU Demo + +This is an example. + diff --git a/os/common/ext/CMSIS/WB32/WB32FQ95xx/wb32fq95xx.h b/os/common/ext/CMSIS/WB32/WB32FQ95xx/wb32fq95xx.h new file mode 100644 index 00000000..7fdec7ed --- /dev/null +++ b/os/common/ext/CMSIS/WB32/WB32FQ95xx/wb32fq95xx.h @@ -0,0 +1,4335 @@ +/* + Copyright (c) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup wb32fq95xx + * @{ + */ + +#ifndef __WB32FQ95xx_H__ +#define __WB32FQ95xx_H__ + +#if !defined(WB32FQ95xx) + #define WB32FQ95xx +#endif + +#ifdef __cplusplus +extern "C" { +#endif +#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 */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/** @addtogroup Library_configuration_section + * @{ + */ + +#if !defined USE_STDPERIPH_DRIVER +/** + * @brief Comment the line below if you will not use the peripherals drivers. + * In this case, these drivers will not be included and the application code will + * be based on direct access to peripherals registers + */ + /*#define USE_STDPERIPH_DRIVER*/ +#endif + +/** + * @brief In the following line adjust the External High Speed oscillator (HSE) Startup + * Timeout value + */ +#define HSE_STARTUP_TIMEOUT (48000) /*!< Time out for HSE start up */ + + +/** + * @brief WB32FQ95xx Standard Peripheral Library version number + */ +#define __WB32FQ95xx_STDPERIPH_VERSION_MAIN (0x00) /*!< [31:24] main version */ +#define __WB32FQ95xx_STDPERIPH_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ +#define __WB32FQ95xx_STDPERIPH_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */ +#define __WB32FQ95xx_STDPERIPH_VERSION_RC (0x00) /*!< [7:0] release candidate */ +#define __WB32FQ95xx_STDPERIPH_VERSION ( (__WB32FQ95xx_STDPERIPH_VERSION_MAIN << 24) \ + |(__WB32FQ95xx_STDPERIPH_VERSION_SUB1 << 16) \ + |(__WB32FQ95xx_STDPERIPH_VERSION_SUB2 << 8) \ + |(__WB32FQ95xx_STDPERIPH_VERSION_RC)) + +/** + * @} + */ + +/* ------------------------- Interrupt Number Definition ------------------------ */ + +typedef enum IRQn +{ +/* ------------------- Cortex-M3 Processor Exceptions Numbers ------------------- */ + NonMaskableInt_IRQn = -14, /* 2 Non Maskable Interrupt */ + HardFault_IRQn = -13, /* 3 HardFault Interrupt */ + MemoryManagement_IRQn = -12, /* 4 Memory Management Interrupt */ + BusFault_IRQn = -11, /* 5 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /* 6 Usage Fault Interrupt */ + SVCall_IRQn = -5, /* 11 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /* 12 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /* 14 Pend SV Interrupt */ + SysTick_IRQn = -1, /* 15 System Tick Interrupt */ + +/* ---------------------- WB32FQ95xx Specific Interrupt Numbers --------------------- */ + WWDG_IRQn = 0, /* Window WatchDog Interrupt */ + PVD_IRQn = 1, /* PVD through EXTI Line detection Interrupt */ + TAMPER_IRQn = 2, /* Tamper Interrupt */ + RTC_IRQn = 3, /* RTC global Interrupt */ + FMC_IRQn = 4, /* FMC global Interrupt */ + RCC_IRQn = 5, /* RCC global Interrupt */ + EXTI0_IRQn = 6, /* EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /* EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /* EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /* EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /* EXTI Line4 Interrupt */ + DMAC1_IRQn = 11, /* DMAC1 Interrupt */ + DMAC2_IRQn = 12, /* DMAC2 Interrupt */ + ADC_IRQn = 13, /* ADC global Interrupt */ + USB_IRQn = 14, /* USB Interrupt */ + USB_DMA_IRQn = 15, /* USB DMA Interrupt */ + EXTI9_5_IRQn = 16, /* External Line[9:5] Interrupts */ + TIM1_BRK_IRQn = 17, /* TIM1 Break Interrupt */ + TIM1_UP_IRQn = 18, /* TIM1 Update Interrupt */ + TIM1_TRG_COM_IRQn = 19, /* TIM1 Trigger and Commutation Interrupt */ + TIM1_CC_IRQn = 20, /* TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 21, /* TIM2 global Interrupt */ + TIM3_IRQn = 22, /* TIM3 global Interrupt */ + TIM4_IRQn = 23, /* TIM4 global Interrupt */ + I2C1_IRQn = 24, /* I2C1 global Interrupt */ + I2C2_IRQn = 25, /* I2C2 global Interrupt */ + QSPI_IRQn = 26, /* QSPI global Interrupt */ + SPIM2_IRQn = 27, /* SPIM2 global Interrupt */ + SPIS1_IRQn = 28, /* SPIS1 global Interrupt */ + SPIS2_IRQn = 29, /* SPIS2 global Interrupt */ + UART1_IRQn = 30, /* UART1 global Interrupt */ + UART2_IRQn = 31, /* UART2 global Interrupt */ + UART3_IRQn = 32, /* UART3 global Interrupt */ + EXTI15_10_IRQn = 33, /* External Line[15:10] Interrupts */ + RTCAlarm_IRQn = 34, /* RTC Alarm through EXTI Line Interrupt */ + USBP_WKUP_IRQn = 35, /* USB PIN global interrupt */ + I2S_IRQn = 36, /* I2S global Interrupt */ +} IRQn_Type; + + +/* ================================================================================ */ +/* ================ Processor and Core Peripheral Section ================ */ +/* ================================================================================ */ + +/* ------- Start of section using anonymous unions and disabling warnings ------- */ +#if defined (__CC_ARM) + #pragma push + #pragma anon_unions +#elif defined (__ICCARM__) + #pragma language=extended +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wc11-extensions" + #pragma clang diagnostic ignored "-Wreserved-id-macro" +#elif defined (__GNUC__) + /* anonymous unions are enabled by default */ +#elif defined (__TMS470__) + /* anonymous unions are enabled by default */ +#elif defined (__TASKING__) + #pragma warning 586 +#elif defined (__CSMC__) + /* anonymous unions are enabled by default */ +#else + #warning Not supported compiler type +#endif + + +/* -------- Configuration of the Cortex-M3 Processor and Core Peripherals ------- */ +#define __CM3_REV 0x0200U /* Core revision r2p0 */ +#define __MPU_PRESENT 1 /* WB32FQ95xx devices provide an MPU */ +#define __VTOR_PRESENT 1 /* VTOR present or not */ +#define __NVIC_PRIO_BITS 4 /* Number of Bits used for Priority Levels */ +#define __Vendor_SysTickConfig 0 /* Set to 1 if different SysTick Config is used */ + +#include "core_cm3.h" /* Processor and core peripherals */ + +typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; + +typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum {INACTIVE = 0, ACTIVE = !INACTIVE} SignalState; + +typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; + + +/* ================================================================================ */ +/* ================ Device Specific Peripheral Section ================ */ +/* ================================================================================ */ + + +/* ================================================================================ */ +/* ================ General-purpose I/Os (GPIO) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x000 */ + __IOM uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x004 */ + __IOM uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x008 */ + __IOM uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x00C */ + __IM uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x010 */ + __IOM uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x014 */ + __OM uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x018 */ + __IOM uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x01C */ + __IOM uint32_t AFRL; /*!< GPIO alternate function low register, Address offset: 0x020 */ + __IOM uint32_t AFRH; /*!< GPIO alternate function high register, Address offset: 0x024 */ + __IOM uint32_t SMIT; /*!< No Description, Address offset: 0x028 */ + __IOM uint32_t CURRENT; /*!< No Description, Address offset: 0x02C */ + __IOM uint32_t CFGMSK; /*!< No Description, Address offset: 0x030 */ +} GPIO_TypeDef; + + +/* ================================================================================ */ +/* ================ Timer (TIM) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t CR1; /*!< Control register 1, Address offset: 0x000 */ + __IOM uint32_t CR2; /*!< Control register 2, Address offset: 0x004 */ + __IOM uint32_t SMCR; /*!< Slave mode control register, Address offset: 0x008 */ + __IOM uint32_t DIER; /*!< DMA/interrupt enable register, Address offset: 0x00C */ + __IOM uint32_t SR; /*!< Status register, Address offset: 0x010 */ + __OM uint32_t EGR; /*!< Event generation register, Address offset: 0x014 */ + __IOM uint32_t CCMR1; /*!< Capture/compare mode register 1, Address offset: 0x018 */ + __IOM uint32_t CCMR2; /*!< Capture/compare mode register 2, Address offset: 0x01C */ + __IOM uint32_t CCER; /*!< Capture/compare enable register, Address offset: 0x020 */ + __IOM uint32_t CNT; /*!< Counter, Address offset: 0x024 */ + __IOM uint32_t PSC; /*!< Prescaler, Address offset: 0x028 */ + __IOM uint32_t ARR; /*!< Auto-reload register, Address offset: 0x02C */ + __IOM uint32_t RCR; /*!< Repetition counter register, Address offset: 0x030 */ + __IOM uint32_t CCR1; /*!< Capture/compare register 1, Address offset: 0x034 */ + __IOM uint32_t CCR2; /*!< Capture/compare register 2, Address offset: 0x038 */ + __IOM uint32_t CCR3; /*!< Capture/compare register 3, Address offset: 0x03C */ + __IOM uint32_t CCR4; /*!< Capture/compare register 4, Address offset: 0x040 */ + __IOM uint32_t BDTR; /*!< Break and dead-time register, Address offset: 0x044 */ +} TIM_TypeDef; + + +/* ================================================================================ */ +/* ================ External Interrupt/Event Controller (EXTI) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t IMR; /*!< Interrupt mask register, Address offset: 0x000 */ + __IOM uint32_t EMR; /*!< Event mask register, Address offset: 0x004 */ + __IOM uint32_t RTSR; /*!< Rising trigger selection register, Address offset: 0x008 */ + __IOM uint32_t FTSR; /*!< Falling trigger selection register, Address offset: 0x00C */ + __IOM uint32_t SWIER; /*!< Software interrupt event register, Address offset: 0x010 */ + __IOM uint32_t PR; /*!< Pending register, Address offset: 0x014 */ +} EXTI_TypeDef; + + +/* ================================================================================ */ +/* ================ Alternate Function I/O (AFIO) ================ */ +/* ================================================================================ */ +typedef struct +{ + uint32_t RESERVED0[2]; /*!< Reserved, 0x000 - 0x004 */ + __IOM uint32_t EXTICR[4]; /*!< External interrupt configuration register 1 to 4, Address offset: 0x008 - 0x014 */ +} AFIO_TypeDef; + + +/* ================================================================================ */ +/* ================ Window watchdog (WWDG) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t CR; /*!< Control register, Address offset: 0x000 */ + __IOM uint32_t CFR; /*!< Configuration register, Address offset: 0x004 */ + __IOM uint32_t SR; /*!< Status register, Address offset: 0x008 */ +} WWDG_TypeDef; + + +/* ================================================================================ */ +/* ================ Independent watchdog (IWDG) ================ */ +/* ================================================================================ */ +typedef struct +{ + __OM uint32_t KR; /*!< Key register, Address offset: 0x000 */ + __IOM uint32_t PR; /*!< Prescaler register, Address offset: 0x004 */ + __IOM uint32_t RLR; /*!< Reload register, Address offset: 0x008 */ + __IM uint32_t SR; /*!< Status register, Address offset: 0x00C */ +} IWDG_TypeDef; + + +/* ================================================================================ */ +/* ================ Backup Registers (BKP) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t RTCCR; /*!< RTC clock calibration register, Address offset: 0x000 */ + __IOM uint32_t CR; /*!< Backup control register, Address offset: 0x004 */ + __IOM uint32_t CSR; /*!< Backup control/status register, Address offset: 0x008 */ + uint32_t RESERVED0; /*!< Reserved, 0x00C */ + __IOM uint32_t DR1; /*!< Backup data register 1, Address offset: 0x010 */ + __IOM uint32_t DR2; /*!< Backup data register 2, Address offset: 0x014 */ + __IOM uint32_t DR3; /*!< Backup data register 3, Address offset: 0x018 */ + __IOM uint32_t DR4; /*!< Backup data register 4, Address offset: 0x01C */ + __IOM uint32_t DR5; /*!< Backup data register 5, Address offset: 0x020 */ + __IOM uint32_t DR6; /*!< Backup data register 6, Address offset: 0x024 */ + __IOM uint32_t DR7; /*!< Backup data register 7, Address offset: 0x028 */ + __IOM uint32_t DR8; /*!< Backup data register 8, Address offset: 0x02C */ + __IOM uint32_t DR9; /*!< Backup data register 9, Address offset: 0x030 */ + __IOM uint32_t DR10; /*!< Backup data register 10, Address offset: 0x034 */ + __IOM uint32_t DR11; /*!< Backup data register 11, Address offset: 0x038 */ + __IOM uint32_t DR12; /*!< Backup data register 12, Address offset: 0x03C */ + __IOM uint32_t DR13; /*!< Backup data register 13, Address offset: 0x040 */ + __IOM uint32_t DR14; /*!< Backup data register 14, Address offset: 0x044 */ + __IOM uint32_t DR15; /*!< Backup data register 15, Address offset: 0x048 */ + __IOM uint32_t DR16; /*!< Backup data register 16, Address offset: 0x04C */ + __IOM uint32_t DR17; /*!< Backup data register 17, Address offset: 0x050 */ + __IOM uint32_t DR18; /*!< Backup data register 18, Address offset: 0x054 */ + __IOM uint32_t DR19; /*!< Backup data register 19, Address offset: 0x058 */ + __IOM uint32_t DR20; /*!< Backup data register 20, Address offset: 0x05C */ + __IOM uint32_t DR21; /*!< Backup data register 21, Address offset: 0x060 */ + uint32_t RESERVED1[39]; /*!< Reserved, 0x064 - 0x0FC */ + __IOM uint32_t BDCR; /*!< Backup domain control register, Address offset: 0x100 */ +} BKP_TypeDef; + + +/* ================================================================================ */ +/* ================ Real-Time Clock (RTC) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint16_t CRH; /*!< RTC control register high, Address offset: 0x000 */ uint16_t RESERVED0; + __IOM uint16_t CRL; /*!< RTC control register low, Address offset: 0x004 */ uint16_t RESERVED1; + __OM uint16_t PRLH; /*!< RTC prescaler load register high, Address offset: 0x008 */ uint16_t RESERVED2; + union { + __IM uint32_t PRL; /*!< RTC prescaler load register (read only), Address offset: 0x00C */ + __OM uint16_t PRLL; /*!< RTC prescaler load register low, Address offset: 0x00C */ + }; + __IM uint16_t DIVH; /*!< RTC prescaler divider register high, Address offset: 0x010 */ uint16_t RESERVED4; + union { + __IM uint32_t DIV; /*!< RTC prescaler divider register, Address offset: 0x014 */ + __IM uint16_t DIVL; /*!< RTC prescaler divider register low, Address offset: 0x014 */ + }; + __IOM uint16_t CNTH; /*!< RTC counter register high, Address offset: 0x018 */ uint16_t RESERVED5; + union { + __IM uint32_t CNT; /*!< RTC counter register (read only), Address offset: 0x01C */ + __IOM uint16_t CNTL; /*!< RTC counter register low, Address offset: 0x01C */ + }; + __OM uint16_t ALRH; /*!< RTC alarm register high, Address offset: 0x020 */ uint16_t RESERVED6; + union { + __IM uint32_t ALR; /*!< RTC alarm register (read only), Address offset: 0x024 */ + __OM uint16_t ALRL; /*!< RTC alarm register low, Address offset: 0x024 */ + }; +} RTC_TypeDef; + + +/* ================================================================================ */ +/* ================ Special Function Macro (SFM) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< SFM Control register, Address offset: 0x000 */ + __IOM uint32_t DATA; /*!< SFM Input Data register, Address offset: 0x004 */ + __IM uint32_t DOUT[8]; /*!< SFM Result register, Address offset: 0x008 - 0x024 */ + uint32_t RESERVED0[6]; /*!< Reserved, 0x028 - 0x03C */ + __IOM uint32_t USBPCON; /*!< USB Port Control register, Address offset: 0x040 */ + __IOM uint32_t USBPSDCSR; /*!< USB Port State Detect Control/Status register, Address offset: 0x044 */ + __IM uint32_t USBPSTAT; /*!< USB Port Status register, Address offset: 0x048 */ +} SFM_TypeDef; + + +/* ================================================================================ */ +/* ================ Cache Registers (CACHE) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t CR; /*!< CACHE Control register, Address offset: 0x000 */ +} CACHE_TypeDef; + + +/* ================================================================================ */ +/* ================ FMC ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t CON; /*!< FMC control register, Address offset: 0x000 */ + __IOM uint32_t CRCON; /*!< FMC CRC control register, Address offset: 0x004 */ + __IOM uint32_t STAT; /*!< FMC status register, Address offset: 0x008 */ + __OM uint32_t KEY; /*!< FMC key register, Address offset: 0x00C */ + __IOM uint32_t ADDR; /*!< FMC address register, Address offset: 0x010 */ + uint32_t RESERVED2[2]; /*!< Reserved, 0x014 - 0x018 */ + __IM uint32_t DATA1; /*!< FMC data register 1, Address offset: 0x01C */ + uint32_t RESERVED3[56]; /*!< Reserved, 0x020 - 0x0FC */ + __OM uint32_t BUF[64]; /*!< FMC buffer, Address offset: 0x100 - 0x1FC */ +} FMC_TypeDef; + + +/* ================================================================================ */ +/* ================ SYS ================ */ +/* ================================================================================ */ +typedef struct +{ + __IM uint32_t ID; /*!< SYS ID register, Address offset: 0x000 */ + __IM uint32_t MEMSZ; /*!< SYS Memory Size register, Address offset: 0x004 */ + uint32_t RESERVED0; /*!< Reserved, 0x008 */ + __IM uint32_t BTCR; /*!< SYS BOOT Control register, Address offset: 0x00C */ + __IM uint32_t MEMWEN; /*!< SYS Main Memory Write Enable register, Address offset: 0x010 */ + __IM uint32_t SENDEV; /*!< SYS Second Development Control register, Address offset: 0x014 */ + __IM uint32_t RSTCR; /*!< SYS Reset Control register, Address offset: 0x018 */ + __IM uint32_t IF4LCK; /*!< SYS Info4 Write Enable register, Address offset: 0x01C */ + __IM uint32_t IF5LCK; /*!< SYS Info5 Write Enable register, Address offset: 0x020 */ + __IM uint32_t IF6LCK; /*!< SYS Info6 Write Enable register, Address offset: 0x024 */ + __IM uint32_t IF7LCK; /*!< SYS Info7 Write Enable register, Address offset: 0x028 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x02C - 0x030 */ + __IM uint32_t BTSR; /*!< SYS Boot Status register, Address offset: 0x034 */ +} SYS_TypeDef; + + +/* ================================================================================ */ +/* ================ Cyclic Redundancy Check (CRC) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t MODE; /*!< CRC Mode register, Address offset: 0x000 */ + __IOM uint32_t SEED; /*!< CRC Seed register, Address offset: 0x004 */ + union { + __IM uint32_t SUM; /*!< CRC Sum register, Address offset: 0x008 */ + __OM uint32_t WR_DATA_WORD; /*!< CRC Data register for word, Address offset: 0x008 */ + __OM uint16_t WR_DATA_HALF_WORD;/*!< CRC Data register for half word, Address offset: 0x008 */ + __OM uint8_t WR_DATA_BYTE; /*!< CRC Data register for byte, Address offset: 0x008 */ + }; +} CRC_TypeDef; + + +/* ================================================================================ */ +/* ============== Universal Asyncronous Receiver / Transmitter (UART) ============= */ +/* ================================================================================ */ +typedef struct +{ + union { + __IM uint32_t RBR; /*!< Receive Buffer Register, Address offset: 0x000 */ + __OM uint32_t THR; /*!< Transmit Holding Register, Address offset: 0x000 */ + __IOM uint32_t DLL; /*!< Divisor Latch(Low), Address offset: 0x000 */ + }; + union { + __IOM uint32_t DLH; /*!< Divisor Latch(High), Address offset: 0x004 */ + __IOM uint32_t IER; /*!< Interrupt Enable Register, Address offset: 0x004 */ + }; + union { + __IM uint32_t IIR; /*!< Interrupt Identification Register, Address offset: 0x008 */ + __OM uint32_t FCR; /*!< FIFO Control Register, Address offset: 0x008 */ + }; + __IOM uint32_t LCR; /*!< Line Control Register, Address offset: 0x00C */ + __IOM uint32_t MCR; /*!< Modem Control Register, Address offset: 0x010 */ + __IM uint32_t LSR; /*!< Line Status Register, Address offset: 0x014 */ + __IM uint32_t MSR; /*!< Modem Status Register, Address offset: 0x018 */ + __IOM uint32_t SCR; /*!< Scratchpad Register, Address offset: 0x01C */ + uint32_t RESERVED0[23]; /*!< Reserved, 0x020 - 0x078 */ + __IM uint32_t USR; /*!< UART Status Register, Address offset: 0x07C */ + __IM uint32_t TFL; /*!< Transmit FIFO Level, Address offset: 0x080 */ + __IM uint32_t RFL; /*!< Receive FIFO Level, Address offset: 0x084 */ + __OM uint32_t SRR; /*!< Software Reset Register, Address offset: 0x088 */ + __IOM uint32_t SRTS; /*!< Shadow Request to Send, Address offset: 0x08C */ + __IOM uint32_t SBCR; /*!< Shadow Break Control Register, Address offset: 0x090 */ + uint32_t RESERVED1; /*!< Reserved, 0x094 */ + __IOM uint32_t SFE; /*!< Shadow FIFO Enable, Address offset: 0x098 */ + __IOM uint32_t SRT; /*!< Shadow RCVR Trigger, Address offset: 0x09C */ + __IOM uint32_t STET; /*!< Shadow TX Empty Trigger, Address offset: 0x0A0 */ + __IOM uint32_t HTX; /*!< Halt TX, Address offset: 0x0A4 */ + __OM uint32_t DMASA; /*!< DMA Software Acknowledge, Address offset: 0x0A8 */ + uint32_t RESERVED2[5]; /*!< Reserved, 0x0AC - 0x0BC */ + __IOM uint32_t DLF; /*!< Divisor Latch Fractional Value, Address offset: 0x0C0 */ + __IOM uint32_t RAR; /*!< Receive Address Register, Address offset: 0x0C4 */ + __IOM uint32_t TAR; /*!< Transmit Address Register, Address offset: 0x0C8 */ + __IOM uint32_t EXTLCR; /*!< Line Extended Control Register, Address offset: 0x0CC */ +} UART_TypeDef; + + +/* ================================================================================ */ +/* ============== Direct Memory Access Controller (DMAC) ============= */ +/* ================================================================================ */ +typedef struct +{ + struct { + __IOM uint32_t SAR; /*!< Channel x Source Address Register, Address offset: 0x000, 0x058, 0x0B0 */ uint32_t Undefined_SAR; + __IOM uint32_t DAR; /*!< Channel x Destination Address Register, Address offset: 0x008, 0x060, 0x0B8 */ uint32_t Undefined_DAR; + uint32_t RESERVED0[2]; /*!< Reserved */ + __IOM uint32_t CTLL; /*!< Channel x Control Low Register, Address offset: 0x018, 0x070, 0x0C8 */ + __IOM uint32_t CTLH; /*!< Channel x Control High Register, Address offset: 0x01C, 0x074, 0x0CC */ + uint32_t RESERVED1[8]; /*!< Reserved */ + __IOM uint32_t CFGL; /*!< Channel x Configuration Low Register, Address offset: 0x040, 0x098, 0x0F0 */ + __IOM uint32_t CFGH; /*!< Channel x Configuration High Register, Address offset: 0x044, 0x09C, 0x0F4 */ + __IOM uint32_t SGR; /*!< Channel x Source Gather Register, Address offset: 0x048, 0x0A0, 0x0F8 */ uint32_t Undefined_SGR; + __IOM uint32_t DSR; /*!< Channel x Destination Scatter Register, Address offset: 0x050, 0x0A8, 0x100 */ uint32_t Undefined_DSR; + } Ch[3]; + uint32_t RESERVED2[110]; /*!< Reserved, 0x108 - 0x2BC */ + __IM uint32_t RawTfr; /*!< Raw Status for IntTfr Interrupt, Address offset: 0x2C0 */ uint32_t Undefined_RawTfr; + __IM uint32_t RawBlock; /*!< Raw Status for IntBlock Interrupt, Address offset: 0x2C8 */ uint32_t Undefined_RawBlock; + __IM uint32_t RawSrcTran; /*!< Raw Status for IntSrcTran Interrupt, Address offset: 0x2D0 */ uint32_t Undefined_RawSrcTran; + __IM uint32_t RawDstTran; /*!< Raw Status for IntDstTran Interrupt, Address offset: 0x2D8 */ uint32_t Undefined_RawDstTran; + __IM uint32_t RawErr; /*!< Raw Status for IntErr Interrupt, Address offset: 0x2E0 */ uint32_t Undefined_RawErr; + __IM uint32_t StatusTfr; /*!< Status for IntTfr Interrupt, Address offset: 0x2E8 */ uint32_t Undefined_StatusTfr; + __IM uint32_t StatusBlock; /*!< Status for IntBlock Interrupt, Address offset: 0x2F0 */ uint32_t Undefined_StatusBlock; + __IM uint32_t StatusSrcTran; /*!< Status for IntSrcTran Interrupt, Address offset: 0x2F8 */ uint32_t Undefined_StatusSrcTran; + __IM uint32_t StatusDstTran; /*!< Status for IntDstTran Interrupt, Address offset: 0x300 */ uint32_t Undefined_StatusDstTran; + __IM uint32_t StatusErr; /*!< Status for IntErr Interrupt, Address offset: 0x308 */ uint32_t Undefined_StatusErr; + __IOM uint32_t MaskTfr; /*!< Mask for IntTfr Interrupt, Address offset: 0x310 */ uint32_t Undefined_MaskTfr; + __IOM uint32_t MaskBlock; /*!< Mask for IntBlock Interrupt, Address offset: 0x318 */ uint32_t Undefined_MaskBlock; + __IOM uint32_t MaskSrcTran; /*!< Mask for IntSrcTran Interrupt, Address offset: 0x320 */ uint32_t Undefined_MaskSrcTran; + __IOM uint32_t MaskDstTran; /*!< Mask for IntDstTran Interrupt, Address offset: 0x328 */ uint32_t Undefined_MaskDstTran; + __IOM uint32_t MaskErr; /*!< Mask for IntErr Interrupt, Address offset: 0x330 */ uint32_t Undefined_MaskErr; + __OM uint32_t ClearTfr; /*!< Clear for IntTfr Interrupt, Address offset: 0x338 */ uint32_t Undefined_ClearTfr; + __OM uint32_t ClearBlock; /*!< Clear for IntBlock Interrupt, Address offset: 0x340 */ uint32_t Undefined_ClearBlock; + __OM uint32_t ClearSrcTran; /*!< Clear for IntSrcTran Interrupt, Address offset: 0x348 */ uint32_t Undefined_ClearSrcTran; + __OM uint32_t ClearDstTran; /*!< Clear for IntDstTran Interrupt, Address offset: 0x350 */ uint32_t Undefined_ClearDstTran; + __OM uint32_t ClearErr; /*!< Clear for IntErr Interrupt, Address offset: 0x358 */ uint32_t Undefined_ClearErr; + __IM uint32_t StatusInt; /*!< Status for each interrupt type, Address offset: 0x360 */ uint32_t Undefined_StatusInt; + __IOM uint32_t ReqSrcReg; /*!< Source Software Transaction Request Register, Address offset: 0x368 */ uint32_t Undefined_ReqSrcReg; + __IOM uint32_t ReqDstReg; /*!< Destination Software Transaction Request Register, Address offset: 0x370 */ uint32_t Undefined_ReqDstReg; + __IOM uint32_t SglReqSrcReg; /*!< Single Source Transaction Request Register, Address offset: 0x378 */ uint32_t Undefined_SglReqSrcReg; + __IOM uint32_t SglReqDstReg; /*!< Single Destination Transaction Request Register, Address offset: 0x380 */ uint32_t Undefined_SglReqDstReg; + __IOM uint32_t LstSrcReg; /*!< Last Source Transaction Request Register, Address offset: 0x388 */ uint32_t Undefined_LstSrcReg; + __IOM uint32_t LstDstReg; /*!< Last Destination Transaction Request Register, Address offset: 0x390 */ uint32_t Undefined_LstDstReg; + __IOM uint32_t DmaCfgReg; /*!< DMA Configuration Register, Address offset: 0x398 */ uint32_t Undefined_DmaCfgReg; + __IOM uint32_t ChEnReg; /*!< DMA Channel Enable Register, Address offset: 0x3A0 */ uint32_t Undefined_ChEnReg; +} DMAC_TypeDef; + + +/* ================================================================================ */ +/* ============== Serial Peripheral Interface (SPI) ============= */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t CR0; /*!< Control Register 0, Address offset: 0x000 */ + __IOM uint32_t CR1; /*!< Control Register 1, Address offset: 0x004 */ + __IOM uint32_t SPIENR; /*!< SPI Enable Register, Address offset: 0x008 */ + __IOM uint32_t MWCR; /*!< Microwire Control Register, Address offset: 0x00C */ + __IOM uint32_t SER; /*!< Slave Enable Register, Address offset: 0x010 */ + __IOM uint32_t BAUDR; /*!< Baud Rate Select, Address offset: 0x014 */ + __IOM uint32_t TXFTLR; /*!< Transmit FIFO Threshold Level, Address offset: 0x018 */ + __IOM uint32_t RXFTLR; /*!< Receive FIFO Threshold Level, Address offset: 0x01C */ + __IM uint32_t TXFLR; /*!< Transmit FIFO Level Register, Address offset: 0x020 */ + __IM uint32_t RXFLR; /*!< Receive FIFO Level Register, Address offset: 0x024 */ + __IM uint32_t SR; /*!< Status Register, Address offset: 0x028 */ + __IOM uint32_t IER; /*!< Interrupt Enable Register, Address offset: 0x02C */ + __IM uint32_t ISR; /*!< Interrupt Status Register, Address offset: 0x030 */ + __IM uint32_t RISR; /*!< Raw Interrupt Status Register, Address offset: 0x034 */ + __IM uint32_t TXOICR; /*!< Transmit FIFO Overflow Interrupt Clear Register, Address offset: 0x038 */ + __IM uint32_t RXOICR; /*!< Receive FIFO Overflow Interrupt Clear Register, Address offset: 0x03C */ + __IM uint32_t RXUICR; /*!< Receive FIFO Underflow Interrupt Clear Register, Address offset: 0x040 */ + __IM uint32_t MSTICR; /*!< Multi-Master Interrupt Clear Register, Address offset: 0x044 */ + __IM uint32_t ICR; /*!< Interrupt Clear Register, Address offset: 0x048 */ + __IOM uint32_t DMACR; /*!< DMA Control Register, Address offset: 0x04C */ + __IOM uint32_t DMATDLR; /*!< DMA Transmit Data Level, Address offset: 0x050 */ + __IOM uint32_t DMARDLR; /*!< DMA Receive Data Level, Address offset: 0x054 */ + uint32_t RESERVED0[2]; /*!< Reserved, 0x058 - 0x05C */ + __IOM uint32_t DR; /*!< Data Register, Address offset: 0x060 */ + uint32_t RESERVED1[35]; /*!< Reserved, 0x064 - 0x0EC */ + __IOM uint32_t RX_SAMPLE_DLY; /*!< RX Sample Delay Register, Address offset: 0x0F0 */ + __IOM uint32_t ESPICR; /*!< Enhanced SPI Control Register, Address offset: 0x0F4 */ +} SPI_TypeDef; + + +/* ================================================================================ */ +/* ============== Inter-Integrated Circuit (I2C) ============= */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t CON; /*!< I2C Control Register, Address offset: 0x000 */ + __IOM uint32_t TAR; /*!< I2C Target Address Register, Address offset: 0x004 */ + __IOM uint32_t SAR; /*!< I2C Slave Address Register, Address offset: 0x008 */ + __IOM uint32_t HS_MADDR; /*!< I2C High Speed Master Mode Code Address Register, Address offset: 0x00C */ + __IOM uint32_t DATA_CMD; /*!< I2C Rx/Tx Data Buffer and Command Register, Address offset: 0x010 */ + __IOM uint32_t SS_SCL_HCNT; /*!< Standard Speed I2C Clock SCL High Count Register, Address offset: 0x014 */ + __IOM uint32_t SS_SCL_LCNT; /*!< Standard Speed I2C Clock SCL Low Count Register, Address offset: 0x018 */ + __IOM uint32_t FS_SCL_HCNT; /*!< Fast Mode or Fast Mode Plus I2C Clock SCL High Count Register, Address offset: 0x01C */ + __IOM uint32_t FS_SCL_LCNT; /*!< Fast Mode or Fast Mode Plus I2C Clock SCL Low Count Register, Address offset: 0x020 */ + __IOM uint32_t HS_SCL_HCNT; /*!< High Speed I2C Clock SCL High Count Register, Address offset: 0x024 */ + __IOM uint32_t HS_SCL_LCNT; /*!< High Speed I2C Clock SCL Low Count Register, Address offset: 0x028 */ + __IM uint32_t INTR_STAT; /*!< I2C Interrupt Status Register, Address offset: 0x02C */ + __IOM uint32_t INTR_MASK; /*!< I2C Interrupt Mask Register, Address offset: 0x030 */ + __IM uint32_t RAW_INTR_STAT; /*!< I2C Raw Interrupt Status Register, Address offset: 0x034 */ + __IOM uint32_t RX_TL; /*!< I2C Receive FIFO Threshold Register, Address offset: 0x038 */ + __IOM uint32_t TX_TL; /*!< I2C Transmit FIFO Threshold Register, Address offset: 0x03C */ + __IM uint32_t CLR_INTR; /*!< Clear Combined and Individual Interrupt Register, Address offset: 0x040 */ + __IM uint32_t CLR_RX_UNDER; /*!< Clear RX_UNDER Interrupt Register, Address offset: 0x044 */ + __IM uint32_t CLR_RX_OVER; /*!< Clear RX_OVER Interrupt Register, Address offset: 0x048 */ + __IM uint32_t CLR_TX_OVER; /*!< Clear TX_OVER Interrupt Register, Address offset: 0x04C */ + __IM uint32_t CLR_RD_REQ; /*!< Clear RD_REQ Interrupt Register, Address offset: 0x050 */ + __IM uint32_t CLR_TX_ABRT; /*!< Clear TX_ABRT Interrupt Register, Address offset: 0x054 */ + __IM uint32_t CLR_RX_DONE; /*!< Clear RX_DONE Interrupt Register, Address offset: 0x058 */ + __IM uint32_t CLR_ACTIVITY; /*!< Clear ACTIVITY Interrupt Register, Address offset: 0x05C */ + __IM uint32_t CLR_STOP_DET; /*!< Clear STOP_DET Interrupt Register, Address offset: 0x060 */ + __IM uint32_t CLR_START_DET; /*!< Clear START_DET Interrupt Register, Address offset: 0x064 */ + __IM uint32_t CLR_GEN_CALL; /*!< Clear GEN_CALL Interrupt Register, Address offset: 0x068 */ + __IOM uint32_t ENABLE; /*!< I2C Enable Register, Address offset: 0x06C */ + __IM uint32_t STATUS; /*!< I2C Status Register, Address offset: 0x070 */ + __IM uint32_t TXFLR; /*!< I2C Transmit FIFO Level Register, Address offset: 0x074 */ + __IM uint32_t RXFLR; /*!< I2C Receive FIFO Level Register, Address offset: 0x078 */ + __IOM uint32_t SDA_HOLD; /*!< I2C SDA Hold Time Length Register, Address offset: 0x07C */ + __IM uint32_t TX_ABRT_SOURCE; /*!< I2C Transmit Abort Source Register, Address offset: 0x080 */ + __IOM uint32_t SLV_DATA_NACK_ONLY; /*!< Generate Slave Data NACK Register, Address offset: 0x084 */ + __IOM uint32_t DMA_CR; /*!< DMA Control Register, Address offset: 0x088 */ + __IOM uint32_t DMA_TDLR; /*!< DMA Transmit Data Level Register, Address offset: 0x08C */ + __IOM uint32_t DMA_RDLR; /*!< DMA Receive Data Level Register, Address offset: 0x090 */ + __IOM uint32_t SDA_SETUP; /*!< I2C SDA Setup Register, Address offset: 0x094 */ + __IOM uint32_t ACK_GENERAL_CALL; /*!< I2C ACK General Call Register, Address offset: 0x098 */ + __IM uint32_t ENABLE_STATUS; /*!< I2C Enable Status Register, Address offset: 0x09C */ + __IOM uint32_t FS_SPKLEN; /*!< I2C SS, FS or FM+ spike suppression limit, Address offset: 0x0A0 */ + __IOM uint32_t HS_SPKLEN; /*!< I2C HS spike suppression limit, Address offset: 0x0A4 */ + __IM uint32_t CLR_RESTART_DET; /*!< Clear RESTART_DET Interrupt Register, Address offset: 0x0A8 */ + __IOM uint32_t SCL_STUCK_AT_LOW_TIMEOUT; /*!< I2C SCL Stuck at Low Timeout, Address offset: 0x0AC */ + __IOM uint32_t SDA_STUCK_AT_LOW_TIMEOUT; /*!< I2C SDA Stuck at Low Timeout, Address offset: 0x0B0 */ + __IM uint32_t CLR_SCL_STUCK_DET; /*!< Clear SCL Stuck at Low Detect Interrupt Register, Address offset: 0x0B4 */ + uint32_t RESERVED0; /*!< Reserved, 0x0B8 */ + __IOM uint32_t SMBUS_CLK_LOW_SEXT; /*!< SMBus Slave Clock Extend Timeout Register, Address offset: 0x0BC */ + __IOM uint32_t SMBUS_CLK_LOW_MEXT; /*!< SMBus Master Clock Extend Timeout Register, Address offset: 0x0C0 */ + __IOM uint32_t SMBUS_THIGH_MAX_IDLE_COUNT; /*!< SMBus Master THigh MAX Bus-idle count Register, Address offset: 0x0C4 */ + __IM uint32_t SMBUS_INTR_STAT; /*!< SMBUS Interrupt Status Register, Address offset: 0x0C8 */ + __IOM uint32_t SMBUS_INTR_MASK; /*!< SMBus Interrupt Mask Register, Address offset: 0x0CC */ + __IM uint32_t SMBUS_RAW_INTR_STAT; /*!< SMBus Raw Interrupt Status Register, Address offset: 0x0D0 */ + __OM uint32_t CLR_SMBUS_INTR; /*!< SMBus Clear Interrupt Register, Address offset: 0x0D4 */ + __IOM uint32_t OPTIONAL_SAR; /*!< I2C Optional Slave Address Register, Address offset: 0x0D8 */ + __IOM uint32_t SMBUS_UDID_LSB; /*!< SMBUS ARP UDID LSB Register, Address offset: 0x0DC */ +} I2C_TypeDef; + + +/* ================================================================================ */ +/* ================ Inter-IC Sound (I2S) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t IER; /*!< I2S Enable Register, Address offset: 0x000 */ + __IOM uint32_t IRER; /*!< I2S Receiver Block Enable Register, Address offset: 0x004 */ + __IOM uint32_t ITER; /*!< I2S Transmitter Block Enable Register, Address offset: 0x008 */ + __IOM uint32_t CER; /*!< Clock Enable Register, Address offset: 0x00C */ + __IOM uint32_t CCR; /*!< Clock Configuration Register, Address offset: 0x010 */ + __OM uint32_t RXFFR; /*!< Receiver Block FIFO Reset Register, Address offset: 0x014 */ + __OM uint32_t TXFFR; /*!< Transmitter Block FIFO Reset Register, Address offset: 0x018 */ + uint32_t RESERVED0; /*!< Reserved, 0x01C */ + struct { + union { + __IM uint32_t LRBR; /*!< Left Receive Buffer Register, Address offset: 0x020, 0x060 */ + __OM uint32_t LTHR; /*!< Left Transmit Holding Register, Address offset: 0x020, 0x060 */ + }; + union { + __IM uint32_t RRBR; /*!< Right Receive Buffer Register, Address offset: 0x024, 0x064 */ + __OM uint32_t RTHR; /*!< Right Transmit Holding Register, Address offset: 0x024, 0x064 */ + }; + __IOM uint32_t RER; /*!< Receive Enable Register, Address offset: 0x028, 0x068 */ + __IOM uint32_t TER; /*!< Transmit Enable Register, Address offset: 0x02C, 0x06C */ + __IOM uint32_t RCR; /*!< Receive Configuration Register, Address offset: 0x030, 0x070 */ + __IOM uint32_t TCR; /*!< Transmit Configuration Register, Address offset: 0x034, 0x074 */ + __IM uint32_t ISR; /*!< Interrupt Status Register, Address offset: 0x038, 0x078 */ + __IOM uint32_t IMR; /*!< Interrupt Mask Register, Address offset: 0x03C, 0x07C */ + __IM uint32_t ROR; /*!< Receive Overrun Register, Address offset: 0x040, 0x080 */ + __IM uint32_t TOR; /*!< Transmit Overrun Register, Address offset: 0x044, 0x084 */ + __IOM uint32_t RFCR; /*!< Receive FIFO Configuration Register, Address offset: 0x048, 0x088 */ + __IOM uint32_t TFCR; /*!< Transmit FIFO Configuration Register, Address offset: 0x04C, 0x08C */ + __OM uint32_t RFF; /*!< Receive FIFO Flush Register, Address offset: 0x050, 0x090 */ + __OM uint32_t TFF; /*!< Transmit FIFO Flush Register, Address offset: 0x054, 0x094 */ + uint32_t RESERVED0; + uint32_t RESERVED1; + } Ch[2]; + uint32_t RESERVED1[72]; /*!< Reserved, 0x0A0 - 0x1BC */ + __IM uint32_t RXDMA; /*!< Receiver Block DMA Register, Address offset: 0x1C0 */ + __OM uint32_t RRXDMA; /*!< Reset Receiver Block DMA Register, Address offset: 0x1C4 */ + __OM uint32_t TXDMA; /*!< Transmitter Block DMA Register, Address offset: 0x1C8 */ + __OM uint32_t RTXDMA; /*!< Reset Transmitter Block DMA Register, Address offset: 0x1CC */ +} I2S_TypeDef; + + +/* ================================================================================ */ +/* ============== Universal Serial Bus (USB) ============= */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint8_t FADDR; /*!< Function address register, Address offset: 0x000 */ + __IOM uint8_t POWER; /*!< Power management register, Address offset: 0x001 */ + __IM uint8_t INTRIN; /*!< Interrupt register for Endpoint 0 plus IN Endpoints 1 to 3, Address offset: 0x002 */ + uint8_t RESERVED0; /*!< Reserved, 0x003 */ + __IM uint8_t INTROUT; /*!< Interrupt register for OUT Endpoints 1 to 3, Address offset: 0x004 */ + uint8_t RESERVED1; /*!< Reserved, 0x005 */ + __IM uint8_t INTRUSB; /*!< Interrupt register for common USB interrupts, Address offset: 0x006 */ + __IOM uint8_t INTRINE; /*!< Interrupt enable register for IntrIn, Address offset: 0x007 */ + uint8_t RESERVED2; /*!< Reserved, 0x008 */ + __IOM uint8_t INTROUTE; /*!< Interrupt enable register for IntrOut, Address offset: 0x009 */ + uint8_t RESERVED3; /*!< Reserved, 0x00A */ + __IOM uint8_t INTRUSBE; /*!< Interrupt enable register for IntrUSB, Address offset: 0x00B */ + __IM uint8_t FRAMEL; /*!< Frame number bits 0 to 7, Address offset: 0x00C */ + __IM uint8_t FRAMEH; /*!< Frame number bits 8 to 10, Address offset: 0x00D */ + __IOM uint8_t INDEX; /*!< Index register, Address offset: 0x00E */ + uint8_t RESERVED4; /*!< Reserved, 0x00F */ + + __IOM uint8_t INMAXP; /*!< Maximum packet size for IN endpoint, Address offset: 0x010 */ + union { + __IOM uint8_t CSR0; /*!< Control Status register for Endpoint 0, Address offset: 0x011 */ + __IOM uint8_t INCSR1; /*!< Control Status register 1 for IN endpoint, Address offset: 0x011 */ + }; + __IOM uint8_t INCSR2; /*!< Control Status register 2 for IN endpoint, Address offset: 0x012 */ + __IOM uint8_t OUTMAXP; /*!< Maximum packet size for OUT endpoint, Address offset: 0x013 */ + __IOM uint8_t OUTCSR1; /*!< Control Status register 1 for OUT endpoint, Address offset: 0x014 */ + __IOM uint8_t OUTCSR2; /*!< Control Status register 2 for OUT endpoint, Address offset: 0x015 */ + union { + __IM uint8_t COUNT0; /*!< Number of received bytes in Endpoint 0 FIFO, Address offset: 0x016 */ + __IM uint8_t OUTCOUNTL; /*!< Number of bytes in OUT endpoint FIFO (lower byte), Address offset: 0x016 */ + }; + __IM uint8_t OUTCOUNTH; /*!< Number of bytes in OUT endpoint FIFO (upper byte), Address offset: 0x017 */ + uint8_t RESERVED5[8]; /*!< Reserved, 0x018 - 0x01F */ + + __IOM uint32_t FIFO[16]; /*!< FIFOs for Endpoints 0 to 15 (must accessed by bytes), Address offset: 0x020 - 0x05F */ + uint32_t RESERVED6[104]; /*!< Reserved, 0x060 - 0x1FC */ + + __IOM uint32_t DMAINTR; /*!< DMA Interrupt Register, Address offset: 0x200 */ + struct { + __IOM uint32_t CNTL; /*!< DMA Control Register for DMA channel x, Address offset: 0x204, 0x214, 0x224 */ + __IOM uint32_t ADDR; /*!< DMA Address Register for DMA channel x, Address offset: 0x208, 0x218, 0x228 */ + __IOM uint32_t COUNT; /*!< DMA Count Register for DMA channel x, Address offset: 0x20C, 0x21C, 0x22C */ + uint32_t RESERVED; + } DMACH[8]; +} USB_TypeDef; + + +/* ================================================================================ */ +/* ================ Analog to Digital Converter (ADC) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t SR; /*!< ADC status register, Address offset: 0x000 */ + __IOM uint32_t CR1; /*!< ADC control register 1, Address offset: 0x004 */ + __IOM uint32_t CR2; /*!< ADC control register 2, Address offset: 0x008 */ + __IOM uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x00C */ + __IOM uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x010 */ + __IOM uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x014 */ + __IOM uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x018 */ + __IOM uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x01C */ + __IOM uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x020 */ + __IOM uint32_t HTR; /*!< ADC watchdog high threshold register, Address offset: 0x024 */ + __IOM uint32_t LTR; /*!< ADC watchdog low threshold register, Address offset: 0x028 */ + __IOM uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x02C */ + __IOM uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x030 */ + __IOM uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x034 */ + __IOM uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x038 */ + __IOM uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x03C */ + __IOM uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x040 */ + __IOM uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x044 */ + __IOM uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x048 */ + __IOM uint32_t DR; /*!< ADC regular data register, Address offset: 0x04C */ + __IOM uint32_t HS; /*!< ADC hold&sample control register, Address offset: 0x050 */ + __IOM uint32_t CR3; /*!< ADC control register 3, Address offset: 0x054 */ + __IOM uint32_t JDMAR; /*!< Used for Injection channel DMA transfer, Address offset: 0x058 */ +} ADC_TypeDef; + + +/* ================================================================================ */ +/* ================ ANCTL ================ */ +/* ================================================================================ */ +typedef struct +{ + uint32_t RESERVED0[7]; /*!< Reserved, 0x000 - 0x018 */ + __IOM uint32_t BGCR2; /*!< BandGap control register 2, Address offset: 0x01C */ + uint32_t RESERVED1[3]; /*!< Reserved, 0x020 - 0x028 */ + __IOM uint32_t MHSIENR; /*!< MHSI enable register, Address offset: 0x02C */ + __IOM uint32_t MHSISR; /*!< MHSI status register, Address offset: 0x030 */ + uint32_t RESERVED2; /*!< Reserved, 0x034 */ + __IOM uint32_t FHSIENR; /*!< FHSI enable register, Address offset: 0x038 */ + __IOM uint32_t FHSISR; /*!< FHSI status register, Address offset: 0x03C */ + uint32_t RESERVED3; /*!< Reserved, 0x040 */ + __IOM uint32_t LSIENR; /*!< LSI enable register, Address offset: 0x044 */ + __IOM uint32_t LSISR; /*!< LSI status register, Address offset: 0x048 */ + __IOM uint32_t HSECR0; /*!< HSE control register 0, Address offset: 0x04C */ + __IOM uint32_t HSECR1; /*!< HSE control register 1, Address offset: 0x050 */ + uint32_t RESERVED4; /*!< Reserved, 0x054 */ + __IOM uint32_t HSESR; /*!< HSE status register, Address offset: 0x058 */ + uint32_t RESERVED5[6]; /*!< Reserved, 0x05C - 0x070 */ + __IOM uint32_t PLLCR; /*!< PLL control register, Address offset: 0x074 */ + __IOM uint32_t PLLENR; /*!< PLl enable register, Address offset: 0x078 */ + __IOM uint32_t PLLSR; /*!< PLL status register, Address offset: 0x07C */ + __IOM uint32_t PVDCR; /*!< PVD control register, Address offset: 0x080 */ + __IOM uint32_t PVDENR; /*!< PVD enable register, Address offset: 0x084 */ + uint32_t RESERVED6; /*!< Reserved, 0x088 */ + __IOM uint32_t SARENR; /*!< SAR ADC enable register, Address offset: 0x08C */ + __IOM uint32_t USBPCR; /*!< USB PHY control register, Address offset: 0x090 */ + __IOM uint32_t PORCR; /*!< POR control register, Address offset: 0x094 */ + __IOM uint32_t CMPACR; /*!< CMPA control register, Address offset: 0x098 */ + __IOM uint32_t CMPBCR; /*!< CMPB control register, Address offset: 0x09C */ + __IOM uint32_t ISR; /*!< Interrupt status register, Address offset: 0x0A0 */ + __IOM uint32_t IER; /*!< Interrupt enable register, Address offset: 0x0A4 */ + __IOM uint32_t ICR; /*!< Interrupt clear register, Address offset: 0x0A8 */ + __IOM uint32_t CMPASR; /*!< CMPA status register, Address offset: 0x0AC */ + __IOM uint32_t CMPBSR; /*!< CMPB status register, Address offset: 0x0B0 */ + __IOM uint32_t DCSSENR; /*!< DCSS enable register, Address offset: 0x0B4 */ + __IOM uint32_t DCSSCR; /*!< DCSS control register, Address offset: 0x0B8 */ +} ANCTL_TypeDef; + + +/* ================================================================================ */ +/* ================ Reset and Clock Control (RCC) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t PLLPRE; /*!< RCC PLL prescaler register, Address offset: 0x000 */ + __IOM uint32_t PLLSRC; /*!< RCC PLL source register, Address offset: 0x004 */ + __IOM uint32_t MAINCLKSRC; /*!< RCC main clock source register, Address offset: 0x008 */ + __IOM uint32_t MAINCLKUEN; /*!< RCC main clock update enable register, Address offset: 0x00C */ + uint32_t RESERVED0; /*!< Reserved, 0x010 */ + __IOM uint32_t USBPRE; /*!< RCC USB prescaler register, Address offset: 0x014 */ + __IOM uint32_t AHBPRE; /*!< RCC AHB prescaler register, Address offset: 0x018 */ + __IOM uint32_t APB1PRE; /*!< RCC APB1 prescaler register, Address offset: 0x01C */ + __IOM uint32_t APB2PRE; /*!< RCC APB2 prescaler register, Address offset: 0x020 */ + __IOM uint32_t MCLKPRE; /*!< RCC MCLK prescaler register, Address offset: 0x024 */ + __IOM uint32_t I2SPRE; /*!< RCC I2S prescaler register, Address offset: 0x028 */ + __IOM uint32_t MCLKSRC; /*!< RCC MCLK source register, Address offset: 0x02C */ + uint32_t RESERVED1; /*!< Reserved, 0x030 */ + __IOM uint32_t USBFIFOCLKSRC; /*!< RCC USB FIFO clock source register, Address offset: 0x034 */ + __IOM uint32_t MCOSEL; /*!< RCC MCO select register, Address offset: 0x038 */ + __IOM uint32_t AHBENR0; /*!< RCC AHB peripheral clock enable register 0, Address offset: 0x03C */ + __IOM uint32_t AHBENR1; /*!< RCC AHB peripheral clock enable register 1, Address offset: 0x040 */ + __IOM uint32_t AHBENR2; /*!< RCC AHB peripheral clock enable register 2, Address offset: 0x044 */ + __IOM uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x048 */ + __IOM uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x04C */ + uint32_t RESERVED2[3]; /*!< Reserved, 0x050 - 0x058 */ + __IOM uint32_t RNGCLKENR; /*!< RCC RNG clock enable register, Address offset: 0x05C */ + __IOM uint32_t PCLKENR; /*!< RCC panel PCLK clock enable register, Address offset: 0x060 */ + __IOM uint32_t IWDGCLKENR; /*!< RCC IWDG clock enable register, Address offset: 0x064 */ + uint32_t RESERVED4; /*!< Reserved, 0x068 */ + __IOM uint32_t USBCLKENR; /*!< RCC USB clock enable register, Address offset: 0x06C */ + __IOM uint32_t I2SCLKENR; /*!< RCC I2S SCLK enable register, Address offset: 0x070 */ + __IOM uint32_t SPIS1CLKENR; /*!< RCC SPIS1 clock enable register, Address offset: 0x074 */ + __IOM uint32_t SPIS2CLKENR; /*!< RCC SPIS2 clock enable register, Address offset: 0x078 */ + __IOM uint32_t USBFIFOCLKENR; /*!< RCC USB FIFO clock enable register, Address offset: 0x07C */ + uint32_t RESERVED5[2]; /*!< Reserved, 0x080 - 0x084 */ + __IOM uint32_t AHBRSTR1; /*!< RCC AHB peripheral reset register 1, Address offset: 0x088 */ + uint32_t RESERVED6; /*!< Reserved, 0x08C */ + __IOM uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x090 */ + __IOM uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x094 */ + uint32_t RESERVED7[8]; /*!< Reserved, 0x098 - 0x0B4 */ + __IOM uint32_t I2SCLKRSTR; /*!< RCC I2S SCLK reset register, Address offset: 0x0B8 */ + uint32_t RESERVED8[3]; /*!< Reserved, 0x0BC - 0x0C4 */ + __IOM uint32_t CLRRSTSTAT; /*!< RCC clear reset status register, Address offset: 0x0C8 */ + uint32_t RESERVED9[2]; /*!< Reserved, 0x0CC - 0x0D0 */ + __IOM uint32_t BDRSTR; /*!< RCC Batt domain reset register, Address offset: 0x0D4 */ + __IOM uint32_t LSI2RTCENR; /*!< RCC LSI to RTC clock enable register, Address offset: 0x0D8 */ + __IOM uint32_t HSE2RTCENR; /*!< RCC HSE to RTC clock enable register, Address offset: 0x0DC */ + uint32_t RESERVED10[8]; /*!< Reserved, 0x0E0 - 0x0FC */ + __IOM uint32_t RSTSTAT; /*!< RCC reset status register, Address offset: 0x100 */ +} RCC_TypeDef; + + +/* ================================================================================ */ +/* ================ Power Control (PWR) ================ */ +/* ================================================================================ */ +typedef struct +{ + __IOM uint32_t CR0; /*!< Control register 0, Address offset: 0x000 */ + __OM uint32_t CR1; /*!< Control register 1, Address offset: 0x004 */ + __IOM uint32_t CR2; /*!< Control register 2, Address offset: 0x008 */ + uint32_t RESERVED0; /*!< Reserved, 0x00C */ + __IM uint32_t SR0; /*!< Status register 0, Address offset: 0x010 */ + __IM uint32_t SR1; /*!< Status register 1, Address offset: 0x014 */ + __IOM uint32_t GPREG0; /*!< General purpose register 0, Address offset: 0x018 */ + __IOM uint32_t GPREG1; /*!< General purpose register 1, Address offset: 0x01C */ + __IOM uint32_t CFGR; /*!< PWR configuration register, Address offset: 0x020 */ + uint32_t RESERVED1; /*!< Reserved, 0x024 */ + __OM uint32_t ANAKEY1; /*!< ANCTL write enable key register 0, Address offset: 0x028 */ + __OM uint32_t ANAKEY2; /*!< ANCTL write enable key register 1, Address offset: 0x02C */ +} PWR_TypeDef; + + +/* ================================================================================ */ +/* ================ Debug MCU (DBGMCU) ================ */ +/* ================================================================================ */ +typedef struct +{ + uint32_t RESERVED0; /*!< Reserved, 0x000 */ + __IOM uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x004 */ +} DBGMCU_TypeDef; + + +/* -------- End of section using anonymous unions and disabling warnings -------- */ +#if defined (__CC_ARM) + #pragma pop +#elif defined (__ICCARM__) + /* leave anonymous unions enabled */ +#elif (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#elif defined (__GNUC__) + /* anonymous unions are enabled by default */ +#elif defined (__TMS470__) + /* anonymous unions are enabled by default */ +#elif defined (__TASKING__) + #pragma warning restore +#elif defined (__CSMC__) + /* anonymous unions are enabled by default */ +#else + #warning Not supported compiler type +#endif + + +/* ================================================================================ */ +/* ================ Peripheral memory map ================ */ +/* ================================================================================ */ +#define FLASH_BASE ((uint32_t)0x08000000UL) /*!< FLASH base address in the alias region */ +#define SRAM_BASE ((uint32_t)0x20000000UL) /*!< SRAM base address in the alias region */ +#define PERIPH_BASE ((uint32_t)0x40000000UL) /*!< Peripheral base address in the alias region */ + +#define SRAM_BB_BASE ((uint32_t)0x22000000UL) /*!< SRAM base address in the bit-band region */ +#define PERIPH_BB_BASE ((uint32_t)0x42000000UL) /*!< Peripheral base address in the bit-band region */ + +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x08000) +#define AHBPERIPH_BASE (PERIPH_BASE + 0x10000) + + +#define GPIOA_BASE (APB1PERIPH_BASE + 0x0000) // 4000_0000 +#define GPIOB_BASE (APB1PERIPH_BASE + 0x0400) // 4000_0400 +#define GPIOC_BASE (APB1PERIPH_BASE + 0x0800) // 4000_0800 +#define GPIOD_BASE (APB1PERIPH_BASE + 0x0C00) // 4000_0C00 +#define AFIO_BASE (APB1PERIPH_BASE + 0x1400) // 4000_1400 +#define EXTI_BASE (APB1PERIPH_BASE + 0x1800) // 4000_1800 +#define TIM1_BASE (APB1PERIPH_BASE + 0x1C00) // 4000_1C00 +#define TIM2_BASE (APB1PERIPH_BASE + 0x2000) // 4000_2000 +#define TIM3_BASE (APB1PERIPH_BASE + 0x2400) // 4000_2400 +#define TIM4_BASE (APB1PERIPH_BASE + 0x2800) // 4000_2800 +#define QSPI_BASE (APB1PERIPH_BASE + 0x3000) // 4000_3000 +#define SPIS1_BASE (APB1PERIPH_BASE + 0x3400) // 4000_3400 +#define UART1_BASE (APB1PERIPH_BASE + 0x3800) // 4000_3800 +#define ADC_BASE (APB1PERIPH_BASE + 0x3C00) // 4000_3C00 +#define DMAC1_BASE (APB1PERIPH_BASE + 0x7C00) // 4000_7C00 + +#define UART2_BASE (APB2PERIPH_BASE + 0x0000) // 4000_8000 +#define UART3_BASE (APB2PERIPH_BASE + 0x0400) // 4000_8400 +#define I2C1_BASE (APB2PERIPH_BASE + 0x0800) // 4000_8800 +#define I2C2_BASE (APB2PERIPH_BASE + 0x0C00) // 4000_8C00 +#define SPIM2_BASE (APB2PERIPH_BASE + 0x1000) // 4000_9000 +#define SPIS2_BASE (APB2PERIPH_BASE + 0x1400) // 4000_9400 +#define WWDG_BASE (APB2PERIPH_BASE + 0x1800) // 4000_9800 +#define I2S_BASE (APB2PERIPH_BASE + 0x3400) // 4000_B400 +#define DMAC2_BASE (APB2PERIPH_BASE + 0x7C00) // 4000_FC00 + +#define PWR_BASE (AHBPERIPH_BASE + 0x0000) // 4001_0000 +#define ANCTL_BASE (AHBPERIPH_BASE + 0x0400) // 4001_0400 +#define IWDG_BASE (AHBPERIPH_BASE + 0x0800) // 4001_0800 +#define RCC_BASE (AHBPERIPH_BASE + 0x0C00) // 4001_0C00 +#define USB_BASE (AHBPERIPH_BASE + 0x4000) // 4001_4000 +#define CRC_BASE (AHBPERIPH_BASE + 0x4800) // 4001_4800 +#define SFM_BASE (AHBPERIPH_BASE + 0x4C00) // 4001_4C00 +#define CACHE_BASE (AHBPERIPH_BASE + 0x5400) // 4001_5400 +#define RTC_BASE (AHBPERIPH_BASE + 0x5800) // 4001_5800 +#define BKP_BASE (AHBPERIPH_BASE + 0x5C00) // 4001_5C00 +#define SYS_BASE (AHBPERIPH_BASE + 0x6400) // 4001_6400 +#define FMC_BASE (AHBPERIPH_BASE + 0x7800) // 4001_7800 + +#define DBGMCU_BASE (0xE0042000UL) // E004_2000 + + +/* ================================================================================ */ +/* ================ Peripheral declaration ================ */ +/* ================================================================================ */ +#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 AFIO (( AFIO_TypeDef *) AFIO_BASE) +#define EXTI (( EXTI_TypeDef *) EXTI_BASE) +#define TIM1 (( TIM_TypeDef *) TIM1_BASE) +#define TIM2 (( TIM_TypeDef *) TIM2_BASE) +#define TIM3 (( TIM_TypeDef *) TIM3_BASE) +#define TIM4 (( TIM_TypeDef *) TIM4_BASE) +#define QSPI (( SPI_TypeDef *) QSPI_BASE) +#define SPIS1 (( SPI_TypeDef *) SPIS1_BASE) +#define UART1 (( UART_TypeDef *) UART1_BASE) +#define ADC (( ADC_TypeDef *) ADC_BASE) +#define DMAC1 (( DMAC_TypeDef *) DMAC1_BASE) + +#define UART2 (( UART_TypeDef *) UART2_BASE) +#define UART3 (( UART_TypeDef *) UART3_BASE) +#define I2C1 (( I2C_TypeDef *) I2C1_BASE) +#define I2C2 (( I2C_TypeDef *) I2C2_BASE) +#define SPIM2 (( SPI_TypeDef *) SPIM2_BASE) +#define SPIS2 (( SPI_TypeDef *) SPIS2_BASE) +#define WWDG (( WWDG_TypeDef *) WWDG_BASE) +#define I2S (( I2S_TypeDef *) I2S_BASE) +#define DMAC2 (( DMAC_TypeDef *) DMAC2_BASE) + +#define PWR (( PWR_TypeDef *) PWR_BASE) +#define ANCTL (( ANCTL_TypeDef *) ANCTL_BASE) +#define IWDG (( IWDG_TypeDef *) IWDG_BASE) +#define RCC (( RCC_TypeDef *) RCC_BASE) +#define USB (( USB_TypeDef *) USB_BASE) +#define CRC (( CRC_TypeDef *) CRC_BASE) +#define SFM (( SFM_TypeDef *) SFM_BASE) +#define CACHE (( CACHE_TypeDef *) CACHE_BASE) +#define RTC (( RTC_TypeDef *) RTC_BASE) +#define BKP (( BKP_TypeDef *) BKP_BASE) +#define SYS (( SYS_TypeDef *) SYS_BASE) +#define FMC (( FMC_TypeDef *) FMC_BASE) + +#define DBGMCU (( DBGMCU_TypeDef *) DBGMCU_BASE) + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- General-purpose I/Os (GPIO) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for GPIO_MODER register ******************************/ +#define GPIO_MODER_MODER0_Pos (0U) +#define GPIO_MODER_MODER0_Msk (0x3U << GPIO_MODER_MODER0_Pos) +#define GPIO_MODER_MODER1_Pos (2U) +#define GPIO_MODER_MODER1_Msk (0x3U << GPIO_MODER_MODER1_Pos) +#define GPIO_MODER_MODER2_Pos (4U) +#define GPIO_MODER_MODER2_Msk (0x3U << GPIO_MODER_MODER2_Pos) +#define GPIO_MODER_MODER3_Pos (6U) +#define GPIO_MODER_MODER3_Msk (0x3U << GPIO_MODER_MODER3_Pos) +#define GPIO_MODER_MODER4_Pos (8U) +#define GPIO_MODER_MODER4_Msk (0x3U << GPIO_MODER_MODER4_Pos) +#define GPIO_MODER_MODER5_Pos (10U) +#define GPIO_MODER_MODER5_Msk (0x3U << GPIO_MODER_MODER5_Pos) +#define GPIO_MODER_MODER6_Pos (12U) +#define GPIO_MODER_MODER6_Msk (0x3U << GPIO_MODER_MODER6_Pos) +#define GPIO_MODER_MODER7_Pos (14U) +#define GPIO_MODER_MODER7_Msk (0x3U << GPIO_MODER_MODER7_Pos) +#define GPIO_MODER_MODER8_Pos (16U) +#define GPIO_MODER_MODER8_Msk (0x3U << GPIO_MODER_MODER8_Pos) +#define GPIO_MODER_MODER9_Pos (18U) +#define GPIO_MODER_MODER9_Msk (0x3U << GPIO_MODER_MODER9_Pos) +#define GPIO_MODER_MODER10_Pos (20U) +#define GPIO_MODER_MODER10_Msk (0x3U << GPIO_MODER_MODER10_Pos) +#define GPIO_MODER_MODER11_Pos (22U) +#define GPIO_MODER_MODER11_Msk (0x3U << GPIO_MODER_MODER11_Pos) +#define GPIO_MODER_MODER12_Pos (24U) +#define GPIO_MODER_MODER12_Msk (0x3U << GPIO_MODER_MODER12_Pos) +#define GPIO_MODER_MODER13_Pos (26U) +#define GPIO_MODER_MODER13_Msk (0x3U << GPIO_MODER_MODER13_Pos) +#define GPIO_MODER_MODER14_Pos (28U) +#define GPIO_MODER_MODER14_Msk (0x3U << GPIO_MODER_MODER14_Pos) +#define GPIO_MODER_MODER15_Pos (30U) +#define GPIO_MODER_MODER15_Msk (0x3U << GPIO_MODER_MODER15_Pos) + +/******************************** Bit definition for GPIO_OTYPER register ******************************/ +#define GPIO_OTYPER_OT0 (0x1U << 0) +#define GPIO_OTYPER_OT1 (0x1U << 1) +#define GPIO_OTYPER_OT2 (0x1U << 2) +#define GPIO_OTYPER_OT3 (0x1U << 3) +#define GPIO_OTYPER_OT4 (0x1U << 4) +#define GPIO_OTYPER_OT5 (0x1U << 5) +#define GPIO_OTYPER_OT6 (0x1U << 6) +#define GPIO_OTYPER_OT7 (0x1U << 7) +#define GPIO_OTYPER_OT8 (0x1U << 8) +#define GPIO_OTYPER_OT9 (0x1U << 9) +#define GPIO_OTYPER_OT10 (0x1U << 10) +#define GPIO_OTYPER_OT11 (0x1U << 11) +#define GPIO_OTYPER_OT12 (0x1U << 12) +#define GPIO_OTYPER_OT13 (0x1U << 13) +#define GPIO_OTYPER_OT14 (0x1U << 14) +#define GPIO_OTYPER_OT15 (0x1U << 15) + +/******************************** Bit definition for GPIO_OSPEEDR register ******************************/ +#define GPIO_OSPEEDER_OSPEEDR0_Pos (0U) +#define GPIO_OSPEEDER_OSPEEDR0_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR0_Pos) +#define GPIO_OSPEEDER_OSPEEDR1_Pos (2U) +#define GPIO_OSPEEDER_OSPEEDR1_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR1_Pos) +#define GPIO_OSPEEDER_OSPEEDR2_Pos (4U) +#define GPIO_OSPEEDER_OSPEEDR2_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR2_Pos) +#define GPIO_OSPEEDER_OSPEEDR3_Pos (6U) +#define GPIO_OSPEEDER_OSPEEDR3_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR3_Pos) +#define GPIO_OSPEEDER_OSPEEDR4_Pos (8U) +#define GPIO_OSPEEDER_OSPEEDR4_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR4_Pos) +#define GPIO_OSPEEDER_OSPEEDR5_Pos (10U) +#define GPIO_OSPEEDER_OSPEEDR5_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR5_Pos) +#define GPIO_OSPEEDER_OSPEEDR6_Pos (12U) +#define GPIO_OSPEEDER_OSPEEDR6_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR6_Pos) +#define GPIO_OSPEEDER_OSPEEDR7_Pos (14U) +#define GPIO_OSPEEDER_OSPEEDR7_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR7_Pos) +#define GPIO_OSPEEDER_OSPEEDR8_Pos (16U) +#define GPIO_OSPEEDER_OSPEEDR8_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR8_Pos) +#define GPIO_OSPEEDER_OSPEEDR9_Pos (18U) +#define GPIO_OSPEEDER_OSPEEDR9_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR9_Pos) +#define GPIO_OSPEEDER_OSPEEDR10_Pos (20U) +#define GPIO_OSPEEDER_OSPEEDR10_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR10_Pos) +#define GPIO_OSPEEDER_OSPEEDR11_Pos (22U) +#define GPIO_OSPEEDER_OSPEEDR11_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR11_Pos) +#define GPIO_OSPEEDER_OSPEEDR12_Pos (24U) +#define GPIO_OSPEEDER_OSPEEDR12_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR12_Pos) +#define GPIO_OSPEEDER_OSPEEDR13_Pos (26U) +#define GPIO_OSPEEDER_OSPEEDR13_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR13_Pos) +#define GPIO_OSPEEDER_OSPEEDR14_Pos (28U) +#define GPIO_OSPEEDER_OSPEEDR14_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR14_Pos) +#define GPIO_OSPEEDER_OSPEEDR15_Pos (30U) +#define GPIO_OSPEEDER_OSPEEDR15_Msk (0x3U << GPIO_OSPEEDER_OSPEEDR15_Pos) + +/******************************** Bit definition for GPIO_PUPDR register ******************************/ +#define GPIO_PUPDR_PUPDR0_Pos (0U) +#define GPIO_PUPDR_PUPDR0_Msk (0x3U << GPIO_PUPDR_PUPDR0_Pos) +#define GPIO_PUPDR_PUPDR1_Pos (2U) +#define GPIO_PUPDR_PUPDR1_Msk (0x3U << GPIO_PUPDR_PUPDR1_Pos) +#define GPIO_PUPDR_PUPDR2_Pos (4U) +#define GPIO_PUPDR_PUPDR2_Msk (0x3U << GPIO_PUPDR_PUPDR2_Pos) +#define GPIO_PUPDR_PUPDR3_Pos (6U) +#define GPIO_PUPDR_PUPDR3_Msk (0x3U << GPIO_PUPDR_PUPDR3_Pos) +#define GPIO_PUPDR_PUPDR4_Pos (8U) +#define GPIO_PUPDR_PUPDR4_Msk (0x3U << GPIO_PUPDR_PUPDR4_Pos) +#define GPIO_PUPDR_PUPDR5_Pos (10U) +#define GPIO_PUPDR_PUPDR5_Msk (0x3U << GPIO_PUPDR_PUPDR5_Pos) +#define GPIO_PUPDR_PUPDR6_Pos (12U) +#define GPIO_PUPDR_PUPDR6_Msk (0x3U << GPIO_PUPDR_PUPDR6_Pos) +#define GPIO_PUPDR_PUPDR7_Pos (14U) +#define GPIO_PUPDR_PUPDR7_Msk (0x3U << GPIO_PUPDR_PUPDR7_Pos) +#define GPIO_PUPDR_PUPDR8_Pos (16U) +#define GPIO_PUPDR_PUPDR8_Msk (0x3U << GPIO_PUPDR_PUPDR8_Pos) +#define GPIO_PUPDR_PUPDR9_Pos (18U) +#define GPIO_PUPDR_PUPDR9_Msk (0x3U << GPIO_PUPDR_PUPDR9_Pos) +#define GPIO_PUPDR_PUPDR10_Pos (20U) +#define GPIO_PUPDR_PUPDR10_Msk (0x3U << GPIO_PUPDR_PUPDR10_Pos) +#define GPIO_PUPDR_PUPDR11_Pos (22U) +#define GPIO_PUPDR_PUPDR11_Msk (0x3U << GPIO_PUPDR_PUPDR11_Pos) +#define GPIO_PUPDR_PUPDR12_Pos (24U) +#define GPIO_PUPDR_PUPDR12_Msk (0x3U << GPIO_PUPDR_PUPDR12_Pos) +#define GPIO_PUPDR_PUPDR13_Pos (26U) +#define GPIO_PUPDR_PUPDR13_Msk (0x3U << GPIO_PUPDR_PUPDR13_Pos) +#define GPIO_PUPDR_PUPDR14_Pos (28U) +#define GPIO_PUPDR_PUPDR14_Msk (0x3U << GPIO_PUPDR_PUPDR14_Pos) +#define GPIO_PUPDR_PUPDR15_Pos (30U) +#define GPIO_PUPDR_PUPDR15_Msk (0x3U << GPIO_PUPDR_PUPDR15_Pos) + +/******************************** Bit definition for GPIO_IDR register ******************************/ +#define GPIO_IDR_IDR0 (0x1U << 0) /*!< Port input data, bit 0 */ +#define GPIO_IDR_IDR1 (0x1U << 1) /*!< Port input data, bit 1 */ +#define GPIO_IDR_IDR2 (0x1U << 2) /*!< Port input data, bit 2 */ +#define GPIO_IDR_IDR3 (0x1U << 3) /*!< Port input data, bit 3 */ +#define GPIO_IDR_IDR4 (0x1U << 4) /*!< Port input data, bit 4 */ +#define GPIO_IDR_IDR5 (0x1U << 5) /*!< Port input data, bit 5 */ +#define GPIO_IDR_IDR6 (0x1U << 6) /*!< Port input data, bit 6 */ +#define GPIO_IDR_IDR7 (0x1U << 7) /*!< Port input data, bit 7 */ +#define GPIO_IDR_IDR8 (0x1U << 8) /*!< Port input data, bit 8 */ +#define GPIO_IDR_IDR9 (0x1U << 9) /*!< Port input data, bit 9 */ +#define GPIO_IDR_IDR10 (0x1U << 10) /*!< Port input data, bit 10 */ +#define GPIO_IDR_IDR11 (0x1U << 11) /*!< Port input data, bit 11 */ +#define GPIO_IDR_IDR12 (0x1U << 12) /*!< Port input data, bit 12 */ +#define GPIO_IDR_IDR13 (0x1U << 13) /*!< Port input data, bit 13 */ +#define GPIO_IDR_IDR14 (0x1U << 14) /*!< Port input data, bit 14 */ +#define GPIO_IDR_IDR15 (0x1U << 15) /*!< Port input data, bit 15 */ + +/******************************** Bit definition for GPIO_ODR register ******************************/ +#define GPIO_ODR_ODR0 (0x1U << 0) /*!< Port output data, bit 0 */ +#define GPIO_ODR_ODR1 (0x1U << 1) /*!< Port output data, bit 1 */ +#define GPIO_ODR_ODR2 (0x1U << 2) /*!< Port output data, bit 2 */ +#define GPIO_ODR_ODR3 (0x1U << 3) /*!< Port output data, bit 3 */ +#define GPIO_ODR_ODR4 (0x1U << 4) /*!< Port output data, bit 4 */ +#define GPIO_ODR_ODR5 (0x1U << 5) /*!< Port output data, bit 5 */ +#define GPIO_ODR_ODR6 (0x1U << 6) /*!< Port output data, bit 6 */ +#define GPIO_ODR_ODR7 (0x1U << 7) /*!< Port output data, bit 7 */ +#define GPIO_ODR_ODR8 (0x1U << 8) /*!< Port output data, bit 8 */ +#define GPIO_ODR_ODR9 (0x1U << 9) /*!< Port output data, bit 9 */ +#define GPIO_ODR_ODR10 (0x1U << 10) /*!< Port output data, bit 10 */ +#define GPIO_ODR_ODR11 (0x1U << 11) /*!< Port output data, bit 11 */ +#define GPIO_ODR_ODR12 (0x1U << 12) /*!< Port output data, bit 12 */ +#define GPIO_ODR_ODR13 (0x1U << 13) /*!< Port output data, bit 13 */ +#define GPIO_ODR_ODR14 (0x1U << 14) /*!< Port output data, bit 14 */ +#define GPIO_ODR_ODR15 (0x1U << 15) /*!< Port output data, bit 15 */ + +/******************************** Bit definition for GPIO_BSRR register ******************************/ +#define GPIO_BSRR_BS0 (0x1U << 0) /*!< Port x Set bit 0 */ +#define GPIO_BSRR_BS1 (0x1U << 1) /*!< Port x Set bit 1 */ +#define GPIO_BSRR_BS2 (0x1U << 2) /*!< Port x Set bit 2 */ +#define GPIO_BSRR_BS3 (0x1U << 3) /*!< Port x Set bit 3 */ +#define GPIO_BSRR_BS4 (0x1U << 4) /*!< Port x Set bit 4 */ +#define GPIO_BSRR_BS5 (0x1U << 5) /*!< Port x Set bit 5 */ +#define GPIO_BSRR_BS6 (0x1U << 6) /*!< Port x Set bit 6 */ +#define GPIO_BSRR_BS7 (0x1U << 7) /*!< Port x Set bit 7 */ +#define GPIO_BSRR_BS8 (0x1U << 8) /*!< Port x Set bit 8 */ +#define GPIO_BSRR_BS9 (0x1U << 9) /*!< Port x Set bit 9 */ +#define GPIO_BSRR_BS10 (0x1U << 10) /*!< Port x Set bit 10 */ +#define GPIO_BSRR_BS11 (0x1U << 11) /*!< Port x Set bit 11 */ +#define GPIO_BSRR_BS12 (0x1U << 12) /*!< Port x Set bit 12 */ +#define GPIO_BSRR_BS13 (0x1U << 13) /*!< Port x Set bit 13 */ +#define GPIO_BSRR_BS14 (0x1U << 14) /*!< Port x Set bit 14 */ +#define GPIO_BSRR_BS15 (0x1U << 15) /*!< Port x Set bit 15 */ + +#define GPIO_BSRR_BR0 (0x1U << 16) /*!< Port x Reset bit 0 */ +#define GPIO_BSRR_BR1 (0x1U << 17) /*!< Port x Reset bit 1 */ +#define GPIO_BSRR_BR2 (0x1U << 18) /*!< Port x Reset bit 2 */ +#define GPIO_BSRR_BR3 (0x1U << 19) /*!< Port x Reset bit 3 */ +#define GPIO_BSRR_BR4 (0x1U << 20) /*!< Port x Reset bit 4 */ +#define GPIO_BSRR_BR5 (0x1U << 21) /*!< Port x Reset bit 5 */ +#define GPIO_BSRR_BR6 (0x1U << 22) /*!< Port x Reset bit 6 */ +#define GPIO_BSRR_BR7 (0x1U << 23) /*!< Port x Reset bit 7 */ +#define GPIO_BSRR_BR8 (0x1U << 24) /*!< Port x Reset bit 8 */ +#define GPIO_BSRR_BR9 (0x1U << 25) /*!< Port x Reset bit 9 */ +#define GPIO_BSRR_BR10 (0x1U << 26) /*!< Port x Reset bit 10 */ +#define GPIO_BSRR_BR11 (0x1U << 27) /*!< Port x Reset bit 11 */ +#define GPIO_BSRR_BR12 (0x1U << 28) /*!< Port x Reset bit 12 */ +#define GPIO_BSRR_BR13 (0x1U << 29) /*!< Port x Reset bit 13 */ +#define GPIO_BSRR_BR14 (0x1U << 30) /*!< Port x Reset bit 14 */ +#define GPIO_BSRR_BR15 (0x1U << 31) /*!< Port x Reset bit 15 */ + +/******************************** Bit definition for GPIO_LCKR register *******************************/ +#define GPIO_LCKR_LCK0 (0x1U << 0) /*!< Port x Lock bit 0 */ +#define GPIO_LCKR_LCK1 (0x1U << 1) /*!< Port x Lock bit 1 */ +#define GPIO_LCKR_LCK2 (0x1U << 2) /*!< Port x Lock bit 2 */ +#define GPIO_LCKR_LCK3 (0x1U << 3) /*!< Port x Lock bit 3 */ +#define GPIO_LCKR_LCK4 (0x1U << 4) /*!< Port x Lock bit 4 */ +#define GPIO_LCKR_LCK5 (0x1U << 5) /*!< Port x Lock bit 5 */ +#define GPIO_LCKR_LCK6 (0x1U << 6) /*!< Port x Lock bit 6 */ +#define GPIO_LCKR_LCK7 (0x1U << 7) /*!< Port x Lock bit 7 */ +#define GPIO_LCKR_LCK8 (0x1U << 8) /*!< Port x Lock bit 8 */ +#define GPIO_LCKR_LCK9 (0x1U << 9) /*!< Port x Lock bit 9 */ +#define GPIO_LCKR_LCK10 (0x1U << 10) /*!< Port x Lock bit 10 */ +#define GPIO_LCKR_LCK11 (0x1U << 11) /*!< Port x Lock bit 11 */ +#define GPIO_LCKR_LCK12 (0x1U << 12) /*!< Port x Lock bit 12 */ +#define GPIO_LCKR_LCK13 (0x1U << 13) /*!< Port x Lock bit 13 */ +#define GPIO_LCKR_LCK14 (0x1U << 14) /*!< Port x Lock bit 14 */ +#define GPIO_LCKR_LCK15 (0x1U << 15) /*!< Port x Lock bit 15 */ +#define GPIO_LCKR_LCKK (0x1U << 16) /*!< Lock key */ + +/******************************** Bit definition for GPIO_AFRL register *******************************/ +#define GPIO_AFRL_AFR0_Pos (0U) +#define GPIO_AFRL_AFR0_Msk (0xFU << GPIO_AFRL_AFR0_Pos) +#define GPIO_AFRL_AFR1_Pos (4U) +#define GPIO_AFRL_AFR1_Msk (0xFU << GPIO_AFRL_AFR1_Pos) +#define GPIO_AFRL_AFR2_Pos (8U) +#define GPIO_AFRL_AFR2_Msk (0xFU << GPIO_AFRL_AFR2_Pos) +#define GPIO_AFRL_AFR3_Pos (12U) +#define GPIO_AFRL_AFR3_Msk (0xFU << GPIO_AFRL_AFR3_Pos) +#define GPIO_AFRL_AFR4_Pos (16U) +#define GPIO_AFRL_AFR4_Msk (0xFU << GPIO_AFRL_AFR4_Pos) +#define GPIO_AFRL_AFR5_Pos (20U) +#define GPIO_AFRL_AFR5_Msk (0xFU << GPIO_AFRL_AFR5_Pos) +#define GPIO_AFRL_AFR6_Pos (24U) +#define GPIO_AFRL_AFR6_Msk (0xFU << GPIO_AFRL_AFR6_Pos) +#define GPIO_AFRL_AFR7_Pos (28U) +#define GPIO_AFRL_AFR7_Msk (0xFU << GPIO_AFRL_AFR7_Pos) + +/******************************** Bit definition for GPIO_AFRH register *******************************/ +#define GPIO_AFRH_AFR8_Pos (0U) +#define GPIO_AFRH_AFR8_Msk (0xFU << GPIO_AFRH_AFR8_Pos) +#define GPIO_AFRH_AFR9_Pos (4U) +#define GPIO_AFRH_AFR9_Msk (0xFU << GPIO_AFRH_AFR9_Pos) +#define GPIO_AFRH_AFR10_Pos (8U) +#define GPIO_AFRH_AFR10_Msk (0xFU << GPIO_AFRH_AFR10_Pos) +#define GPIO_AFRH_AFR11_Pos (12U) +#define GPIO_AFRH_AFR11_Msk (0xFU << GPIO_AFRH_AFR11_Pos) +#define GPIO_AFRH_AFR12_Pos (16U) +#define GPIO_AFRH_AFR12_Msk (0xFU << GPIO_AFRH_AFR12_Pos) +#define GPIO_AFRH_AFR13_Pos (20U) +#define GPIO_AFRH_AFR13_Msk (0xFU << GPIO_AFRH_AFR13_Pos) +#define GPIO_AFRH_AFR14_Pos (24U) +#define GPIO_AFRH_AFR14_Msk (0xFU << GPIO_AFRH_AFR14_Pos) +#define GPIO_AFRH_AFR15_Pos (28U) +#define GPIO_AFRH_AFR15_Msk (0xFU << GPIO_AFRH_AFR15_Pos) + +/******************************** Bit definition for GPIO_SMIT register *******************************/ +#define GPIO_SMIT_SMIT0 (0x1U << 0) +#define GPIO_SMIT_SMIT1 (0x1U << 1) +#define GPIO_SMIT_SMIT2 (0x1U << 2) +#define GPIO_SMIT_SMIT3 (0x1U << 3) +#define GPIO_SMIT_SMIT4 (0x1U << 4) +#define GPIO_SMIT_SMIT5 (0x1U << 5) +#define GPIO_SMIT_SMIT6 (0x1U << 6) +#define GPIO_SMIT_SMIT7 (0x1U << 7) +#define GPIO_SMIT_SMIT8 (0x1U << 8) +#define GPIO_SMIT_SMIT9 (0x1U << 9) +#define GPIO_SMIT_SMIT10 (0x1U << 10) +#define GPIO_SMIT_SMIT11 (0x1U << 11) +#define GPIO_SMIT_SMIT12 (0x1U << 12) +#define GPIO_SMIT_SMIT13 (0x1U << 13) +#define GPIO_SMIT_SMIT14 (0x1U << 14) +#define GPIO_SMIT_SMIT15 (0x1U << 15) + +/******************************** Bit definition for GPIO_CURRENT register *******************************/ +#define GPIO_CURRENT_CURRENT0_Pos (0U) +#define GPIO_CURRENT_CURRENT0_Msk (0x3U << GPIO_CURRENT_CURRENT0_Pos) +#define GPIO_CURRENT_CURRENT1_Pos (2U) +#define GPIO_CURRENT_CURRENT1_Msk (0x3U << GPIO_CURRENT_CURRENT1_Pos) +#define GPIO_CURRENT_CURRENT2_Pos (4U) +#define GPIO_CURRENT_CURRENT2_Msk (0x3U << GPIO_CURRENT_CURRENT2_Pos) +#define GPIO_CURRENT_CURRENT3_Pos (6U) +#define GPIO_CURRENT_CURRENT3_Msk (0x3U << GPIO_CURRENT_CURRENT3_Pos) +#define GPIO_CURRENT_CURRENT4_Pos (8U) +#define GPIO_CURRENT_CURRENT4_Msk (0x3U << GPIO_CURRENT_CURRENT4_Pos) +#define GPIO_CURRENT_CURRENT5_Pos (10U) +#define GPIO_CURRENT_CURRENT5_Msk (0x3U << GPIO_CURRENT_CURRENT5_Pos) +#define GPIO_CURRENT_CURRENT6_Pos (12U) +#define GPIO_CURRENT_CURRENT6_Msk (0x3U << GPIO_CURRENT_CURRENT6_Pos) +#define GPIO_CURRENT_CURRENT7_Pos (14U) +#define GPIO_CURRENT_CURRENT7_Msk (0x3U << GPIO_CURRENT_CURRENT7_Pos) +#define GPIO_CURRENT_CURRENT8_Pos (16U) +#define GPIO_CURRENT_CURRENT8_Msk (0x3U << GPIO_CURRENT_CURRENT8_Pos) +#define GPIO_CURRENT_CURRENT9_Pos (18U) +#define GPIO_CURRENT_CURRENT9_Msk (0x3U << GPIO_CURRENT_CURRENT9_Pos) +#define GPIO_CURRENT_CURRENT10_Pos (20U) +#define GPIO_CURRENT_CURRENT10_Msk (0x3U << GPIO_CURRENT_CURRENT10_Pos) +#define GPIO_CURRENT_CURRENT11_Pos (22U) +#define GPIO_CURRENT_CURRENT11_Msk (0x3U << GPIO_CURRENT_CURRENT11_Pos) +#define GPIO_CURRENT_CURRENT12_Pos (24U) +#define GPIO_CURRENT_CURRENT12_Msk (0x3U << GPIO_CURRENT_CURRENT12_Pos) +#define GPIO_CURRENT_CURRENT13_Pos (26U) +#define GPIO_CURRENT_CURRENT13_Msk (0x3U << GPIO_CURRENT_CURRENT13_Pos) +#define GPIO_CURRENT_CURRENT14_Pos (28U) +#define GPIO_CURRENT_CURRENT14_Msk (0x3U << GPIO_CURRENT_CURRENT14_Pos) +#define GPIO_CURRENT_CURRENT15_Pos (30U) +#define GPIO_CURRENT_CURRENT15_Msk (0x3U << GPIO_CURRENT_CURRENT15_Pos) + +/******************************** Bit definition for GPIO_CFGMSK register *******************************/ +#define GPIO_CFGMSK_CFGMSK0 (0x1U << 0) +#define GPIO_CFGMSK_CFGMSK1 (0x1U << 1) +#define GPIO_CFGMSK_CFGMSK2 (0x1U << 2) +#define GPIO_CFGMSK_CFGMSK3 (0x1U << 3) +#define GPIO_CFGMSK_CFGMSK4 (0x1U << 4) +#define GPIO_CFGMSK_CFGMSK5 (0x1U << 5) +#define GPIO_CFGMSK_CFGMSK6 (0x1U << 6) +#define GPIO_CFGMSK_CFGMSK7 (0x1U << 7) +#define GPIO_CFGMSK_CFGMSK8 (0x1U << 8) +#define GPIO_CFGMSK_CFGMSK9 (0x1U << 9) +#define GPIO_CFGMSK_CFGMSK10 (0x1U << 10) +#define GPIO_CFGMSK_CFGMSK11 (0x1U << 11) +#define GPIO_CFGMSK_CFGMSK12 (0x1U << 12) +#define GPIO_CFGMSK_CFGMSK13 (0x1U << 13) +#define GPIO_CFGMSK_CFGMSK14 (0x1U << 14) +#define GPIO_CFGMSK_CFGMSK15 (0x1U << 15) + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Universal Asyncronous Receiver / Transmitter (UART) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for UART_IER register ********************************/ +#define UART_IER_RDAIE (0x1U << 0) /*!< Received Data Available Interrupt Enable */ +#define UART_IER_THREIE (0x1U << 1) /*!< Transmit Holding Register Empty Interrupt Enable */ +#define UART_IER_RLSIE (0x1U << 2) /*!< Receiver Line Status Interrupt Enable */ +#define UART_IER_MSIE (0x1U << 3) /*!< Modem Status Interrupt Enable */ +#define UART_IER_LSRCLRMD (0x1U << 4) /*!< Controls the method for clearing the status in the LSR register */ +#define UART_IER_PTIME (0x1U << 7) /*!< Programmable THRE Interrupt Mode Enable */ + +/******************************** Bit definition for UART_IIR register ********************************/ +#define UART_IIR_INTID_Msk (0xFU) /*!< Interrupt ID bit mask */ +#define UART_IIR_INTID_MSI (0x0U) /*!< Modem status interrupt */ +#define UART_IIR_INTID_NONE (0x1U) /*!< No interrupt pending */ +#define UART_IIR_INTID_THRE (0x2U) /*!< Transmitter holding register empty */ +#define UART_IIR_INTID_RDA (0x4U) /*!< Received data available interrupt */ +#define UART_IIR_INTID_RLS (0x6U) /*!< Receiver line status interrupt */ +#define UART_IIR_INTID_BUSY (0x7U) /*!< Busy detect */ +#define UART_IIR_INTID_CTI (0xCU) /*!< character timeout indicator */ + +#define UART_IIR_FIFOSE_Pos (6U) +#define UART_IIR_FIFOSE_Msk (0x3U << UART_IIR_FIFOSE_Pos) + +/******************************** Bit definition for UART_FCR register ********************************/ +#define UART_FCR_FIFOE (0x1U << 0) /*!< FIFO Enable */ +#define UART_FCR_RFIFOR (0x1U << 1) /*!< RCVR FIFO Reset */ +#define UART_FCR_XFIFOR (0x1U << 2) /*!< XMIT FIFO Reset */ + +/* This is used to select the empty threshold level at which the THRE Interrupts are generated when the mode is active. */ +#define UART_FCR_TET_0 (0x0U << 4) /*!< FIFO empty */ +#define UART_FCR_TET_2 (0x1U << 4) /*!< 2 characters in the FIFO */ +#define UART_FCR_TET_4 (0x2U << 4) /*!< FIFO 1/4 full */ +#define UART_FCR_TET_8 (0x3U << 4) /*!< FIFO 1/2 full */ + +/* This is used to select the trigger level in the receiver FIFO at which the Received Data Available Interrupt is generated. */ +#define UART_FCR_RT_1 (0x0U << 6) /*!< 1 character in the FIFO */ +#define UART_FCR_RT_4 (0x1U << 6) /*!< FIFO 1/4 full */ +#define UART_FCR_RT_8 (0x2U << 6) /*!< FIFO 1/2 full */ +#define UART_FCR_RT_14 (0x3U << 6) /*!< FIFO 2 less than full */ + + +/******************************** Bit definition for UART_LCR register ********************************/ +#define UART_LCR_WLS_Msk (0x3U << 0) /*!< Word lenghth field mask bit */ +#define UART_LCR_WLS_5BIT (0x0U << 0) /*!< Word lenghth is 5 bits */ +#define UART_LCR_WLS_6BIT (0x1U << 0) /*!< Word lenghth is 6 bits */ +#define UART_LCR_WLS_7BIT (0x2U << 0) /*!< Word lenghth is 7 bits */ +#define UART_LCR_WLS_8BIT (0x3U << 0) /*!< Word lenghth is 8 bits */ + +#define UART_LCR_SBS_Msk (0x1U << 2) /*!< Stop bit select field mask bit */ +#define UART_LCR_SBS_1BIT (0x0U << 2) /*!< 1 stop bit */ +#define UART_LCR_SBS_2BIT (0x1U << 2) /*!< 2 stop bits (1.5 stop bits when data length is 5 bits) */ + +// #define UART_LCR_PE (0x1U << 3) /*!< Parity enable */ + +// #define UART_LCR_PS_Msk (0x3U << 4) /*!< Parity select field mask bit */ +// #define UART_LCR_PS_ODD (0x0U << 4) /*!< Odd parity (Sets the parity bit so that the count of bits set is an odd number) */ +// #define UART_LCR_PS_EVEN (0x1U << 4) /*!< Even parity (Sets the parity bit so that the count of bits set is an even number) */ +// #define UART_LCR_PS_MARK (0x2U << 4) /*!< Mark parity (Leaves the parity bit set to 1) */ +// #define UART_LCR_PS_SPACE (0x3U << 4) /*!< Space parity (Leaves the parity bit set to 0) */ + +#define UART_LCR_PARITY_Msk (0x7U << 3) /*!< Parity field mask bit */ +#define UART_LCR_PARITY_NONE (0x0U << 3) /*!< No parity */ +#define UART_LCR_PARITY_ODD (0x1U << 3) /*!< Odd parity (Sets the parity bit so that the count of bits set is an odd number) */ +#define UART_LCR_PARITY_EVEN (0x3U << 3) /*!< Even parity (Sets the parity bit so that the count of bits set is an even number) */ +#define UART_LCR_PARITY_MARK (0x5U << 3) /*!< Mark parity (Leaves the parity bit set to 1) */ +#define UART_LCR_PARITY_SPACE (0x7U << 3) /*!< Space parity (Leaves the parity bit set to 0) */ + + +#define UART_LCR_BC (0x1U << 6) /*!< Break Control Bit */ +#define UART_LCR_DLAB (0x1U << 7) /*!< Divisor Latch Access Bit */ + + +/******************************** Bit definition for UART_MCR register ********************************/ +#define UART_MCR_RTS (0x1U << 1) /*!< Request to Send */ +#define UART_MCR_LB (0x1U << 4) /*!< LoopBack Bit */ +#define UART_MCR_AFCE (0x1U << 5) /*!< Auto Flow Control Enable */ +#define UART_MCR_SIRE (0x1U << 6) /*!< SIR Mode Enable */ + +/******************************** Bit definition for UART_LSR register ********************************/ +#define UART_LSR_DR (0x1U << 0) /*!< Data Ready bit */ +#define UART_LSR_OE (0x1U << 1) /*!< Overrun error bit */ +#define UART_LSR_PE (0x1U << 2) /*!< Parity error bit */ +#define UART_LSR_FE (0x1U << 3) /*!< Framing error bit */ +#define UART_LSR_BI (0x1U << 4) /*!< Break Interrupt bit */ +#define UART_LSR_THRE (0x1U << 5) /*!< Transmit Holding Register Empty bit */ +#define UART_LSR_TEMT (0x1U << 6) /*!< Transmitter Empty bit */ +#define UART_LSR_RFE (0x1U << 7) /*!< Receiver FIFO Error bit */ +#define UART_LSR_ADDR_RCVD (0x1U << 8) /*!< Address Received bit */ + +/******************************** Bit definition for UART_MSR register ********************************/ +#define UART_MSR_DCTS (0x1U << 0) /*!< Delta Clear to Send */ +#define UART_MSR_CTS (0x1U << 4) /*!< Clear to Send */ + +/******************************** Bit definition for UART_USR register ********************************/ +#define UART_USR_BUSY (0x1U << 0) /*!< UART Busy */ +#define UART_USR_TFNF (0x1U << 1) /*!< Transmit FIFO Not Full */ +#define UART_USR_TFE (0x1U << 2) /*!< Transmit FIFO Empty */ +#define UART_USR_RFNE (0x1U << 3) /*!< Receive FIFO Not Empty */ +#define UART_USR_RFF (0x1U << 4) /*!< Receive FIFO Full */ + +/******************************** Bit definition for UART_TFL register ********************************/ +/******************************** Bit definition for UART_RFL register ********************************/ + +/******************************** Bit definition for UART_SRR register ********************************/ +#define UART_SRR_UR (0x1U << 0) /*!< UART Reset */ +#define UART_SRR_RFR (0x1U << 1) /*!< RCVR FIFO Reset. This is a shadow register for the RCVR FIFO Reset bit (FCR[1]). */ +#define UART_SRR_XFR (0x1U << 2) /*!< XMIT FIFO Reset. This is a shadow register for the XMIT FIFO Reset bit (FCR[2]). */ + +/******************************** Bit definition for UART_SRTS register ********************************/ +#define UART_SRTS_SRTS (0x1U << 0) /*!< Shadow Request to Send. This is a shadow register for the RTS bit (MCR[1]). */ + +/******************************** Bit definition for UART_SBCR register *******************************/ +#define UART_SBCR_SBCB (0x1U << 0) /*!< Shadow Break Control Bit. This is a shadow register for the Break bit (LCR[6]). */ + +/******************************** Bit definition for UART_SDMAM register ******************************/ +#define UART_SDMAM_SDMAM (0x1U << 0) /*!< Shadow DMA Mode. This is a shadow register for the DMA mode bit (FCR[3]). */ + +/******************************** Bit definition for UART_SFE register ********************************/ +#define UART_SFE_SFE (0x1U << 0) /*!< Shadow FIFO Enable. This is a shadow register for the FIFO enable bit (FCR[0]). */ + +/******************************** Bit definition for UART_SRT register ********************************/ +/* Shadow RCVR Trigger. This is a shadow register for the RCVR trigger bits (FCR[7:6]). */ +#define UART_SRT_LEV0 (0x0U) /*!< 1 character in the FIFO */ +#define UART_SRT_LEV1 (0x1U) /*!< FIFO 1/4 full */ +#define UART_SRT_LEV2 (0x2U) /*!< FIFO 1/2 full */ +#define UART_SRT_LEV3 (0x3U) /*!< FIFO 2 less than full */ + +/******************************** Bit definition for UART_STET register *******************************/ +/* Shadow TX Empty Trigger. This is a shadow register for the TX empty trigger bits (FCR[5:4]). */ +#define UART_STET_LEV0 (0x0U) /*!< FIFO empty */ +#define UART_STET_LEV1 (0x1U) /*!< 2 characters in the FIFO */ +#define UART_STET_LEV2 (0x2U) /*!< FIFO 1/4 full */ +#define UART_STET_LEV3 (0x3U) /*!< FIFO 1/2 full */ + +/******************************** Bit definition for UART_HTX register ********************************/ +#define UART_HTX_HTX (0x1U << 0) /*!< Halt TX */ + +/******************************** Bit definition for UART_DMASA register ******************************/ +#define UART_DMASA (0x1U << 0) /*!< DMA Software Acknowledge */ + +/******************************** Bit definition for UART_EXTLCR register ********************************/ +#define UART_EXTLCR_WLS_E (0x1U << 0) /*!< This bit is used to enable 9-bit data for transmit and receive transfers */ +#define UART_EXTLCR_ADDR_MATCH (0x1U << 1) /*!< Address Match Mode */ +#define UART_EXTLCR_SEND_ADDR (0x1U << 2) /*!< Send address control bit */ +#define UART_EXTLCR_TRANSMIT_MODE (0x1U << 3) /*!< Transmit mode control bit */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Cyclic Redundancy Check (CRC) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for CRC_MODE register ********************************/ +#define CRC_MODE_CRC_POLY_Msk (0x3U << 0) /*!< CRC polynomial field mask bit */ +#define CRC_MODE_CRC_POLY_CRC8 (0x0U << 0) /*!< CRC-8 polynomial */ +#define CRC_MODE_CRC_POLY_CCITT (0x1U << 0) /*!< CRC-CCITT polynomial */ +#define CRC_MODE_CRC_POLY_CRC16 (0x2U << 0) /*!< CRC-CRC16 polynomial */ +#define CRC_MODE_CRC_POLY_CRC32 (0x3U << 0) /*!< CRC-CRC32 polynomial */ + +#define CRC_MODE_BIT_RVS_WR (0x1U << 2) /*!< Select bit order for CRC_WR_DATA */ +#define CRC_MODE_CMPL_WR (0x1U << 3) /*!< Select one's complement for CRC_WR_DATA */ +#define CRC_MODE_BIT_RVS_SUM (0x1U << 4) /*!< Select bit order revers for CRC_SUM */ +#define CRC_MODE_CMPL_SUM (0x1U << 5) /*!< Select one's complement for CRC_SUM */ +#define CRC_MODE_SEED_OP (0x1U << 6) /*!< CRC seed option set */ +#define CRC_MODE_SEED_SET (0x1U << 7) /*!< Load seed to CRC generator */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Special Function Macro (SFM) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for SFM_CTRL register ********************************/ +#define SFM_CTRL_EXP_RATE_Msk (0x7U << 0) /*!< Bit Expand Rate field mask bit */ +#define SFM_CTRL_EXP_RATE_1 (0x0U << 0) /*!< Bit Expand Rate 1 */ +#define SFM_CTRL_EXP_RATE_2 (0x1U << 0) /*!< Bit Expand Rate 2 */ +#define SFM_CTRL_EXP_RATE_3 (0x2U << 0) /*!< Bit Expand Rate 3 */ +#define SFM_CTRL_EXP_RATE_4 (0x3U << 0) /*!< Bit Expand Rate 4 */ +#define SFM_CTRL_EXP_RATE_5 (0x4U << 0) /*!< Bit Expand Rate 5 */ +#define SFM_CTRL_EXP_RATE_6 (0x5U << 0) /*!< Bit Expand Rate 6 */ +#define SFM_CTRL_EXP_RATE_7 (0x6U << 0) /*!< Bit Expand Rate 7 */ +#define SFM_CTRL_EXP_RATE_8 (0x7U << 0) /*!< Bit Expand Rate 8 */ + +#define SFM_CTRL_EXP_EN (0x1U << 3) /*!< Bit Expand Function Enable Bit */ + +/******************************** Bit definition for SFM_USBPSDCSR register ********************************/ +#define SFM_USBPSDCSR_SE0F (0x1U << 0) /*!< No description */ +#define SFM_USBPSDCSR_JSTATF (0x1U << 1) /*!< No description */ +#define SFM_USBPSDCSR_KSTATF (0x1U << 2) /*!< No description */ +#define SFM_USBPSDCSR_SE1F (0x1U << 3) /*!< No description */ + +#define SFM_USBPSDCSR_SE0EN (0x1U << 8) /*!< No description */ +#define SFM_USBPSDCSR_JSTATEN (0x1U << 9) /*!< No description */ +#define SFM_USBPSDCSR_KSTATEN (0x1U << 10) /*!< No description */ +#define SFM_USBPSDCSR_SE1EN (0x1U << 11) /*!< No description */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Direct Memory Access Controller (DMAC) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************* Bit definition for DMAC_CTLLx register *******************************/ +#define DMAC_CTLL_INT_EN (0x1U << 0) /*!< Interrupt Enable Bit */ + +#define DMAC_CTLL_DST_TR_WIDTH_Msk (0x7U << 1) /*!< Destination Transfer Width field mask bit */ +#define DMAC_CTLL_DST_TR_WIDTH_8 (0x0U << 1) /*!< Destination Transfer Width is 8 bits */ +#define DMAC_CTLL_DST_TR_WIDTH_16 (0x1U << 1) /*!< Destination Transfer Width is 16 bits */ +#define DMAC_CTLL_DST_TR_WIDTH_32 (0x2U << 1) /*!< Destination Transfer Width is 32 bits */ + +#define DMAC_CTLL_SRC_TR_WIDTH_Msk (0x7U << 4) /*!< Source Transfer Width field mask bit*/ +#define DMAC_CTLL_SRC_TR_WIDTH_8 (0x0U << 4) /*!< Source Transfer Width is 8 bits */ +#define DMAC_CTLL_SRC_TR_WIDTH_16 (0x1U << 4) /*!< Source Transfer Width is 16 bits */ +#define DMAC_CTLL_SRC_TR_WIDTH_32 (0x2U << 4) /*!< Source Transfer Width is 32 bits */ + +#define DMAC_CTLL_DINC_Msk (0x3U << 7) /*!< Destination Address Increment field mask bit */ +#define DMAC_CTLL_DINC_INC (0x0U << 7) /*!< Destination Address Increment is increment */ +#define DMAC_CTLL_DINC_DEC (0x1U << 7) /*!< Destination Address Increment is decrement */ +#define DMAC_CTLL_DINC_NO (0x2U << 7) /*!< Destination Address Increment is no change */ + +#define DMAC_CTLL_SINC_Msk (0x3U << 9) /*!< Source Address Increment field mask bit */ +#define DMAC_CTLL_SINC_INC (0x0U << 9) /*!< Source Address Increment is increment */ +#define DMAC_CTLL_SINC_DEC (0x1U << 9) /*!< Source Address Increment is decrement */ +#define DMAC_CTLL_SINC_NO (0x2U << 9) /*!< Source Address Increment is no change */ + +#define DMAC_CTLL_DEST_MSIZE_Msk (0x7U << 11) /*!< Destination Burst Transaction Length field mask bit */ +#define DMAC_CTLL_DEST_MSIZE_1 (0x0U << 11) /*!< Destination Burst Transaction Length */ +#define DMAC_CTLL_DEST_MSIZE_4 (0x1U << 11) /*!< Destination Burst Transaction Length */ +#define DMAC_CTLL_DEST_MSIZE_8 (0x2U << 11) /*!< Destination Burst Transaction Length */ +#define DMAC_CTLL_DEST_MSIZE_16 (0x3U << 11) /*!< Destination Burst Transaction Length */ +#define DMAC_CTLL_DEST_MSIZE_32 (0x4U << 11) /*!< Destination Burst Transaction Length */ +#define DMAC_CTLL_DEST_MSIZE_64 (0x5U << 11) /*!< Destination Burst Transaction Length */ +#define DMAC_CTLL_DEST_MSIZE_128 (0x6U << 11) /*!< Destination Burst Transaction Length */ +#define DMAC_CTLL_DEST_MSIZE_256 (0x7U << 11) /*!< Destination Burst Transaction Length */ + +#define DMAC_CTLL_SRC_MSIZE_Msk (0x7U << 14) /*!< Source Burst Transaction Length field mask bit */ +#define DMAC_CTLL_SRC_MSIZE_1 (0x0U << 14) /*!< Source Burst Transaction Length */ +#define DMAC_CTLL_SRC_MSIZE_4 (0x1U << 14) /*!< Source Burst Transaction Length */ +#define DMAC_CTLL_SRC_MSIZE_8 (0x2U << 14) /*!< Source Burst Transaction Length */ +#define DMAC_CTLL_SRC_MSIZE_16 (0x3U << 14) /*!< Source Burst Transaction Length */ +#define DMAC_CTLL_SRC_MSIZE_32 (0x4U << 14) /*!< Source Burst Transaction Length */ +#define DMAC_CTLL_SRC_MSIZE_64 (0x5U << 14) /*!< Source Burst Transaction Length */ +#define DMAC_CTLL_SRC_MSIZE_128 (0x6U << 14) /*!< Source Burst Transaction Length */ +#define DMAC_CTLL_SRC_MSIZE_256 (0x7U << 14) /*!< Source Burst Transaction Length */ + +#define DMAC_CTLL_SRC_GATHER_EN (0x1U << 17) /*!< Source gather enable bit */ +#define DMAC_CTLL_DST_SCATTER_EN (0x1U << 18) /*!< Destination scatter enable bit */ + +#define DMAC_CTLL_TT_FC_Msk (0x7U << 20) /*!< Transfer Type and Flow Control field mask bit */ +#define DMAC_CTLL_TT_FC_M2M_DMAC (0x0U << 20) /*!< Transfer Type is Memory to Memory, Flow Control is DMAC */ +#define DMAC_CTLL_TT_FC_M2P_DMAC (0x1U << 20) /*!< Transfer Type is Memory to Peripheral, Flow Control is DMAC */ +#define DMAC_CTLL_TT_FC_P2M_DMAC (0x2U << 20) /*!< Transfer Type is Peripheral to Memory, Flow Control is DMAC */ +#define DMAC_CTLL_TT_FC_P2P_DMAC (0x3U << 20) /*!< Transfer Type is Peripheral to Peripheral, Flow Control is DMAC */ +#define DMAC_CTLL_TT_FC_P2M_PERIPH (0x4U << 20) /*!< Transfer Type is Peripheral to Memory, Flow Control is Peripheral */ +#define DMAC_CTLL_TT_FC_P2P_SRC_PERIPH (0x5U << 20) /*!< Transfer Type is Peripheral to Peripheral, Flow Control is Source Peripheral */ +#define DMAC_CTLL_TT_FC_M2P_PERIPH (0x6U << 20) /*!< Transfer Type is Memory to Peripheral, Flow Control is Peripheral */ +#define DMAC_CTLL_TT_FC_P2P_DST_PERIPH (0x7U << 20) /*!< Transfer Type is Peripheral to Peripheral, Flow Control is Destination Peripheral */ + +#define DMAC_CTLL_LLP_DST_EN (0x1U << 27) /*!< Source Burst Transaction Length */ +#define DMAC_CTLL_LLP_SRC_EN (0x1U << 28) /*!< Block chaining is enabled on the source side */ + +/******************************* Bit definition for DMAC_CTLHx register *******************************/ +#define DMAC_CTLH_BLOCK_TS_Msk (0xFFFU) /*!< Block Transfer Size field mask bit */ +#define DMAC_CTLH_DONE (0x1U << 12) /*!< Done bit */ + + +/******************************* Bit definition for DMAC_CFGLx register *******************************/ +#define DMAC_CFGL_CH_PRIOR_Msk (0x7U << 5) /*!< Channel priority field mask */ +#define DMAC_CFGL_CH_SUSP (0x1U << 8) /*!< Channel Suspend */ +#define DMAC_CFGL_FIFO_EMPTY (0x1U << 9) /*!< Indicates if there is data left in the channel FIFO */ +#define DMAC_CFGL_HS_SEL_DST (0x1U << 10) /*!< Destination Software or Hardware Handshaking Select */ +#define DMAC_CFGL_HS_SEL_SRC (0x1U << 11) /*!< Source Software or Hardware Handshaking Select */ + +#define DMAC_CFGL_DST_HS_POL (0x1U << 18) /*!< Destination Handshaking Interface Polarity */ +#define DMAC_CFGL_SRC_HS_POL (0x1U << 19) /*!< Source Handshaking Interface Polarity */ + +#define DMAC_CFGL_RELOAD_SRC (0x1U << 30) /*!< Automatic Source Reload */ +#define DMAC_CFGL_RELOAD_DST (0x1U << 31) /*!< Automatic Destination Reload */ + +/******************************* Bit definition for DMAC_CFGHx register *******************************/ + +#define DMAC_CFGH_FIFO_MODE (0x1U << 1) /*!< FIFO Mode Select */ +#define DMAC_CFGH_DS_UPD_EN (0x1U << 5) /*!< Destination Status Update Enable */ +#define DMAC_CFGH_SS_UPD_EN (0x1U << 6) /*!< Source Status Update Enable */ + +#define DMAC_CFGH_SRC_PER_Msk (0xFU << 7) /*!< No description */ +#define DMAC_CFGH_DEST_PER_Msk (0xFU << 11) /*!< No description */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Inter-Integrated Circuit (I2C) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/****************************** Bit definition for I2C_CON register *******************************/ +#define I2C_CON_MASTER_MODE (0x1U << 0) /*!< This bit controls whether the i2c master is enable */ + +#define I2C_CON_SPEED_Msk (0x3U << 1) /*!< SPEED field mask bit */ +#define I2C_CON_SPEED_STANDARD (0x1U << 1) /*!< standard mode (0 to 100 Kb/s) */ +#define I2C_CON_SPEED_FAST (0x2U << 1) /*!< fast mode (≤ 400 Kb/s) or fast mode plus (≤ 1000 Kb/s) */ +#define I2C_CON_SPEED_HIGH (0x3U << 1) /*!< high speed mode (≤ 3.4 Mb/s) */ + +#define I2C_CON_10BITADDR_SLAVE (0x1U << 3) /*!< When acting as a slave, this bit controls i2c responds to 10-bit addresses. */ +#define I2C_CON_10BITADDR_MASTER (0x1U << 4) /*!< XXX */ +#define I2C_CON_RESTART_EN (0x1U << 5) /*!< Determines whether RESTART conditions may be sent when acting as a master. */ +#define I2C_CON_SLAVE_DISABLE (0x1U << 6) /*!< This bit controls whether I2C has its slave disabled */ +#define I2C_CON_STOP_DET_IFADDRESSED (0x1U << 7) /*!< XXX */ +#define I2C_CON_TX_EMPTY_CTRL (0x1U << 8) /*!< This bit controls the generation of the TX_EMPTY interrupt */ +#define I2C_CON_RX_FIFO_FULL_HLD_CTRL (0x1U << 9) /*!< This bit controls whether i2c should hold the bus when the Rx FIFO is physically full to its RX_BUFFER_DEPTH */ +#define I2C_CON_STOP_DET_IF_MASTER_ACTIVE (0x1U << 10) /*!< XXX */ +#define I2C_CON_BUS_CLEAR_FEATURE_CTRL (0x1U << 11) /*!< XXX */ +#define I2C_CON_OPTIONAL_SAR_CTRL (0x1U << 16) /*!< Enables the usage of OPTIONAL_SAR register */ +#define I2C_CON_SMBUS_SLAVE_QUICK_EN (0x1U << 17) /*!< XXX */ +#define I2C_CON_SMBUS_ARP_EN (0x1U << 18) /*!< This bit controls whether i2c should enable Address Resolution Logic in SMBus Mode */ +#define I2C_CON_SMBUS_PERSISTANT_SLV_ADDR_EN (0x1U << 19) /*!< This bit controls to enable i2c slave as persistent or non-persistent slave */ + +/****************************** Bit definition for I2C_TAR register *******************************/ +#define I2C_TAR_TAR_Msk (0x3FFU) /*!< target address field mask bit */ +#define I2C_TAR_GC_OR_START (0x1U << 10) /*!< this bit indicates whether a General Call or START byte command is to be performed by the i2c. */ +#define I2C_TAR_SPECIAL (0x1U << 11) /*!< This bit indicates whether software performs a Device-ID, General Call or START BYTE command. */ +#define I2C_TAR_10BITADDR_MASTER (0x1U << 12) /*!< This bit controls whether the i2c starts its transfers in 7-or 10-bit addressing mode when acting as a master. */ +#define I2C_TAR_DEVICE_ID (0x1U << 13) /*!< If bit 11 (SPECIAL) is set to 1, then this bit indicates whether a Device-ID of a particular slave mentioned in TAR[6:0] is to be performed by the i2c Master. */ +#define I2C_TAR_SMBUS_QUICK_CMD (0x1U << 16) /*!< If bit 11 (SPECIAL) is set to 1, then this bit indicates whether a Quick command is to be performed by the i2c. */ + +/****************************** Bit definition for I2C_SAR register *******************************/ +/****************************** Bit definition for I2C_HS_MADDR register *******************************/ + +/****************************** Bit definition for I2C_DATA_CMD register *******************************/ +#define I2C_DATA_CMD_DAT_Msk (0xFFU) /*!< DAT field mask bit */ + +#define I2C_DATA_CMD_READ (0x1U << 8) /*!< This bit controls whether a read or a write is performed */ +#define I2C_DATA_CMD_STOP (0x1U << 9) /*!< This bit controls whether a STOP is issued after the byte is sent or received */ +#define I2C_DATA_CMD_RESTART (0x1U << 10) /*!< This bit controls whether a RESTART is issued before the byte is sent or received */ +#define I2C_DATA_CMD_FIRST_DATA_BYTE (0x1U << 11) /*!< Indicates the first data byte received after the address phase for receive transfer in Master receiver or Slave receiver mode */ + +/****************************** Bit definition for I2C_SS_SCL_HCNT register *******************************/ +/****************************** Bit definition for I2C_SS_SCL_LCNT register *******************************/ +/****************************** Bit definition for I2C_FS_SCL_HCNT register *******************************/ +/****************************** Bit definition for I2C_FS_SCL_LCNT register *******************************/ +/****************************** Bit definition for I2C_HS_SCL_HCNT register *******************************/ +/****************************** Bit definition for I2C_HS_SCL_LCNT register *******************************/ + +/****************************** Bit definition for I2C_INTR_STAT register *******************************/ +/****************************** Bit definition for I2C_INTR_MASK register *******************************/ +/****************************** Bit definition for I2C_RAW_INTR_STAT register *******************************/ +#define I2C_INTR_RX_UNDER (0x1U << 0) /*!< Set if the processor attempts to read the receive buffer when it is empty by reading from the DATA_CMD register */ +#define I2C_INTR_RX_OVER (0x1U << 1) /*!< Set if the receive buffer is completely filled to RX_BUFFER_DEPTH and an additional byte is received from an external I2C device */ +#define I2C_INTR_RX_FULL (0x1U << 2) /*!< Set when the receive buffer reaches or goes above the RX_TL threshold in the RX_TL register */ +#define I2C_INTR_TX_OVER (0x1U << 3) /*!< Set during transmit if the transmit buffer is filled to TX_BUFFER_DEPTH and the processor attempts to issue another I2C command by writing to the DATA_CMD register */ +#define I2C_INTR_TX_EMPTY (0x1U << 4) /*!< The behavior of the TX_EMPTY interrupt status differs based on the TX_EMPTY_CTRL selection in the CON register */ +#define I2C_INTR_RD_REQ (0x1U << 5) /*!< This bit is set to 1 when DW_apb_i2c is acting as a slave and another I2C master is attempting to read data from DW_apb_i2c */ +#define I2C_INTR_TX_ABRT (0x1U << 6) /*!< This bit indicates if DW_apb_i2c, as an I2C transmitter, is unable to complete the intended actions on the contents of the transmit FIFO */ +#define I2C_INTR_RX_DONE (0x1U << 7) /*!< When the DW_apb_i2c is acting as a slave-transmitter, this bit is set to 1 if the master does not acknowledge a transmitted byte */ +#define I2C_INTR_ACTIVITY (0x1U << 8) /*!< This bit captures DW_apb_i2c activity and stays set until it is cleared */ +#define I2C_INTR_STOP_DET (0x1U << 9) /*!< Indicates whether a STOP condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode */ +#define I2C_INTR_START_DET (0x1U << 10) /*!< Indicates whether a STOP condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode */ +#define I2C_INTR_GEN_CALL (0x1U << 11) /*!< Indicates whether a START or RESTART condition has occurred on the I2C interface regardless of whether DW_apb_i2c is operating in slave or master mode */ +#define I2C_INTR_RESTART_DET (0x1U << 12) /*!< Indicates whether a RESTART condition has occurred on the I2C interface when DW_apb_i2c is operating in slave mode and the slave is the addressed slave */ +#define I2C_INTR_SCL_STUCK_AT_LOW (0x1U << 14) /*!< Indicates whether the SCL Line is stuck at low for the SCL_STUCK_LOW_TIMOUT number of clk periods */ + + +/****************************** Bit definition for I2C_RX_TL register *******************************/ +/****************************** Bit definition for I2C_TX_TL register *******************************/ +/****************************** Bit definition for I2C_CLR_INTR register *******************************/ +/****************************** Bit definition for I2C_CLR_RX_UNDERT register *******************************/ +/****************************** Bit definition for I2C_CLR_RX_OVER register *******************************/ +/****************************** Bit definition for I2C_CLR_TX_OVER register *******************************/ +/****************************** Bit definition for I2C_CLR_RD_REQ register *******************************/ +/****************************** Bit definition for I2C_CLR_TX_ABRT register *******************************/ +/****************************** Bit definition for I2C_CLR_RX_DONE register *******************************/ +/****************************** Bit definition for I2C_CLR_ACTIVITY register *******************************/ +/****************************** Bit definition for I2C_CLR_STOP_DET register *******************************/ +/****************************** Bit definition for I2C_CLR_START_DET register *******************************/ +/****************************** Bit definition for I2C_CLR_GEN_CALL register *******************************/ + +/****************************** Bit definition for I2C_ENABLE register *******************************/ +#define I2C_ENABLE_ENABLE (0x1U << 0) /*!< Controls whether the DW_apb_i2c is enabled */ +#define I2C_ENABLE_ABORT (0x1U << 1) /*!< XXX */ +#define I2C_ENABLE_TX_CMD_BLOCK (0x1U << 2) /*!< XXX */ +#define I2C_ENABLE_SDA_STUCK_RECOVERY_ENA (0x1U << 3) /*!< XXX */ +#define I2C_ENABLE_SMBUS_CLK_RESET (0x1U << 16) /*!< This bit is used in SMBus Host mode to initiate the SMBus Master Clock Reset */ +#define I2C_ENABLE_SMBUS_SUSPEND_EN (0x1U << 17) /*!< The SMBUS_SUSPEND_EN register bit is used to control assertion and de-assertion of SMBSUS signal */ +#define I2C_ENABLE_SMBUS_ALERT_EN (0x1U << 18) /*!< The SMBUS_ALERT_CTRL register bit is used to control assertion of SMBALERT signal */ + +/****************************** Bit definition for I2C_STATUS register *******************************/ +#define I2C_STATUS_ACTIVITY (0x1U << 0) /*!< I2C Activity Status */ +#define I2C_STATUS_TFNF (0x1U << 1) /*!< Transmit FIFO Not Full */ +#define I2C_STATUS_TFE (0x1U << 2) /*!< Transmit FIFO Completely Empty */ +#define I2C_STATUS_RFNE (0x1U << 3) /*!< Receive FIFO Not Empty */ +#define I2C_STATUS_RFF (0x1U << 4) /*!< Receive FIFO Completely Full */ +#define I2C_STATUS_MST_ACTIVITY (0x1U << 5) /*!< Master FSM Activity Status */ +#define I2C_STATUS_SLV_ACTIVITY (0x1U << 6) /*!< Slave FSM Activity Status */ +#define I2C_STATUS_MST_HOLD_TX_FIFO_EMPTY (0x1U << 7) /*!< XXX */ +#define I2C_STATUS_MST_HOLD_RX_FIFO_FULL (0x1U << 8) /*!< XXX */ +#define I2C_STATUS_SLV_HOLD_TX_FIFO_EMPTY (0x1U << 9) /*!< XXX */ +#define I2C_STATUS_SLV_HOLD_RX_FIFO_FULL (0x1U << 10) /*!< XXX */ +#define I2C_STATUS_SDA_STUCK_NOT_RECOVERED (0x1U << 11) /*!< XXX */ +#define I2C_STATUS_SMBUS_QUICK_CMD_BIT (0x1U << 16) /*!< XXX */ +#define I2C_STATUS_SMBUS_SLAVE_ADDR_VALID (0x1U << 17) /*!< This bit indicates whether the SMBus Slave address (sar[6:0]) is valid or not */ +#define I2C_STATUS_SMBUS_SLAVE_ADDR_RESOLVED (0x1U << 18) /*!< This bit indicates whether the SMBus Slave address (sar[6:0]) is Resolved by ARP Master */ +#define I2C_STATUS_SMBUS_SUSPEND_STATUS (0x1U << 19) /*!< This bit indicates whether the status of the input signal is smbus_sus_in_n */ +#define I2C_STATUS_SMBUS_ALERT_STATUS (0x1U << 20) /*!< This bit indicates whether the status of the input signal is smbus_alert_in_n */ + +/****************************** Bit definition for I2C_TXFLR register *******************************/ +/****************************** Bit definition for I2C_RXFLR register *******************************/ +/****************************** Bit definition for I2C_SDA_HOLD register *******************************/ + +/****************************** Bit definition for I2C_TX_ABRT_SOURCE *******************************/ +#define I2C_TX_ABRT_SOURCE_7B_ADDR_NOACK (0x1U << 0) /*!< Master is in 7-bit addressing mode and the address sent was not acknowledged by any slave */ +#define I2C_TX_ABRT_SOURCE_10ADDR1_NOACK (0x1U << 1) /*!< Master is in 10-bit address mode and the first 10-bit address byte was not acknowledged by any slave. */ +#define I2C_TX_ABRT_SOURCE_10ADDR2_NOACK (0x1U << 2) /*!< Master is in 10-bit address mode and the second address byte of the 10-bit address was not acknowledged by any slave */ +#define I2C_TX_ABRT_SOURCE_TXDATA_NOACK (0x1U << 3) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_GCALL_NOACK (0x1U << 4) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_GCALL_READ (0x1U << 5) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_HS_ACKDET (0x1U << 6) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_SBYTE_ACKDET (0x1U << 7) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_HS_NORSTRT (0x1U << 8) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_SBYTE_NORSTRT (0x1U << 9) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_10B_RD_NORSTRT (0x1U << 10) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_MASTER_DIS (0x1U << 11) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_LOST (0x1U << 12) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_SLVFLUSH_TXFIFO (0x1U << 13) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_SLV_ARBLOST (0x1U << 14) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_SLVRD_INTX (0x1U << 15) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_USER_ABRT (0x1U << 16) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_SDA_STUCK_AT_LOW (0x1U << 17) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_DEVICE_NOACK (0x1U << 18) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_DEVICE_SLVADDR_NOACK (0x1U << 19) /*!< XXX */ +#define I2C_TX_ABRT_SOURCE_DEVICE_WRITE (0x1U << 20) /*!< XXX */ + +#define I2C_TX_ABRT_SOURCE_TX_FLUSH_CNT_Msk (0xFF800000U) /*!< XXX */ + +/****************************** Bit definition for I2C_SLV_DATA_NACK_ONLY register *******************************/ +#define I2C_SLV_DATA_NACK_ONLY_NACK (0x1U << 0) /*!< XXX */ + +/****************************** Bit definition for I2C_DMA_CR register *******************************/ +#define I2C_DMA_CR_RDMAE (0x1U << 0) /*!< XXX */ +#define I2C_DMA_CR_TDMAE (0x1U << 1) /*!< XXX */ + +/****************************** Bit definition for I2C_DMA_TDLR register *******************************/ +/****************************** Bit definition for I2C_DMA_RDLR register *******************************/ +/****************************** Bit definition for I2C_SDA_SETUP register *******************************/ +/****************************** Bit definition for I2C_ACK_GENERAL_CALL register *******************************/ + +/****************************** Bit definition for I2C_ENABLE_STATUS register *******************************/ +#define I2C_ENABLE_STATUS_IC_EN (0x1U << 0) /*!< XXX */ +#define I2C_ENABLE_STATUS_SLV_DISABLED_WHILE_BUSY (0x1U << 1) /*!< XXX */ +#define I2C_ENABLE_STATUS_SLV_RX_DATA_LOST (0x1U << 2) /*!< XXX */ + +/****************************** Bit definition for FS_SPKLEN register *******************************/ +/****************************** Bit definition for HS_SPKLEN register *******************************/ +/****************************** Bit definition for CLR_RESTART_DET register *******************************/ +/****************************** Bit definition for SCL_STUCK_AT_LOW_TIMEOUT register *******************************/ +/****************************** Bit definition for SDA_STUCK_AT_LOW_TIMEOUT register *******************************/ +/****************************** Bit definition for CLR_SCL_STUCK_DET register *******************************/ +/****************************** Bit definition for SMBUS_CLK_LOW_SEXT register *******************************/ +/****************************** Bit definition for SMBUS_CLK_LOW_MEXT register *******************************/ +/****************************** Bit definition for SMBUS_THIGH_MAX_IDLE_COUNT register *******************************/ +/****************************** Bit definition for SMBUS_INTR_STAT register *******************************/ +/****************************** Bit definition for SMBUS_INTR_MASK register *******************************/ +/****************************** Bit definition for SMBUS_RAW_INTR_STAT register *******************************/ +#define I2C_SMBUS_INTR_SLV_CLOCK_EXTND_TIMEOUT (0x1U << 0) /*!< XXX */ +#define I2C_SMBUS_INTR_MST_CLOCK_EXTND_TIMEOUT (0x1U << 1) /*!< XXX */ +#define I2C_SMBUS_INTR_QUICK_CMD_DET (0x1U << 2) /*!< XXX */ +#define I2C_SMBUS_INTR_HOST_NTFY_MST_DET (0x1U << 3) /*!< XXX */ +#define I2C_SMBUS_INTR_ARP_PREPARE_CMD_DET (0x1U << 4) /*!< XXX */ +#define I2C_SMBUS_INTR_ARP_RST_CMD_DET (0x1U << 5) /*!< XXX */ +#define I2C_SMBUS_INTR_ARP_GET_UDID_CMD_DET (0x1U << 6) /*!< XXX */ +#define I2C_SMBUS_INTR_ARP_ASSGN_ADDR_CMD_DET (0x1U << 7) /*!< XXX */ +#define I2C_SMBUS_INTR_SLV_RX_PEC_NACK (0x1U << 8) /*!< XXX */ +#define I2C_SMBUS_INTR_SMBUS_SUSPEND_DET (0x1U << 9) /*!< XXX */ +#define I2C_SMBUS_INTR_SMBUS_ALERT_DET (0x1U << 10) /*!< XXX */ + +/****************************** Bit definition for CLR_SMBUS_INTR register *******************************/ +/****************************** Bit definition for OPTIONAL_SAR register *******************************/ +/****************************** Bit definition for SMBUS_UDID_LSB register *******************************/ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Serial Peripheral Interface (SPI) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/****************************** Bit definition for SPI_CR0 register *******************************/ +#define SPI_CR0_DFS_Msk (0xFU << 0) /*!< Data Frame Size field mask */ +#define SPI_CR0_DFS_4BITS (0x3U << 0) /*!< 4-bit serial data transfer */ +#define SPI_CR0_DFS_5BITS (0x4U << 0) /*!< 5-bit serial data transfer */ +#define SPI_CR0_DFS_6BITS (0x5U << 0) /*!< 6-bit serial data transfer */ +#define SPI_CR0_DFS_7BITS (0x6U << 0) /*!< 7-bit serial data transfer */ +#define SPI_CR0_DFS_8BITS (0x7U << 0) /*!< 8-bit serial data transfer */ +#define SPI_CR0_DFS_9BITS (0x8U << 0) /*!< 9-bit serial data transfer */ +#define SPI_CR0_DFS_10BITS (0x9U << 0) /*!< 10-bit serial data transfer */ +#define SPI_CR0_DFS_11BITS (0xAU << 0) /*!< 11-bit serial data transfer */ +#define SPI_CR0_DFS_12BITS (0xBU << 0) /*!< 12-bit serial data transfer */ +#define SPI_CR0_DFS_13BITS (0xCU << 0) /*!< 13-bit serial data transfer */ +#define SPI_CR0_DFS_14BITS (0xDU << 0) /*!< 14-bit serial data transfer */ +#define SPI_CR0_DFS_15BITS (0xEU << 0) /*!< 15-bit serial data transfer */ +#define SPI_CR0_DFS_16BITS (0xFU << 0) /*!< 16-bit serial data transfer */ + +#define SPI_CR0_FRF_Msk (0x3U << 4) /*!< Frame Format field mask */ +#define SPI_CR0_FRF_SPI (0x0U << 4) /*!< Motorolla SPI Frame Format */ +#define SPI_CR0_FRF_SSP (0x1U << 4) /*!< Texas Instruments SSP Frame Format */ +#define SPI_CR0_FRF_NS (0x2U << 4) /*!< National Microwire Frame Format */ + +#define SPI_CR0_CPHA (0x1U << 6) /*!< Serial Clock Phase */ +#define SPI_CR0_CPOL (0x1U << 7) /*!< Serial Clock Polarity */ + +#define SPI_CR0_TMOD_Msk (0x3U << 8) /*!< Transfer Mode field mask */ +#define SPI_CR0_TMOD_TX_AND_RX (0x0U << 8) /*!< Transfer & receive */ +#define SPI_CR0_TMOD_TX_ONLY (0x1U << 8) /*!< Transmit only mode */ +#define SPI_CR0_TMOD_RX_ONLY (0x2U << 8) /*!< Receive only mode */ +#define SPI_CR0_TMOD_EEPROM_READ (0x3U << 8) /*!< EEPROM Read mode */ + +#define SPI_CR0_SLV_OE (0x1U << 10) /*!< Slave Output Enable */ +#define SPI_CR0_SRL (0x1U << 11) /*!< Shift Register Loop */ + +#define SPI_CR0_CFS_Msk (0xFU << 12) /*!< Control Frame Size field mask */ +#define SPI_CR0_CFS_01_BIT (0x0U << 12) /*!< 1-bit Control Word */ +#define SPI_CR0_CFS_02_BIT (0x1U << 12) /*!< 2-bit Control Word */ +#define SPI_CR0_CFS_03_BIT (0x2U << 12) /*!< 3-bit Control Word */ +#define SPI_CR0_CFS_04_BIT (0x3U << 12) /*!< 4-bit Control Word */ +#define SPI_CR0_CFS_05_BIT (0x4U << 12) /*!< 5-bit Control Word */ +#define SPI_CR0_CFS_06_BIT (0x5U << 12) /*!< 6-bit Control Word */ +#define SPI_CR0_CFS_07_BIT (0x6U << 12) /*!< 7-bit Control Word */ +#define SPI_CR0_CFS_08_BIT (0x7U << 12) /*!< 8-bit Control Word */ +#define SPI_CR0_CFS_09_BIT (0x8U << 12) /*!< 9-bit Control Word */ +#define SPI_CR0_CFS_10_BIT (0x9U << 12) /*!< 10-bit Control Word */ +#define SPI_CR0_CFS_11_BIT (0xAU << 12) /*!< 11-bit Control Word */ +#define SPI_CR0_CFS_12_BIT (0xBU << 12) /*!< 12-bit Control Word */ +#define SPI_CR0_CFS_13_BIT (0xCU << 12) /*!< 13-bit Control Word */ +#define SPI_CR0_CFS_14_BIT (0xDU << 12) /*!< 14-bit Control Word */ +#define SPI_CR0_CFS_15_BIT (0xEU << 12) /*!< 15-bit Control Word */ +#define SPI_CR0_CFS_16_BIT (0xFU << 12) /*!< 16-bit Control Word */ + +#define SPI_CR0_SPI_MODE_Msk (0x3U << 21) /*!< SPI Mode field mask */ +#define SPI_CR0_SPI_MODE_STD (0x0U << 21) /*!< Standard SPI Mode */ +#define SPI_CR0_SPI_MODE_DUAL (0x1U << 21) /*!< Dual SPI Mode */ +#define SPI_CR0_SPI_MODE_QUAD (0x2U << 21) /*!< Quad SPI Mode */ +#define SPI_CR0_SPI_MODE_OCTAL (0x3U << 21) /*!< Octal SPI Mode */ + +#define SPI_CR0_SSTE (0x1U << 24) /*!< Slave Select Toggle Enable */ + +/****************************** Bit definition for SPI_CR1 register *******************************/ +#define SPI_CR1_NDF_Msk (0xFFFFU) /*!< Number of Data Frames field mask */ + +/****************************** Bit definition for SPI_SPIENR register *******************************/ +#define SPI_SPIENR_SPI_EN (0x1U << 0) /*!< SPI Enable */ + +/****************************** Bit definition for SPI_MWCR register *******************************/ +#define SPI_MWCR_MWMOD (0x1U << 0) /*!< Microwire Transfer Mode */ +#define SPI_MWCR_MDD (0x1U << 1) /*!< Microwire Control */ +#define SPI_MWCR_MHS (0x1U << 2) /*!< Microwire Handshaking */ + +/****************************** Bit definition for SPI_SER register *******************************/ +#define SPI_SER_Msk (0x7U << 0) /*!< Slave Select Enable Flag field mask */ +#define SPI_SER_SE0 (0x1U << 0) /*!< Slave 0 Select Enable Flag */ +#define SPI_SER_SE1 (0x1U << 1) /*!< Slave 1 Select Enable Flag */ +#define SPI_SER_SE2 (0x1U << 2) /*!< Slave 2 Select Enable Flag */ + +/****************************** Bit definition for SPI_BAUDR register *******************************/ +#define SPI_BAUDR_SCKDV_Msk (0xFFFFU) /*!< SPI Clock Divider field mask */ + +/****************************** Bit definition for SPI_TXFTLR register *******************************/ + +/****************************** Bit definition for SPI_RXFTLR register *******************************/ + +/****************************** Bit definition for SPI_TXFLR register *******************************/ + +/****************************** Bit definition for SPI_RXFLR register *******************************/ + +/****************************** Bit definition for SPI_SR register *******************************/ +#define SPI_SR_BUSY (0x1U << 0) /*!< SPI Busy Flag */ +#define SPI_SR_TFNF (0x1U << 1) /*!< Transmit FIFO Not Full */ +#define SPI_SR_TFE (0x1U << 2) /*!< Transmit FIFO Empty */ +#define SPI_SR_RFNE (0x1U << 3) /*!< Receive FIFO Not Empty */ +#define SPI_SR_RFF (0x1U << 4) /*!< Receive FIFO Full */ +#define SPI_SR_TXERR (0x1U << 5) /*!< Transmission Error */ +#define SPI_SR_DCOL (0x1U << 6) /*!< Data Collision Error */ + +/****************************** Bit definition for SPI_IER register *******************************/ +#define SPI_IER_TXEIE (0x1U << 0) /*!< Transmit FIFO Empty Interrupt Enable */ +#define SPI_IER_TXOIE (0x1U << 1) /*!< Transmit FIFO Overflow Interrupt Enable */ +#define SPI_IER_RXUIE (0x1U << 2) /*!< Receive FIFO Underflow Interrupt Enable */ +#define SPI_IER_RXOIE (0x1U << 3) /*!< Receive FIFO Overflow Interrupt Enable */ +#define SPI_IER_RXFIE (0x1U << 4) /*!< Receive FIFO Full Interrupt Enable */ +#define SPI_IER_MSTIE (0x1U << 5) /*!< Multi-Master Contention Interrupt Enable */ + +/****************************** Bit definition for SPI_ISR register *******************************/ +#define SPI_ISR_TXEIS (0x1U << 0) /*!< Transmit FIFO Empty Interrupt Status */ +#define SPI_ISR_TXOIS (0x1U << 1) /*!< Transmit FIFO Overflow Interrupt Status */ +#define SPI_ISR_RXUIS (0x1U << 2) /*!< Receive FIFO Underflow Interrupt Status */ +#define SPI_ISR_RXOIS (0x1U << 3) /*!< Receive FIFO Overflow Interrupt Status */ +#define SPI_ISR_RXFIS (0x1U << 4) /*!< Receive FIFO Full Interrupt Status */ +#define SPI_ISR_MSTIS (0x1U << 5) /*!< Multi-Master Contention Interrupt Status */ + +/****************************** Bit definition for SPI_RISR register *******************************/ +#define SPI_RISR_TXEIR (0x1U << 0) /*!< Transmit FIFO Empty Raw Interrupt Status */ +#define SPI_RISR_TXOIR (0x1U << 1) /*!< Transmit FIFO Overflow Raw Interrupt Status */ +#define SPI_RISR_RXUIR (0x1U << 2) /*!< Receive FIFO Underflow Raw Interrupt Status */ +#define SPI_RISR_RXOIR (0x1U << 3) /*!< Receive FIFO Overflow Raw Interrupt Status */ +#define SPI_RISR_RXFIR (0x1U << 4) /*!< Receive FIFO Full Raw Interrupt Status */ +#define SPI_RISR_MSTIR (0x1U << 5) /*!< Multi-Master Contention Raw Interrupt Status */ + + +/****************************** Bit definition for SPI_DMACR register *******************************/ +#define SPI_DMACR_RDMAE (0x1U << 0) /*!< Receive DMA Enable */ +#define SPI_DMACR_TDMAE (0x1U << 1) /*!< Transmit DMA Enable */ + +/****************************** Bit definition for SPI_DMATDLR register *******************************/ + +/****************************** Bit definition for SPI_DMARDLR register *******************************/ + + +/****************************** Bit definition for SPI_ESPICR register ****************************/ +#define SPI_ESPICR_TRANST_Msk (0x3U << 0) /*!< Address and instruction transfer format field mask */ + +#define SPI_ESPICR_ADDRL_Msk (0xFU << 2) /*!< Address Length field mask */ +#define SPI_ESPICR_ADDRL_0BIT (0x0U << 2) /*!< 0-bit Address Width */ +#define SPI_ESPICR_ADDRL_4BIT (0x1U << 2) /*!< 4-bit Address Width */ +#define SPI_ESPICR_ADDRL_8BIT (0x2U << 2) /*!< 8-bit Address Width */ +#define SPI_ESPICR_ADDRL_12BIT (0x3U << 2) /*!< 12-bit Address Width */ +#define SPI_ESPICR_ADDRL_16BIT (0x4U << 2) /*!< 16-bit Address Width */ +#define SPI_ESPICR_ADDRL_20BIT (0x5U << 2) /*!< 20-bit Address Width */ +#define SPI_ESPICR_ADDRL_24BIT (0x6U << 2) /*!< 24-bit Address Width */ +#define SPI_ESPICR_ADDRL_28BIT (0x7U << 2) /*!< 28-bit Address Width */ +#define SPI_ESPICR_ADDRL_32BIT (0x8U << 2) /*!< 32-bit Address Width */ +#define SPI_ESPICR_ADDRL_36BIT (0x9U << 2) /*!< 36-bit Address Width */ +#define SPI_ESPICR_ADDRL_40BIT (0xAU << 2) /*!< 40-bit Address Width */ +#define SPI_ESPICR_ADDRL_44BIT (0xBU << 2) /*!< 44-bit Address Width */ +#define SPI_ESPICR_ADDRL_48BIT (0xCU << 2) /*!< 48-bit Address Width */ +#define SPI_ESPICR_ADDRL_52BIT (0xDU << 2) /*!< 52-bit Address Width */ +#define SPI_ESPICR_ADDRL_56BIT (0xEU << 2) /*!< 56-bit Address Width */ +#define SPI_ESPICR_ADDRL_60BIT (0xFU << 2) /*!< 60-bit Address Width */ + +#define SPI_ESPICR_INSTL_Msk (0x3U << 8) /*!< Instruction Length field mask */ +#define SPI_ESPICR_INSTL_0BIT (0x0U << 8) /*!< 0-bit (No Instruction) */ +#define SPI_ESPICR_INSTL_4BIT (0x1U << 8) /*!< 4-bit Instruction */ +#define SPI_ESPICR_INSTL_8BIT (0x2U << 8) /*!< 8-bit Instruction */ +#define SPI_ESPICR_INSTL_16BIT (0x3U << 8) /*!< 16-bit Instruction */ + +#define SPI_ESPICR_WCYC_Msk (0x1FU << 11) /*!< Wait cycles field mask */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Inter-IC Sound (I2S) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for I2S_IER register *********************************/ +#define I2S_IER_IEN (0x1U << 0) /*!< I2S Enable */ + +/******************************** Bit definition for I2S_IRER register ********************************/ +#define I2S_IRER_RXEN (0x1U << 0) /*!< Receiver block enable */ + +/******************************** Bit definition for I2S_ITER register ********************************/ +#define I2S_ITER_TXEN (0x1U << 0) /*!< Transmitter block enable */ + +/******************************** Bit definition for I2S_CER register *********************************/ +#define I2S_CER_CLKEN (0x1U << 0) /*!< Clock generation enable/disable */ + +/******************************** Bit definition for I2S_CCR register *********************************/ +#define I2S_CCR_SCLKG_Msk (0x7U << 0) /*!< Gating of sclk field mask */ +#define I2S_CCR_SCLKG_NONE (0x0U << 0) /*!< Clock gating is disabled */ +#define I2S_CCR_SCLKG_12 (0x1U << 0) /*!< Gating after 12 sclk cycles */ +#define I2S_CCR_SCLKG_16 (0x2U << 0) /*!< Gating after 16 sclk cycles */ +#define I2S_CCR_SCLKG_20 (0x3U << 0) /*!< Gating after 20 sclk cycles */ +#define I2S_CCR_SCLKG_24 (0x4U << 0) /*!< Gating after 24 sclk cycles */ + +#define I2S_CCR_WSS_Msk (0x3U << 3) /*!< No description */ +#define I2S_CCR_WSS_16 (0x0U << 3) /*!< 16 sclk cycles */ +#define I2S_CCR_WSS_24 (0x1U << 3) /*!< 24 sclk cycles */ +#define I2S_CCR_WSS_32 (0x2U << 3) /*!< 32 sclk cycles */ + + +/******************************** Bit definition for I2S_RXFFR register *******************************/ +#define I2S_RXFFR_RXFFR (0x1U << 0) /*!< Receiver FIFO Reset */ + +/******************************** Bit definition for I2S_TXFFR register *******************************/ +#define I2S_TXFFR_TXFFR (0x1U << 0) /*!< Transmitter FIFO Reset */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Universal Serial Bus (USB) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for USB_FADDR register ********************************/ +#define USB_FADDR_FADDR_Msk (0x7FU) /*!< The function address field mask */ +#define USB_FADDR_UPDATE (0x1U << 7) /*!< Set when FAddr is written */ + +/******************************** Bit definition for USB_POWER register ********************************/ +#define USB_POWER_SUSEN (0x1U << 0) /*!< No description */ +#define USB_POWER_SUSMD (0x1U << 1) /*!< No description */ +#define USB_POWER_RESUME (0x1U << 2) /*!< No description */ +#define USB_POWER_RSTFLG (0x1U << 3) /*!< No description */ +#define USB_POWER_ISOUD (0x1U << 7) /*!< No description */ + +/******************************** Bit definition for USB_INTRIN register ********************************/ +#define USB_INTRIN_EP0 (0x1U << 0) /*!< No description */ +#define USB_INTRIN_IN1 (0x1U << 1) /*!< No description */ +#define USB_INTRIN_IN2 (0x1U << 2) /*!< No description */ +#define USB_INTRIN_IN3 (0x1U << 3) /*!< No description */ + +/******************************** Bit definition for USB_INTROUT register ********************************/ +#define USB_INTROUT_OUT1 (0x1U << 1) /*!< No description */ +#define USB_INTROUT_OUT2 (0x1U << 2) /*!< No description */ +#define USB_INTROUT_OUT3 (0x1U << 3) /*!< No description */ + +/******************************** Bit definition for USB_INTRUSB register ********************************/ +#define USB_INTRUSB_SUSIS (0x1U << 0) /*!< No description */ +#define USB_INTRUSB_RSUIS (0x1U << 1) /*!< No description */ +#define USB_INTRUSB_RSTIS (0x1U << 2) /*!< No description */ +#define USB_INTRUSB_SOFIS (0x1U << 3) /*!< No description */ + +/******************************** Bit definition for USB_INTRINE register ********************************/ +#define USB_INTRINE_EP0E (0x1U << 0) /*!< No description */ +#define USB_INTRINE_IN1E (0x1U << 1) /*!< No description */ +#define USB_INTRINE_IN2E (0x1U << 2) /*!< No description */ +#define USB_INTRINE_IN3E (0x1U << 3) /*!< No description */ + +/******************************** Bit definition for USB_INTROUTE register ********************************/ +#define USB_INTROUTE_OUT1E (0x1U << 1) /*!< No description */ +#define USB_INTROUTE_OUT2E (0x1U << 2) /*!< No description */ +#define USB_INTROUTE_OUT3E (0x1U << 3) /*!< No description */ + +/******************************** Bit definition for USB_INTRUSBE register ********************************/ +#define USB_INTRUSBE_SUSIE (0x1U << 0) /*!< No description */ +#define USB_INTRUSBE_RSUIE (0x1U << 1) /*!< No description */ +#define USB_INTRUSBE_RSTIE (0x1U << 2) /*!< No description */ +#define USB_INTRUSBE_SOFIE (0x1U << 3) /*!< No description */ + +/******************************** Bit definition for USB_CSR0 register ********************************/ +#define USB_CSR0_OUTPKTRDY (0x1U << 0) /*!< No description */ +#define USB_CSR0_INPKTRDY (0x1U << 1) /*!< No description */ +#define USB_CSR0_SENTSTALL (0x1U << 2) /*!< No description */ +#define USB_CSR0_DATAEND (0x1U << 3) /*!< No description */ +#define USB_CSR0_SETUPEND (0x1U << 4) /*!< No description */ +#define USB_CSR0_SENDSTALL (0x1U << 5) /*!< No description */ +#define USB_CSR0_SVDOUTPKTRDY (0x1U << 6) /*!< No description */ +#define USB_CSR0_SVDSETUPEND (0x1U << 7) /*!< No description */ + +/******************************** Bit definition for USB_INCSR1 register ********************************/ +#define USB_INCSR1_INPKTRDY (0x1U << 0) /*!< No description */ +#define USB_INCSR1_FIFONE (0x1U << 1) /*!< No description */ +#define USB_INCSR1_UNDERRUN (0x1U << 2) /*!< No description */ +#define USB_INCSR1_FLUSHFIFO (0x1U << 3) /*!< No description */ +#define USB_INCSR1_SENDSTALL (0x1U << 4) /*!< No description */ +#define USB_INCSR1_SENTSTALL (0x1U << 5) /*!< No description */ +#define USB_INCSR1_CLRDATATOG (0x1U << 6) /*!< No description */ + +/******************************** Bit definition for USB_INCSR2 register ********************************/ +#define USB_INCSR2_FRCDATATOG (0x1U << 3) /*!< No description */ +#define USB_INCSR2_DMAEN (0x1U << 4) /*!< No description */ +#define USB_INCSR2_DIRSEL (0x1U << 5) /*!< No description */ +#define USB_INCSR2_ISO (0x1U << 6) /*!< No description */ +#define USB_INCSR2_AUTOSET (0x1U << 7) /*!< No description */ + +/******************************** Bit definition for USB_OUTCSR1 register ********************************/ +#define USB_OUTCSR1_OUTPKTRDY (0x1U << 0) /*!< No description */ +#define USB_OUTCSR1_FIFOFULL (0x1U << 1) /*!< No description */ +#define USB_OUTCSR1_OVERRUN (0x1U << 2) /*!< No description */ +#define USB_OUTCSR1_DATAERROR (0x1U << 3) /*!< No description */ +#define USB_OUTCSR1_FLUSHFIFO (0x1U << 4) /*!< No description */ +#define USB_OUTCSR1_SENDSTALL (0x1U << 5) /*!< No description */ +#define USB_OUTCSR1_SENTSTALL (0x1U << 6) /*!< No description */ +#define USB_OUTCSR1_CLRDATATOG (0x1U << 7) /*!< No description */ + +/******************************** Bit definition for USB_OUTCSR2 register ********************************/ +#define USB_OUTCSR2_DMAMODE (0x1U << 4) /*!< No description */ +#define USB_OUTCSR2_DMAEN (0x1U << 5) /*!< No description */ +#define USB_OUTCSR2_ISO (0x1U << 6) /*!< No description */ +#define USB_OUTCSR2_AUTOCLR (0x1U << 7) /*!< No description */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Timer (TIM) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for TIM_CR1 register ********************************/ +#define TIM_CR1_CEN (0x1U << 0) /*!< Counter enable */ +#define TIM_CR1_UDIS (0x1U << 1) /*!< Update disable */ +#define TIM_CR1_URS (0x1U << 2) /*!< Update request source */ +#define TIM_CR1_OPM (0x1U << 3) /*!< One pulse mode */ +#define TIM_CR1_DIR (0x1U << 4) /*!< Direction */ + +#define TIM_CR1_CMS (0x3U << 5) /*!< CMS[1:0] bits (Center-aligned mode selection) */ +#define TIM_CR1_CMS_0 (0x1U << 5) /*!< Bit 0 */ +#define TIM_CR1_CMS_1 (0x1U << 6) /*!< Bit 1 */ + +#define TIM_CR1_ARPE (0x1U << 7) /*!< Auto-reload preload enable */ + +#define TIM_CR1_CKD (0x3U << 8) /*!< CKD[1:0] bits (clock division) */ +#define TIM_CR1_CKD_0 (0x1U << 8) /*!< Bit 0 */ +#define TIM_CR1_CKD_1 (0x1U << 9) /*!< Bit 1 */ + +/******************************** Bit definition for TIM_CR2 register ********************************/ +#define TIM_CR2_CCPC (0x1U << 0) /*!< Capture/Compare Preloaded Control */ +#define TIM_CR2_CCUS (0x1U << 2) /*!< Capture/Compare Control Update Selection */ +#define TIM_CR2_CCDS (0x1U << 3) /*!< Capture/Compare DMA Selection */ + +#define TIM_CR2_MMS (0x7U << 4) /*!< MMS[2:0] bits (Master Mode Selection) */ +#define TIM_CR2_MMS_0 (0x1U << 4) /*!< Bit 0 */ +#define TIM_CR2_MMS_1 (0x1U << 5) /*!< Bit 1 */ +#define TIM_CR2_MMS_2 (0x1U << 6) /*!< Bit 2 */ + +#define TIM_CR2_TI1S (0x1U << 7) /*!< TI1 Selection */ +#define TIM_CR2_OIS1 (0x1U << 8) /*!< Output Idle state 1 (OC1 output) */ +#define TIM_CR2_OIS1N (0x1U << 9) /*!< Output Idle state 1 (OC1N output) */ +#define TIM_CR2_OIS2 (0x1U << 10) /*!< Output Idle state 2 (OC2 output) */ +#define TIM_CR2_OIS2N (0x1U << 11) /*!< Output Idle state 2 (OC2N output) */ +#define TIM_CR2_OIS3 (0x1U << 12) /*!< Output Idle state 3 (OC3 output) */ +#define TIM_CR2_OIS3N (0x1U << 13) /*!< Output Idle state 3 (OC3N output) */ +#define TIM_CR2_OIS4 (0x1U << 14) /*!< Output Idle state 4 (OC4 output) */ + +/******************************** Bit definition for TIM_SMCR register ********************************/ +#define TIM_SMCR_SMS (0x7U << 0) /*!< SMS[2:0] bits (Slave mode selection) */ +#define TIM_SMCR_SMS_0 (0x1U << 0) /*!< Bit 0 */ +#define TIM_SMCR_SMS_1 (0x1U << 1) /*!< Bit 1 */ +#define TIM_SMCR_SMS_2 (0x1U << 2) /*!< Bit 2 */ + +#define TIM_SMCR_TS (0x7U << 4) /*!< TS[2:0] bits (Trigger selection) */ +#define TIM_SMCR_TS_0 (0x1U << 4) /*!< Bit 0 */ +#define TIM_SMCR_TS_1 (0x1U << 5) /*!< Bit 1 */ +#define TIM_SMCR_TS_2 (0x1U << 6) /*!< Bit 2 */ + +#define TIM_SMCR_MSM (0x1U << 7) /*!< Master/slave mode */ + +#define TIM_SMCR_ETF (0xFU << 8) /*!< ETF[3:0] bits (External trigger filter) */ +#define TIM_SMCR_ETF_0 (0x1U << 8) /*!< Bit 0 */ +#define TIM_SMCR_ETF_1 (0x1U << 9) /*!< Bit 1 */ +#define TIM_SMCR_ETF_2 (0x1U << 10) /*!< Bit 2 */ +#define TIM_SMCR_ETF_3 (0x1U << 11) /*!< Bit 3 */ + +#define TIM_SMCR_ETPS (0x3U << 12) /*!< ETPS[1:0] bits (External trigger prescaler) */ +#define TIM_SMCR_ETPS_0 (0x1U << 12) /*!< Bit 0 */ +#define TIM_SMCR_ETPS_1 (0x1U << 13) /*!< Bit 1 */ + +#define TIM_SMCR_ECE (0x1U << 14) /*!< External clock enable */ +#define TIM_SMCR_ETP (0x1U << 15) /*!< External trigger polarity */ + +/******************************** Bit definition for TIM_DIER register ********************************/ +#define TIM_DIER_UIE (0x1U << 0) /*!< Update interrupt enable */ +#define TIM_DIER_CC1IE (0x1U << 1) /*!< Capture/Compare 1 interrupt enable */ +#define TIM_DIER_CC2IE (0x1U << 2) /*!< Capture/Compare 2 interrupt enable */ +#define TIM_DIER_CC3IE (0x1U << 3) /*!< Capture/Compare 3 interrupt enable */ +#define TIM_DIER_CC4IE (0x1U << 4) /*!< Capture/Compare 4 interrupt enable */ +#define TIM_DIER_COMIE (0x1U << 5) /*!< COM interrupt enable */ +#define TIM_DIER_TIE (0x1U << 6) /*!< Trigger interrupt enable */ +#define TIM_DIER_BIE (0x1U << 7) /*!< Break interrupt enable */ +#define TIM_DIER_UDE (0x1U << 8) /*!< Update DMA request enable */ +#define TIM_DIER_CC1DE (0x1U << 9) /*!< Capture/Compare 1 DMA request enable */ +#define TIM_DIER_CC2DE (0x1U << 10) /*!< Capture/Compare 2 DMA request enable */ +#define TIM_DIER_CC3DE (0x1U << 11) /*!< Capture/Compare 3 DMA request enable */ +#define TIM_DIER_CC4DE (0x1U << 12) /*!< Capture/Compare 4 DMA request enable */ +#define TIM_DIER_COMDE (0x1U << 13) /*!< COM DMA request enable */ +#define TIM_DIER_TDE (0x1U << 14) /*!< Trigger DMA request enable */ + +/******************************** Bit definition for TIM_SR register ********************************/ +#define TIM_SR_UIF (0x1U << 0) /*!< Update interrupt Flag */ +#define TIM_SR_CC1IF (0x1U << 1) /*!< Capture/Compare 1 interrupt Flag */ +#define TIM_SR_CC2IF (0x1U << 2) /*!< Capture/Compare 2 interrupt Flag */ +#define TIM_SR_CC3IF (0x1U << 3) /*!< Capture/Compare 3 interrupt Flag */ +#define TIM_SR_CC4IF (0x1U << 4) /*!< Capture/Compare 4 interrupt Flag */ +#define TIM_SR_COMIF (0x1U << 5) /*!< COM interrupt Flag */ +#define TIM_SR_TIF (0x1U << 6) /*!< Trigger interrupt Flag */ +#define TIM_SR_BIF (0x1U << 7) /*!< Break interrupt Flag */ +#define TIM_SR_CC1OF (0x1U << 9) /*!< Capture/Compare 1 Overcapture Flag */ +#define TIM_SR_CC2OF (0x1U << 10) /*!< Capture/Compare 2 Overcapture Flag */ +#define TIM_SR_CC3OF (0x1U << 11) /*!< Capture/Compare 3 Overcapture Flag */ +#define TIM_SR_CC4OF (0x1U << 12) /*!< Capture/Compare 4 Overcapture Flag */ + +/******************************** Bit definition for TIM_EGR register ********************************/ +#define TIM_EGR_UG (0x1U << 0) /*!< Update Generation */ +#define TIM_EGR_CC1G (0x1U << 1) /*!< Capture/Compare 1 Generation */ +#define TIM_EGR_CC2G (0x1U << 2) /*!< Capture/Compare 2 Generation */ +#define TIM_EGR_CC3G (0x1U << 3) /*!< Capture/Compare 3 Generation */ +#define TIM_EGR_CC4G (0x1U << 4) /*!< Capture/Compare 4 Generation */ +#define TIM_EGR_COMG (0x1U << 5) /*!< Capture/Compare Control Update Generation */ +#define TIM_EGR_TG (0x1U << 6) /*!< Trigger Generation */ +#define TIM_EGR_BG (0x1U << 7) /*!< Break Generation */ + +/******************************** Bit definition for TIM_CCMR1 register ********************************/ +#define TIM_CCMR1_CC1S (0x3U << 0) /*!< CC1S[1:0] bits (Capture/Compare 1 Selection) */ +#define TIM_CCMR1_CC1S_0 (0x1U << 0) /*!< Bit 0 */ +#define TIM_CCMR1_CC1S_1 (0x1U << 1) /*!< Bit 1 */ + +#define TIM_CCMR1_OC1FE (0x1U << 2) /*!< Output Compare 1 Fast enable */ +#define TIM_CCMR1_OC1PE (0x1U << 3) /*!< Output Compare 1 Preload enable */ + +#define TIM_CCMR1_OC1M (0x7U << 4) /*!< OC1M[2:0] bits (Output Compare 1 Mode) */ +#define TIM_CCMR1_OC1M_0 (0x1U << 4) /*!< Bit 0 */ +#define TIM_CCMR1_OC1M_1 (0x1U << 5) /*!< Bit 1 */ +#define TIM_CCMR1_OC1M_2 (0x1U << 6) /*!< Bit 2 */ + +#define TIM_CCMR1_OC1CE (0x1U << 7) /*!< Output Compare 1 Clear Enable */ + +#define TIM_CCMR1_CC2S (0x3U << 8) /*!< CC2S[1:0] bits (Capture/Compare 2 Selection) */ +#define TIM_CCMR1_CC2S_0 (0x1U << 8) /*!< Bit 0 */ +#define TIM_CCMR1_CC2S_1 (0x1U << 9) /*!< Bit 1 */ + +#define TIM_CCMR1_OC2FE (0x1U << 10) /*!< Output Compare 2 Fast enable */ +#define TIM_CCMR1_OC2PE (0x1U << 11) /*!< Output Compare 2 Preload enable */ + +#define TIM_CCMR1_OC2M (0x7U << 12) /*!< OC2M[2:0] bits (Output Compare 2 Mode) */ +#define TIM_CCMR1_OC2M_0 (0x1U << 12) /*!< Bit 0 */ +#define TIM_CCMR1_OC2M_1 (0x1U << 13) /*!< Bit 1 */ +#define TIM_CCMR1_OC2M_2 (0x1U << 14) /*!< Bit 2 */ + +#define TIM_CCMR1_OC2CE (0x1U << 15) /*!< Output Compare 2 Clear Enable */ + +/*------------------------------------------------------------------------------------------*/ + +#define TIM_CCMR1_IC1PSC (0x3U << 2) /*!< IC1PSC[1:0] bits (Input Capture 1 Prescaler) */ +#define TIM_CCMR1_IC1PSC_0 (0x1U << 2) /*!< Bit 0 */ +#define TIM_CCMR1_IC1PSC_1 (0x1U << 3) /*!< Bit 1 */ + +#define TIM_CCMR1_IC1F (0xFU << 4) /*!< IC1F[3:0] bits (Input Capture 1 Filter) */ +#define TIM_CCMR1_IC1F_0 (0x1U << 4) /*!< Bit 0 */ +#define TIM_CCMR1_IC1F_1 (0x1U << 5) /*!< Bit 1 */ +#define TIM_CCMR1_IC1F_2 (0x1U << 6) /*!< Bit 2 */ +#define TIM_CCMR1_IC1F_3 (0x1U << 7) /*!< Bit 3 */ + +#define TIM_CCMR1_IC2PSC (0x3U << 10) /*!< IC2PSC[1:0] bits (Input Capture 2 Prescaler) */ +#define TIM_CCMR1_IC2PSC_0 (0x1U << 10) /*!< Bit 0 */ +#define TIM_CCMR1_IC2PSC_1 (0x1U << 11) /*!< Bit 1 */ + +#define TIM_CCMR1_IC2F (0xFU << 12) /*!< IC2F[3:0] bits (Input Capture 2 Filter) */ +#define TIM_CCMR1_IC2F_0 (0x1U << 12) /*!< Bit 0 */ +#define TIM_CCMR1_IC2F_1 (0x1U << 13) /*!< Bit 1 */ +#define TIM_CCMR1_IC2F_2 (0x1U << 14) /*!< Bit 2 */ +#define TIM_CCMR1_IC2F_3 (0x1U << 15) /*!< Bit 3 */ + +/******************************** Bit definition for TIM_CCMR2 register ********************************/ +#define TIM_CCMR2_CC3S (0x3U << 0) /*!< CC3S[1:0] bits (Capture/Compare 3 Selection) */ +#define TIM_CCMR2_CC3S_0 (0x1U << 0) /*!< Bit 0 */ +#define TIM_CCMR2_CC3S_1 (0x1U << 1) /*!< Bit 1 */ + +#define TIM_CCMR2_OC3FE (0x1U << 2) /*!< Output Compare 3 Fast enable */ +#define TIM_CCMR2_OC3PE (0x1U << 3) /*!< Output Compare 3 Preload enable */ + +#define TIM_CCMR2_OC3M (0x7U << 4) /*!< OC3M[2:0] bits (Output Compare 3 Mode) */ +#define TIM_CCMR2_OC3M_0 (0x1U << 4) /*!< Bit 0 */ +#define TIM_CCMR2_OC3M_1 (0x1U << 5) /*!< Bit 1 */ +#define TIM_CCMR2_OC3M_2 (0x1U << 6) /*!< Bit 2 */ + +#define TIM_CCMR2_OC3CE (0x1U << 7) /*!< Output Compare 3 Clear Enable */ + +#define TIM_CCMR2_CC4S (0x3U << 8) /*!< CC4S[1:0] bits (Capture/Compare 4 Selection) */ +#define TIM_CCMR2_CC4S_0 (0x1U << 8) /*!< Bit 0 */ +#define TIM_CCMR2_CC4S_1 (0x1U << 9) /*!< Bit 1 */ + +#define TIM_CCMR2_OC4FE (0x1U << 10) /*!< Output Compare 4 Fast enable */ +#define TIM_CCMR2_OC4PE (0x1U << 11) /*!< Output Compare 4 Preload enable */ + +#define TIM_CCMR2_OC4M (0x7U << 12) /*!< OC4M[2:0] bits (Output Compare 4 Mode) */ +#define TIM_CCMR2_OC4M_0 (0x1U << 12) /*!< Bit 0 */ +#define TIM_CCMR2_OC4M_1 (0x1U << 13) /*!< Bit 1 */ +#define TIM_CCMR2_OC4M_2 (0x1U << 14) /*!< Bit 2 */ + +#define TIM_CCMR2_OC4CE (0x1U << 15) /*!< Output Compare 4 Clear Enable */ + +/*------------------------------------------------------------------------------------------*/ + +#define TIM_CCMR2_IC3PSC (0x3U << 2) /*!< IC3PSC[1:0] bits (Input Capture 3 Prescaler) */ +#define TIM_CCMR2_IC3PSC_0 (0x1U << 2) /*!< Bit 0 */ +#define TIM_CCMR2_IC3PSC_1 (0x1U << 3) /*!< Bit 1 */ + +#define TIM_CCMR2_IC3F (0xFU << 4) /*!< IC3F[3:0] bits (Input Capture 3 Filter) */ +#define TIM_CCMR2_IC3F_0 (0x1U << 4) /*!< Bit 0 */ +#define TIM_CCMR2_IC3F_1 (0x1U << 5) /*!< Bit 1 */ +#define TIM_CCMR2_IC3F_2 (0x1U << 6) /*!< Bit 2 */ +#define TIM_CCMR2_IC3F_3 (0x1U << 7) /*!< Bit 3 */ + +#define TIM_CCMR2_IC4PSC (0x3U << 10) /*!< IC4PSC[1:0] bits (Input Capture 4 Prescaler) */ +#define TIM_CCMR2_IC4PSC_0 (0x1U << 10) /*!< Bit 0 */ +#define TIM_CCMR2_IC4PSC_1 (0x1U << 11) /*!< Bit 1 */ + +#define TIM_CCMR2_IC4F (0xFU << 12) /*!< IC4F[3:0] bits (Input Capture 4 Filter) */ +#define TIM_CCMR2_IC4F_0 (0x1U << 12) /*!< Bit 0 */ +#define TIM_CCMR2_IC4F_1 (0x1U << 13) /*!< Bit 1 */ +#define TIM_CCMR2_IC4F_2 (0x1U << 14) /*!< Bit 2 */ +#define TIM_CCMR2_IC4F_3 (0x1U << 15) /*!< Bit 3 */ + +/******************************** Bit definition for TIM_CCER register ********************************/ +#define TIM_CCER_CC1E (0x1U << 0) /*!< Capture/Compare 1 output enable */ +#define TIM_CCER_CC1P (0x1U << 1) /*!< Capture/Compare 1 output Polarity */ +#define TIM_CCER_CC1NE (0x1U << 2) /*!< Capture/Compare 1 Complementary output enable */ +#define TIM_CCER_CC1NP (0x1U << 3) /*!< Capture/Compare 1 Complementary output Polarity */ +#define TIM_CCER_CC2E (0x1U << 4) /*!< Capture/Compare 2 output enable */ +#define TIM_CCER_CC2P (0x1U << 5) /*!< Capture/Compare 2 output Polarity */ +#define TIM_CCER_CC2NE (0x1U << 6) /*!< Capture/Compare 2 Complementary output enable */ +#define TIM_CCER_CC2NP (0x1U << 7) /*!< Capture/Compare 2 Complementary output Polarity */ +#define TIM_CCER_CC3E (0x1U << 8) /*!< Capture/Compare 3 output enable */ +#define TIM_CCER_CC3P (0x1U << 9) /*!< Capture/Compare 3 output Polarity */ +#define TIM_CCER_CC3NE (0x1U << 10) /*!< Capture/Compare 3 Complementary output enable */ +#define TIM_CCER_CC3NP (0x1U << 11) /*!< Capture/Compare 3 Complementary output Polarity */ +#define TIM_CCER_CC4E (0x1U << 12) /*!< Capture/Compare 4 output enable */ +#define TIM_CCER_CC4P (0x1U << 13) /*!< Capture/Compare 4 output Polarity */ + +/******************************** Bit definition for TIM_CNT register ********************************/ +#define TIM_CNT_CNT (0xFFFFFU) /*!< Counter Value */ + +/******************************** Bit definition for TIM_PSC register ********************************/ +#define TIM_PSC_PSC (0xFFFFU) /*!< Prescaler Value */ + +/******************************** Bit definition for TIM_ARR register ********************************/ +#define TIM_ARR_ARR (0xFFFFFU) /*!< actual auto-reload Value */ + +/******************************** Bit definition for TIM_RCR register ********************************/ +#define TIM_RCR_REP (0xFFU) /*!< Repetition Counter Value */ + +/******************************** Bit definition for TIM_CCR1 register ********************************/ +#define TIM_CCR1_CCR1 (0xFFFFFU) /*!< Capture/Compare 1 Value */ + +/******************************** Bit definition for TIM_CCR2 register ********************************/ +#define TIM_CCR2_CCR2 (0xFFFFFU) /*!< Capture/Compare 2 Value */ + +/******************************** Bit definition for TIM_CCR3 register ********************************/ +#define TIM_CCR3_CCR3 (0xFFFFFU) /*!< Capture/Compare 3 Value */ + +/******************************** Bit definition for TIM_CCR4 register ********************************/ +#define TIM_CCR4_CCR4 (0xFFFFFU) /*!< Capture/Compare 4 Value */ + +/******************************** Bit definition for TIM_BDTR register ********************************/ +#define TIM_BDTR_DTG (0xFFU << 0) /*!< DTG[0:7] bits (Dead-Time Generator set-up) */ +#define TIM_BDTR_DTG_0 (0x1U << 0) /*!< Bit 0 */ +#define TIM_BDTR_DTG_1 (0x1U << 1) /*!< Bit 1 */ +#define TIM_BDTR_DTG_2 (0x1U << 2) /*!< Bit 2 */ +#define TIM_BDTR_DTG_3 (0x1U << 3) /*!< Bit 3 */ +#define TIM_BDTR_DTG_4 (0x1U << 4) /*!< Bit 4 */ +#define TIM_BDTR_DTG_5 (0x1U << 5) /*!< Bit 5 */ +#define TIM_BDTR_DTG_6 (0x1U << 6) /*!< Bit 6 */ +#define TIM_BDTR_DTG_7 (0x1U << 7) /*!< Bit 7 */ + +#define TIM_BDTR_LOCK (0x3U << 8) /*!< LOCK[1:0] bits (Lock Configuration) */ +#define TIM_BDTR_LOCK_0 (0x1U << 8) /*!< Bit 0 */ +#define TIM_BDTR_LOCK_1 (0x1U << 9) /*!< Bit 1 */ + +#define TIM_BDTR_OSSI (0x1U << 10) /*!< Off-State Selection for Idle mode */ +#define TIM_BDTR_OSSR (0x1U << 11) /*!< Off-State Selection for Run mode */ +#define TIM_BDTR_BKE (0x1U << 12) /*!< Break enable */ +#define TIM_BDTR_BKP (0x1U << 13) /*!< Break Polarity */ +#define TIM_BDTR_AOE (0x1U << 14) /*!< Automatic Output enable */ +#define TIM_BDTR_MOE (0x1U << 15) /*!< Main Output enable */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- External Interrupt/Event Controller (EXTI) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for EXTI_IMR register ********************************/ +#define EXTI_IMR_MR0 ((uint32_t)0x00000001) /*!< Interrupt Mask on line 0 */ +#define EXTI_IMR_MR1 ((uint32_t)0x00000002) /*!< Interrupt Mask on line 1 */ +#define EXTI_IMR_MR2 ((uint32_t)0x00000004) /*!< Interrupt Mask on line 2 */ +#define EXTI_IMR_MR3 ((uint32_t)0x00000008) /*!< Interrupt Mask on line 3 */ +#define EXTI_IMR_MR4 ((uint32_t)0x00000010) /*!< Interrupt Mask on line 4 */ +#define EXTI_IMR_MR5 ((uint32_t)0x00000020) /*!< Interrupt Mask on line 5 */ +#define EXTI_IMR_MR6 ((uint32_t)0x00000040) /*!< Interrupt Mask on line 6 */ +#define EXTI_IMR_MR7 ((uint32_t)0x00000080) /*!< Interrupt Mask on line 7 */ +#define EXTI_IMR_MR8 ((uint32_t)0x00000100) /*!< Interrupt Mask on line 8 */ +#define EXTI_IMR_MR9 ((uint32_t)0x00000200) /*!< Interrupt Mask on line 9 */ +#define EXTI_IMR_MR10 ((uint32_t)0x00000400) /*!< Interrupt Mask on line 10 */ +#define EXTI_IMR_MR11 ((uint32_t)0x00000800) /*!< Interrupt Mask on line 11 */ +#define EXTI_IMR_MR12 ((uint32_t)0x00001000) /*!< Interrupt Mask on line 12 */ +#define EXTI_IMR_MR13 ((uint32_t)0x00002000) /*!< Interrupt Mask on line 13 */ +#define EXTI_IMR_MR14 ((uint32_t)0x00004000) /*!< Interrupt Mask on line 14 */ +#define EXTI_IMR_MR15 ((uint32_t)0x00008000) /*!< Interrupt Mask on line 15 */ +#define EXTI_IMR_MR16 ((uint32_t)0x00010000) /*!< Interrupt Mask on line 16 */ +#define EXTI_IMR_MR17 ((uint32_t)0x00020000) /*!< Interrupt Mask on line 17 */ +#define EXTI_IMR_MR18 ((uint32_t)0x00040000) /*!< Interrupt Mask on line 18 */ + +/******************************** Bit definition for EXTI_EMR register ********************************/ +#define EXTI_EMR_MR0 ((uint32_t)0x00000001) /*!< Event Mask on line 0 */ +#define EXTI_EMR_MR1 ((uint32_t)0x00000002) /*!< Event Mask on line 1 */ +#define EXTI_EMR_MR2 ((uint32_t)0x00000004) /*!< Event Mask on line 2 */ +#define EXTI_EMR_MR3 ((uint32_t)0x00000008) /*!< Event Mask on line 3 */ +#define EXTI_EMR_MR4 ((uint32_t)0x00000010) /*!< Event Mask on line 4 */ +#define EXTI_EMR_MR5 ((uint32_t)0x00000020) /*!< Event Mask on line 5 */ +#define EXTI_EMR_MR6 ((uint32_t)0x00000040) /*!< Event Mask on line 6 */ +#define EXTI_EMR_MR7 ((uint32_t)0x00000080) /*!< Event Mask on line 7 */ +#define EXTI_EMR_MR8 ((uint32_t)0x00000100) /*!< Event Mask on line 8 */ +#define EXTI_EMR_MR9 ((uint32_t)0x00000200) /*!< Event Mask on line 9 */ +#define EXTI_EMR_MR10 ((uint32_t)0x00000400) /*!< Event Mask on line 10 */ +#define EXTI_EMR_MR11 ((uint32_t)0x00000800) /*!< Event Mask on line 11 */ +#define EXTI_EMR_MR12 ((uint32_t)0x00001000) /*!< Event Mask on line 12 */ +#define EXTI_EMR_MR13 ((uint32_t)0x00002000) /*!< Event Mask on line 13 */ +#define EXTI_EMR_MR14 ((uint32_t)0x00004000) /*!< Event Mask on line 14 */ +#define EXTI_EMR_MR15 ((uint32_t)0x00008000) /*!< Event Mask on line 15 */ +#define EXTI_EMR_MR16 ((uint32_t)0x00010000) /*!< Event Mask on line 16 */ +#define EXTI_EMR_MR17 ((uint32_t)0x00020000) /*!< Event Mask on line 17 */ +#define EXTI_EMR_MR18 ((uint32_t)0x00040000) /*!< Event Mask on line 18 */ + +/******************************** Bit definition for EXTI_RTSR register ********************************/ +#define EXTI_RTSR_TR0 ((uint32_t)0x00000001) /*!< Rising trigger event configuration bit of line 0 */ +#define EXTI_RTSR_TR1 ((uint32_t)0x00000002) /*!< Rising trigger event configuration bit of line 1 */ +#define EXTI_RTSR_TR2 ((uint32_t)0x00000004) /*!< Rising trigger event configuration bit of line 2 */ +#define EXTI_RTSR_TR3 ((uint32_t)0x00000008) /*!< Rising trigger event configuration bit of line 3 */ +#define EXTI_RTSR_TR4 ((uint32_t)0x00000010) /*!< Rising trigger event configuration bit of line 4 */ +#define EXTI_RTSR_TR5 ((uint32_t)0x00000020) /*!< Rising trigger event configuration bit of line 5 */ +#define EXTI_RTSR_TR6 ((uint32_t)0x00000040) /*!< Rising trigger event configuration bit of line 6 */ +#define EXTI_RTSR_TR7 ((uint32_t)0x00000080) /*!< Rising trigger event configuration bit of line 7 */ +#define EXTI_RTSR_TR8 ((uint32_t)0x00000100) /*!< Rising trigger event configuration bit of line 8 */ +#define EXTI_RTSR_TR9 ((uint32_t)0x00000200) /*!< Rising trigger event configuration bit of line 9 */ +#define EXTI_RTSR_TR10 ((uint32_t)0x00000400) /*!< Rising trigger event configuration bit of line 10 */ +#define EXTI_RTSR_TR11 ((uint32_t)0x00000800) /*!< Rising trigger event configuration bit of line 11 */ +#define EXTI_RTSR_TR12 ((uint32_t)0x00001000) /*!< Rising trigger event configuration bit of line 12 */ +#define EXTI_RTSR_TR13 ((uint32_t)0x00002000) /*!< Rising trigger event configuration bit of line 13 */ +#define EXTI_RTSR_TR14 ((uint32_t)0x00004000) /*!< Rising trigger event configuration bit of line 14 */ +#define EXTI_RTSR_TR15 ((uint32_t)0x00008000) /*!< Rising trigger event configuration bit of line 15 */ +#define EXTI_RTSR_TR16 ((uint32_t)0x00010000) /*!< Rising trigger event configuration bit of line 16 */ +#define EXTI_RTSR_TR17 ((uint32_t)0x00020000) /*!< Rising trigger event configuration bit of line 17 */ +#define EXTI_RTSR_TR18 ((uint32_t)0x00040000) /*!< Rising trigger event configuration bit of line 18 */ + +/******************************** Bit definition for EXTI_FTSR register ********************************/ +#define EXTI_FTSR_TR0 ((uint32_t)0x00000001) /*!< Falling trigger event configuration bit of line 0 */ +#define EXTI_FTSR_TR1 ((uint32_t)0x00000002) /*!< Falling trigger event configuration bit of line 1 */ +#define EXTI_FTSR_TR2 ((uint32_t)0x00000004) /*!< Falling trigger event configuration bit of line 2 */ +#define EXTI_FTSR_TR3 ((uint32_t)0x00000008) /*!< Falling trigger event configuration bit of line 3 */ +#define EXTI_FTSR_TR4 ((uint32_t)0x00000010) /*!< Falling trigger event configuration bit of line 4 */ +#define EXTI_FTSR_TR5 ((uint32_t)0x00000020) /*!< Falling trigger event configuration bit of line 5 */ +#define EXTI_FTSR_TR6 ((uint32_t)0x00000040) /*!< Falling trigger event configuration bit of line 6 */ +#define EXTI_FTSR_TR7 ((uint32_t)0x00000080) /*!< Falling trigger event configuration bit of line 7 */ +#define EXTI_FTSR_TR8 ((uint32_t)0x00000100) /*!< Falling trigger event configuration bit of line 8 */ +#define EXTI_FTSR_TR9 ((uint32_t)0x00000200) /*!< Falling trigger event configuration bit of line 9 */ +#define EXTI_FTSR_TR10 ((uint32_t)0x00000400) /*!< Falling trigger event configuration bit of line 10 */ +#define EXTI_FTSR_TR11 ((uint32_t)0x00000800) /*!< Falling trigger event configuration bit of line 11 */ +#define EXTI_FTSR_TR12 ((uint32_t)0x00001000) /*!< Falling trigger event configuration bit of line 12 */ +#define EXTI_FTSR_TR13 ((uint32_t)0x00002000) /*!< Falling trigger event configuration bit of line 13 */ +#define EXTI_FTSR_TR14 ((uint32_t)0x00004000) /*!< Falling trigger event configuration bit of line 14 */ +#define EXTI_FTSR_TR15 ((uint32_t)0x00008000) /*!< Falling trigger event configuration bit of line 15 */ +#define EXTI_FTSR_TR16 ((uint32_t)0x00010000) /*!< Falling trigger event configuration bit of line 16 */ +#define EXTI_FTSR_TR17 ((uint32_t)0x00020000) /*!< Falling trigger event configuration bit of line 17 */ +#define EXTI_FTSR_TR18 ((uint32_t)0x00040000) /*!< Falling trigger event configuration bit of line 18 */ + +/******************************** Bit definition for EXTI_SWIER register ********************************/ +#define EXTI_SWIER_SWIER0 ((uint32_t)0x00000001) /*!< Software Interrupt on line 0 */ +#define EXTI_SWIER_SWIER1 ((uint32_t)0x00000002) /*!< Software Interrupt on line 1 */ +#define EXTI_SWIER_SWIER2 ((uint32_t)0x00000004) /*!< Software Interrupt on line 2 */ +#define EXTI_SWIER_SWIER3 ((uint32_t)0x00000008) /*!< Software Interrupt on line 3 */ +#define EXTI_SWIER_SWIER4 ((uint32_t)0x00000010) /*!< Software Interrupt on line 4 */ +#define EXTI_SWIER_SWIER5 ((uint32_t)0x00000020) /*!< Software Interrupt on line 5 */ +#define EXTI_SWIER_SWIER6 ((uint32_t)0x00000040) /*!< Software Interrupt on line 6 */ +#define EXTI_SWIER_SWIER7 ((uint32_t)0x00000080) /*!< Software Interrupt on line 7 */ +#define EXTI_SWIER_SWIER8 ((uint32_t)0x00000100) /*!< Software Interrupt on line 8 */ +#define EXTI_SWIER_SWIER9 ((uint32_t)0x00000200) /*!< Software Interrupt on line 9 */ +#define EXTI_SWIER_SWIER10 ((uint32_t)0x00000400) /*!< Software Interrupt on line 10 */ +#define EXTI_SWIER_SWIER11 ((uint32_t)0x00000800) /*!< Software Interrupt on line 11 */ +#define EXTI_SWIER_SWIER12 ((uint32_t)0x00001000) /*!< Software Interrupt on line 12 */ +#define EXTI_SWIER_SWIER13 ((uint32_t)0x00002000) /*!< Software Interrupt on line 13 */ +#define EXTI_SWIER_SWIER14 ((uint32_t)0x00004000) /*!< Software Interrupt on line 14 */ +#define EXTI_SWIER_SWIER15 ((uint32_t)0x00008000) /*!< Software Interrupt on line 15 */ +#define EXTI_SWIER_SWIER16 ((uint32_t)0x00010000) /*!< Software Interrupt on line 16 */ +#define EXTI_SWIER_SWIER17 ((uint32_t)0x00020000) /*!< Software Interrupt on line 17 */ +#define EXTI_SWIER_SWIER18 ((uint32_t)0x00040000) /*!< Software Interrupt on line 18 */ + +/******************************** Bit definition for EXTI_PR register ********************************/ +#define EXTI_PR_PR0 ((uint32_t)0x00000001) /*!< Pending bit for line 0 */ +#define EXTI_PR_PR1 ((uint32_t)0x00000002) /*!< Pending bit for line 1 */ +#define EXTI_PR_PR2 ((uint32_t)0x00000004) /*!< Pending bit for line 2 */ +#define EXTI_PR_PR3 ((uint32_t)0x00000008) /*!< Pending bit for line 3 */ +#define EXTI_PR_PR4 ((uint32_t)0x00000010) /*!< Pending bit for line 4 */ +#define EXTI_PR_PR5 ((uint32_t)0x00000020) /*!< Pending bit for line 5 */ +#define EXTI_PR_PR6 ((uint32_t)0x00000040) /*!< Pending bit for line 6 */ +#define EXTI_PR_PR7 ((uint32_t)0x00000080) /*!< Pending bit for line 7 */ +#define EXTI_PR_PR8 ((uint32_t)0x00000100) /*!< Pending bit for line 8 */ +#define EXTI_PR_PR9 ((uint32_t)0x00000200) /*!< Pending bit for line 9 */ +#define EXTI_PR_PR10 ((uint32_t)0x00000400) /*!< Pending bit for line 10 */ +#define EXTI_PR_PR11 ((uint32_t)0x00000800) /*!< Pending bit for line 11 */ +#define EXTI_PR_PR12 ((uint32_t)0x00001000) /*!< Pending bit for line 12 */ +#define EXTI_PR_PR13 ((uint32_t)0x00002000) /*!< Pending bit for line 13 */ +#define EXTI_PR_PR14 ((uint32_t)0x00004000) /*!< Pending bit for line 14 */ +#define EXTI_PR_PR15 ((uint32_t)0x00008000) /*!< Pending bit for line 15 */ +#define EXTI_PR_PR16 ((uint32_t)0x00010000) /*!< Pending bit for line 16 */ +#define EXTI_PR_PR17 ((uint32_t)0x00020000) /*!< Pending bit for line 17 */ +#define EXTI_PR_PR18 ((uint32_t)0x00040000) /*!< Pending bit for line 18 */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Alternate Function I/O (AFIO) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for AFIO_EXTICR1 register ********************************/ +#define AFIO_EXTICR1_EXTI0_Msk ((uint16_t)0x000F) /*!< EXTI 0 configuration */ +#define AFIO_EXTICR1_EXTI1_Msk ((uint16_t)0x00F0) /*!< EXTI 1 configuration */ +#define AFIO_EXTICR1_EXTI2_Msk ((uint16_t)0x0F00) /*!< EXTI 2 configuration */ +#define AFIO_EXTICR1_EXTI3_Msk ((uint16_t)0xF000) /*!< EXTI 3 configuration */ + +/*!< EXTI0 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 */ + +/*!< EXTI1 configuration */ +#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 */ + +/*!< EXTI2 configuration */ +#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 */ + +/*!< EXTI3 configuration */ +#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 */ + +/******************************** Bit definition for AFIO_EXTICR2 register ********************************/ +#define AFIO_EXTICR2_EXTI4_Msk ((uint16_t)0x000F) /*!< EXTI 4 configuration */ +#define AFIO_EXTICR2_EXTI5_Msk ((uint16_t)0x00F0) /*!< EXTI 5 configuration */ +#define AFIO_EXTICR2_EXTI6_Msk ((uint16_t)0x0F00) /*!< EXTI 6 configuration */ +#define AFIO_EXTICR2_EXTI7_Msk ((uint16_t)0xF000) /*!< EXTI 7 configuration */ + +/*!< EXTI4 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 */ + +/*!< EXTI5 configuration */ +#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 */ + +/*!< EXTI6 configuration */ +#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 */ + +/*!< EXTI7 configuration */ +#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 */ + +/******************************** Bit definition for AFIO_EXTICR3 register ********************************/ +#define AFIO_EXTICR3_EXTI8_Msk ((uint16_t)0x000F) /*!< EXTI 8 configuration */ +#define AFIO_EXTICR3_EXTI9_Msk ((uint16_t)0x00F0) /*!< EXTI 9 configuration */ +#define AFIO_EXTICR3_EXTI10_Msk ((uint16_t)0x0F00) /*!< EXTI 10 configuration */ +#define AFIO_EXTICR3_EXTI11_Msk ((uint16_t)0xF000) /*!< EXTI 11 configuration */ + +/*!< EXTI8 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 */ + +/*!< EXTI9 configuration */ +#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 */ + +/*!< EXTI10 configuration */ +#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 */ + +/*!< EXTI11 configuration */ +#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 */ + +/******************************** Bit definition for AFIO_EXTICR4 register ********************************/ +#define AFIO_EXTICR4_EXTI12_Msk ((uint16_t)0x000F) /*!< EXTI 12 configuration */ +#define AFIO_EXTICR4_EXTI13_Msk ((uint16_t)0x00F0) /*!< EXTI 13 configuration */ +#define AFIO_EXTICR4_EXTI14_Msk ((uint16_t)0x0F00) /*!< EXTI 14 configuration */ +#define AFIO_EXTICR4_EXTI15_Msk ((uint16_t)0xF000) /*!< EXTI 15 configuration */ + +/* EXTI12 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 */ + +/* EXTI13 configuration */ +#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 */ + +/*!< EXTI14 configuration */ +#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 */ + +/*!< EXTI15 configuration */ +#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 */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Real-Time Clock (RTC) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for RTC_CRH register ********************************/ +#define RTC_CRH_SECIE ((uint8_t)0x01) /*!< Second Interrupt Enable */ +#define RTC_CRH_ALRIE ((uint8_t)0x02) /*!< Alarm Interrupt Enable */ +#define RTC_CRH_OWIE ((uint8_t)0x04) /*!< OverfloW Interrupt Enable */ + +/******************************** Bit definition for RTC_CRL register ********************************/ +#define RTC_CRL_SECF ((uint8_t)0x01) /*!< Second Flag */ +#define RTC_CRL_ALRF ((uint8_t)0x02) /*!< Alarm Flag */ +#define RTC_CRL_OWF ((uint8_t)0x04) /*!< OverfloW Flag */ +#define RTC_CRL_RSF ((uint8_t)0x08) /*!< Registers Synchronized Flag */ +#define RTC_CRL_CNF ((uint8_t)0x10) /*!< Configuration Flag */ +#define RTC_CRL_RTOFF ((uint8_t)0x20) /*!< RTC operation OFF */ + +/******************************** Bit definition for RTC_PRLH register ********************************/ +#define RTC_PRLH_PRL ((uint16_t)0x000F) /*!< RTC Prescaler Reload Value High */ + +/******************************** Bit definition for RTC_PRLL register ********************************/ +#define RTC_PRLL_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_ALRH register ********************************/ +#define RTC_ALRH_RTC_ALR ((uint16_t)0xFFFF) /*!< RTC Alarm High */ + +/******************************** Bit definition for RTC_ALRL register ********************************/ +#define RTC_ALRL_RTC_ALR ((uint16_t)0xFFFF) /*!< RTC Alarm Low */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Backup Registers (BKP) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for BKP_RTCCR register *********************************/ +#define BKP_RTCCR_CAL ((uint16_t)0x007F) /*!< Calibration value */ +#define BKP_RTCCR_CCO ((uint16_t)0x0080) /*!< Calibration Clock Output */ +#define BKP_RTCCR_ASOE ((uint16_t)0x0100) /*!< Alarm or Second Output Enable */ +#define BKP_RTCCR_ASOS ((uint16_t)0x0200) /*!< Alarm or Second Output Selection */ + +/******************************** Bit definition for BKP_CR register *********************************/ +#define BKP_CR_TPE ((uint8_t)0x01) /*!< TAMPER pin enable */ +#define BKP_CR_TPAL ((uint8_t)0x02) /*!< TAMPER pin active level */ + +/******************************** Bit definition for BKP_CSR register *********************************/ +#define BKP_CSR_CTE ((uint16_t)0x0001) /*!< Clear Tamper event */ +#define BKP_CSR_CTI ((uint16_t)0x0002) /*!< Clear Tamper Interrupt */ +#define BKP_CSR_TPIE ((uint16_t)0x0004) /*!< TAMPER Pin interrupt enable */ +#define BKP_CSR_TEF ((uint16_t)0x0100) /*!< Tamper Event Flag */ +#define BKP_CSR_TIF ((uint16_t)0x0200) /*!< Tamper Interrupt Flag */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Window watchdog (WWDG) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for WWDG_CR register ********************************/ +#define WWDG_CR_T ((uint8_t)0x7F) /*!< T[6:0] bits (7-Bit counter (MSB to LSB)) */ +#define WWDG_CR_T0 ((uint8_t)0x01) /*!< Bit 0 */ +#define WWDG_CR_T1 ((uint8_t)0x02) /*!< Bit 1 */ +#define WWDG_CR_T2 ((uint8_t)0x04) /*!< Bit 2 */ +#define WWDG_CR_T3 ((uint8_t)0x08) /*!< Bit 3 */ +#define WWDG_CR_T4 ((uint8_t)0x10) /*!< Bit 4 */ +#define WWDG_CR_T5 ((uint8_t)0x20) /*!< Bit 5 */ +#define WWDG_CR_T6 ((uint8_t)0x40) /*!< Bit 6 */ + +#define WWDG_CR_WDGA ((uint8_t)0x80) /*!< Activation bit */ + +/******************************** Bit definition for WWDG_CFR register ********************************/ +#define WWDG_CFR_W ((uint16_t)0x007F) /*!< W[6:0] bits (7-bit window value) */ +#define WWDG_CFR_W0 ((uint16_t)0x0001) /*!< Bit 0 */ +#define WWDG_CFR_W1 ((uint16_t)0x0002) /*!< Bit 1 */ +#define WWDG_CFR_W2 ((uint16_t)0x0004) /*!< Bit 2 */ +#define WWDG_CFR_W3 ((uint16_t)0x0008) /*!< Bit 3 */ +#define WWDG_CFR_W4 ((uint16_t)0x0010) /*!< Bit 4 */ +#define WWDG_CFR_W5 ((uint16_t)0x0020) /*!< Bit 5 */ +#define WWDG_CFR_W6 ((uint16_t)0x0040) /*!< Bit 6 */ + +#define WWDG_CFR_WDGTB ((uint16_t)0x0180) /*!< WDGTB[1:0] bits (Timer Base) */ +#define WWDG_CFR_WDGTB0 ((uint16_t)0x0080) /*!< Bit 0 */ +#define WWDG_CFR_WDGTB1 ((uint16_t)0x0100) /*!< Bit 1 */ + +#define WWDG_CFR_EWI ((uint16_t)0x0200) /*!< Early Wakeup Interrupt */ + +/******************************** Bit definition for WWDG_SR register ********************************/ +#define WWDG_SR_EWIF ((uint8_t)0x01) /*!< Early Wakeup Interrupt Flag */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Independent watchdog (IWDG) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for IWDG_KR register ********************************/ +#define IWDG_KR_KEY ((uint16_t)0xFFFF) /*!< Key value (write only, read 0000h) */ + +/******************************** Bit definition for IWDG_PR register ********************************/ +#define IWDG_PR_PR ((uint8_t)0x07) /*!< PR[2:0] (Prescaler divider) */ +#define IWDG_PR_PR_0 ((uint8_t)0x01) /*!< Bit 0 */ +#define IWDG_PR_PR_1 ((uint8_t)0x02) /*!< Bit 1 */ +#define IWDG_PR_PR_2 ((uint8_t)0x04) /*!< Bit 2 */ + +/******************************** Bit definition for IWDG_RLR register ********************************/ +#define IWDG_RLR_RL ((uint16_t)0x0FFF) /*!< Watchdog counter reload value */ + +/******************************** Bit definition for IWDG_SR register ********************************/ +#define IWDG_SR_PVU ((uint8_t)0x01) /*!< Watchdog prescaler value update */ +#define IWDG_SR_RVU ((uint8_t)0x02) /*!< Watchdog counter reload value update */ + + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter */ +/* */ +/******************************************************************************/ + +/******************** Bit definition for ADC_SR register ********************/ +#define ADC_SR_AWD ((uint8_t)0x01) /*!< Analog watchdog flag */ +#define ADC_SR_EOC ((uint8_t)0x02) /*!< End of conversion */ +#define ADC_SR_JEOC ((uint8_t)0x04) /*!< Injected channel end of conversion */ +#define ADC_SR_JSTRT ((uint8_t)0x08) /*!< Injected channel Start flag */ +#define ADC_SR_STRT ((uint8_t)0x10) /*!< Regular channel Start flag */ +#define ADC_SR_EMP ((uint8_t)0x20) /*!< XXXXX flag */ +#define ADC_SR_OVF ((uint8_t)0x40) /*!< XXXXX flag */ + + +/******************* Bit definition for ADC_CR1 register ********************/ +#define ADC_CR1_AWDCH ((uint32_t)0x0000001F) /*!< AWDCH[4:0] bits (Analog watchdog channel select bits) */ +#define ADC_CR1_AWDCH_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_CR1_AWDCH_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_CR1_AWDCH_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_CR1_AWDCH_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_CR1_AWDCH_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_CR1_EOCIE ((uint32_t)0x00000020) /*!< Interrupt enable for EOC */ +#define ADC_CR1_AWDIE ((uint32_t)0x00000040) /*!< Analog Watchdog interrupt enable */ +#define ADC_CR1_JEOCIE ((uint32_t)0x00000080) /*!< Interrupt enable for injected channels */ +#define ADC_CR1_SCAN ((uint32_t)0x00000100) /*!< Scan mode */ +#define ADC_CR1_AWDSGL ((uint32_t)0x00000200) /*!< Enable the watchdog on a single channel in scan mode */ +#define ADC_CR1_JAUTO ((uint32_t)0x00000400) /*!< Automatic injected group conversion */ +#define ADC_CR1_DISCEN ((uint32_t)0x00000800) /*!< Discontinuous mode on regular channels */ +#define ADC_CR1_JDISCEN ((uint32_t)0x00001000) /*!< Discontinuous mode on injected channels */ + +#define ADC_CR1_DISCNUM ((uint32_t)0x0000E000) /*!< DISCNUM[2:0] bits (Discontinuous mode channel count) */ +#define ADC_CR1_DISCNUM_0 ((uint32_t)0x00002000) /*!< Bit 0 */ +#define ADC_CR1_DISCNUM_1 ((uint32_t)0x00004000) /*!< Bit 1 */ +#define ADC_CR1_DISCNUM_2 ((uint32_t)0x00008000) /*!< Bit 2 */ + +#define ADC_CR1_JAWDEN ((uint32_t)0x00400000) /*!< Analog watchdog enable on injected channels */ +#define ADC_CR1_AWDEN ((uint32_t)0x00800000) /*!< Analog watchdog enable on regular channels */ + + +/******************* Bit definition for ADC_CR2 register ********************/ +#define ADC_CR2_ADON ((uint32_t)0x00000001) /*!< A/D Converter ON / OFF */ +#define ADC_CR2_CONT ((uint32_t)0x00000002) /*!< Continuous Conversion */ +#define ADC_CR2_CAL ((uint32_t)0x00000004) /*!< A/D Calibration */ +#define ADC_CR2_RSTCAL ((uint32_t)0x00000008) /*!< Reset Calibration */ +#define ADC_CR2_DMAEN ((uint32_t)0x00000100) /*!< XXXXX */ +#define ADC_CR2_JDMAEN ((uint32_t)0x00000200) /*!< XXXXX */ +#define ADC_CR2_JEXTSYNC ((uint32_t)0x00000400) /*!< XXXXX */ +#define ADC_CR2_ALIGN ((uint32_t)0x00000800) /*!< Data Alignment */ + +#define ADC_CR2_JEXTSEL ((uint32_t)0x00007000) /*!< JEXTSEL[2:0] bits (External event select for injected group) */ +#define ADC_CR2_JEXTSEL_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define ADC_CR2_JEXTSEL_1 ((uint32_t)0x00002000) /*!< Bit 1 */ +#define ADC_CR2_JEXTSEL_2 ((uint32_t)0x00004000) /*!< Bit 2 */ + +#define ADC_CR2_JEXTTRIG ((uint32_t)0x00008000) /*!< External Trigger Conversion mode for injected channels */ +#define ADC_CR2_EXTSYNC ((uint32_t)0x00010000) /*!< XXXXX */ + +#define ADC_CR2_EXTSEL ((uint32_t)0x000E0000) /*!< EXTSEL[2:0] bits (External Event Select for regular group) */ +#define ADC_CR2_EXTSEL_0 ((uint32_t)0x00020000) /*!< Bit 0 */ +#define ADC_CR2_EXTSEL_1 ((uint32_t)0x00040000) /*!< Bit 1 */ +#define ADC_CR2_EXTSEL_2 ((uint32_t)0x00080000) /*!< Bit 2 */ + +#define ADC_CR2_EXTTRIG ((uint32_t)0x00100000) /*!< External Trigger Conversion mode for regular channels */ +#define ADC_CR2_JSWSTART ((uint32_t)0x00200000) /*!< Start Conversion of injected channels */ +#define ADC_CR2_SWSTART ((uint32_t)0x00400000) /*!< Start Conversion of regular channels */ +#define ADC_CR2_TSVREFE ((uint32_t)0x00800000) /*!< Temperature Sensor and VREFINT Enable */ + +/****************** Bit definition for ADC_SMPR1 register *******************/ +#define ADC_SMPR1_SMP10 ((uint32_t)0x00000007) /*!< SMP10[2:0] bits (Channel 10 Sample time selection) */ +#define ADC_SMPR1_SMP10_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SMPR1_SMP10_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SMPR1_SMP10_2 ((uint32_t)0x00000004) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP11 ((uint32_t)0x00000038) /*!< SMP11[2:0] bits (Channel 11 Sample time selection) */ +#define ADC_SMPR1_SMP11_0 ((uint32_t)0x00000008) /*!< Bit 0 */ +#define ADC_SMPR1_SMP11_1 ((uint32_t)0x00000010) /*!< Bit 1 */ +#define ADC_SMPR1_SMP11_2 ((uint32_t)0x00000020) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP12 ((uint32_t)0x000001C0) /*!< SMP12[2:0] bits (Channel 12 Sample time selection) */ +#define ADC_SMPR1_SMP12_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define ADC_SMPR1_SMP12_1 ((uint32_t)0x00000080) /*!< Bit 1 */ +#define ADC_SMPR1_SMP12_2 ((uint32_t)0x00000100) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP13 ((uint32_t)0x00000E00) /*!< SMP13[2:0] bits (Channel 13 Sample time selection) */ +#define ADC_SMPR1_SMP13_0 ((uint32_t)0x00000200) /*!< Bit 0 */ +#define ADC_SMPR1_SMP13_1 ((uint32_t)0x00000400) /*!< Bit 1 */ +#define ADC_SMPR1_SMP13_2 ((uint32_t)0x00000800) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP14 ((uint32_t)0x00007000) /*!< SMP14[2:0] bits (Channel 14 Sample time selection) */ +#define ADC_SMPR1_SMP14_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define ADC_SMPR1_SMP14_1 ((uint32_t)0x00002000) /*!< Bit 1 */ +#define ADC_SMPR1_SMP14_2 ((uint32_t)0x00004000) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP15 ((uint32_t)0x00038000) /*!< SMP15[2:0] bits (Channel 15 Sample time selection) */ +#define ADC_SMPR1_SMP15_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SMPR1_SMP15_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SMPR1_SMP15_2 ((uint32_t)0x00020000) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP16 ((uint32_t)0x001C0000) /*!< SMP16[2:0] bits (Channel 16 Sample time selection) */ +#define ADC_SMPR1_SMP16_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define ADC_SMPR1_SMP16_1 ((uint32_t)0x00080000) /*!< Bit 1 */ +#define ADC_SMPR1_SMP16_2 ((uint32_t)0x00100000) /*!< Bit 2 */ + +#define ADC_SMPR1_SMP17 ((uint32_t)0x00E00000) /*!< SMP17[2:0] bits (Channel 17 Sample time selection) */ +#define ADC_SMPR1_SMP17_0 ((uint32_t)0x00200000) /*!< Bit 0 */ +#define ADC_SMPR1_SMP17_1 ((uint32_t)0x00400000) /*!< Bit 1 */ +#define ADC_SMPR1_SMP17_2 ((uint32_t)0x00800000) /*!< Bit 2 */ + +/****************** Bit definition for ADC_SMPR2 register *******************/ +#define ADC_SMPR2_SMP0 ((uint32_t)0x00000007) /*!< SMP0[2:0] bits (Channel 0 Sample time selection) */ +#define ADC_SMPR2_SMP0_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SMPR2_SMP0_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SMPR2_SMP0_2 ((uint32_t)0x00000004) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP1 ((uint32_t)0x00000038) /*!< SMP1[2:0] bits (Channel 1 Sample time selection) */ +#define ADC_SMPR2_SMP1_0 ((uint32_t)0x00000008) /*!< Bit 0 */ +#define ADC_SMPR2_SMP1_1 ((uint32_t)0x00000010) /*!< Bit 1 */ +#define ADC_SMPR2_SMP1_2 ((uint32_t)0x00000020) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP2 ((uint32_t)0x000001C0) /*!< SMP2[2:0] bits (Channel 2 Sample time selection) */ +#define ADC_SMPR2_SMP2_0 ((uint32_t)0x00000040) /*!< Bit 0 */ +#define ADC_SMPR2_SMP2_1 ((uint32_t)0x00000080) /*!< Bit 1 */ +#define ADC_SMPR2_SMP2_2 ((uint32_t)0x00000100) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP3 ((uint32_t)0x00000E00) /*!< SMP3[2:0] bits (Channel 3 Sample time selection) */ +#define ADC_SMPR2_SMP3_0 ((uint32_t)0x00000200) /*!< Bit 0 */ +#define ADC_SMPR2_SMP3_1 ((uint32_t)0x00000400) /*!< Bit 1 */ +#define ADC_SMPR2_SMP3_2 ((uint32_t)0x00000800) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP4 ((uint32_t)0x00007000) /*!< SMP4[2:0] bits (Channel 4 Sample time selection) */ +#define ADC_SMPR2_SMP4_0 ((uint32_t)0x00001000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP4_1 ((uint32_t)0x00002000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP4_2 ((uint32_t)0x00004000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP5 ((uint32_t)0x00038000) /*!< SMP5[2:0] bits (Channel 5 Sample time selection) */ +#define ADC_SMPR2_SMP5_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP5_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP5_2 ((uint32_t)0x00020000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP6 ((uint32_t)0x001C0000) /*!< SMP6[2:0] bits (Channel 6 Sample time selection) */ +#define ADC_SMPR2_SMP6_0 ((uint32_t)0x00040000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP6_1 ((uint32_t)0x00080000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP6_2 ((uint32_t)0x00100000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP7 ((uint32_t)0x00E00000) /*!< SMP7[2:0] bits (Channel 7 Sample time selection) */ +#define ADC_SMPR2_SMP7_0 ((uint32_t)0x00200000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP7_1 ((uint32_t)0x00400000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP7_2 ((uint32_t)0x00800000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP8 ((uint32_t)0x07000000) /*!< SMP8[2:0] bits (Channel 8 Sample time selection) */ +#define ADC_SMPR2_SMP8_0 ((uint32_t)0x01000000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP8_1 ((uint32_t)0x02000000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP8_2 ((uint32_t)0x04000000) /*!< Bit 2 */ + +#define ADC_SMPR2_SMP9 ((uint32_t)0x38000000) /*!< SMP9[2:0] bits (Channel 9 Sample time selection) */ +#define ADC_SMPR2_SMP9_0 ((uint32_t)0x08000000) /*!< Bit 0 */ +#define ADC_SMPR2_SMP9_1 ((uint32_t)0x10000000) /*!< Bit 1 */ +#define ADC_SMPR2_SMP9_2 ((uint32_t)0x20000000) /*!< Bit 2 */ + +/****************** Bit definition for ADC_JOFR1 register *******************/ +#define ADC_JOFR1_JOFFSET1 ((uint16_t)0x0FFF) /*!< Data offset for injected channel 1 */ + +/****************** Bit definition for ADC_JOFR2 register *******************/ +#define ADC_JOFR2_JOFFSET2 ((uint16_t)0x0FFF) /*!< Data offset for injected channel 2 */ + +/****************** Bit definition for ADC_JOFR3 register *******************/ +#define ADC_JOFR3_JOFFSET3 ((uint16_t)0x0FFF) /*!< Data offset for injected channel 3 */ + +/****************** Bit definition for ADC_JOFR4 register *******************/ +#define ADC_JOFR4_JOFFSET4 ((uint16_t)0x0FFF) /*!< Data offset for injected channel 4 */ + +/******************* Bit definition for ADC_HTR register ********************/ +#define ADC_HTR_HT ((uint16_t)0x0FFF) /*!< Analog watchdog high threshold */ + +/******************* Bit definition for ADC_LTR register ********************/ +#define ADC_LTR_LT ((uint16_t)0x0FFF) /*!< Analog watchdog low threshold */ + +/******************* Bit definition for ADC_SQR1 register *******************/ +#define ADC_SQR1_SQ13 ((uint32_t)0x0000001F) /*!< SQ13[4:0] bits (13th conversion in regular sequence) */ +#define ADC_SQR1_SQ13_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SQR1_SQ13_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SQR1_SQ13_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_SQR1_SQ13_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_SQR1_SQ13_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_SQR1_SQ14 ((uint32_t)0x000003E0) /*!< SQ14[4:0] bits (14th conversion in regular sequence) */ +#define ADC_SQR1_SQ14_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define ADC_SQR1_SQ14_1 ((uint32_t)0x00000040) /*!< Bit 1 */ +#define ADC_SQR1_SQ14_2 ((uint32_t)0x00000080) /*!< Bit 2 */ +#define ADC_SQR1_SQ14_3 ((uint32_t)0x00000100) /*!< Bit 3 */ +#define ADC_SQR1_SQ14_4 ((uint32_t)0x00000200) /*!< Bit 4 */ + +#define ADC_SQR1_SQ15 ((uint32_t)0x00007C00) /*!< SQ15[4:0] bits (15th conversion in regular sequence) */ +#define ADC_SQR1_SQ15_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define ADC_SQR1_SQ15_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define ADC_SQR1_SQ15_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define ADC_SQR1_SQ15_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define ADC_SQR1_SQ15_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define ADC_SQR1_SQ16 ((uint32_t)0x000F8000) /*!< SQ16[4:0] bits (16th conversion in regular sequence) */ +#define ADC_SQR1_SQ16_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SQR1_SQ16_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SQR1_SQ16_2 ((uint32_t)0x00020000) /*!< Bit 2 */ +#define ADC_SQR1_SQ16_3 ((uint32_t)0x00040000) /*!< Bit 3 */ +#define ADC_SQR1_SQ16_4 ((uint32_t)0x00080000) /*!< Bit 4 */ + +#define ADC_SQR1_L ((uint32_t)0x00F00000) /*!< L[3:0] bits (Regular channel sequence length) */ +#define ADC_SQR1_L_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define ADC_SQR1_L_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define ADC_SQR1_L_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define ADC_SQR1_L_3 ((uint32_t)0x00800000) /*!< Bit 3 */ + +/******************* Bit definition for ADC_SQR2 register *******************/ +#define ADC_SQR2_SQ7 ((uint32_t)0x0000001F) /*!< SQ7[4:0] bits (7th conversion in regular sequence) */ +#define ADC_SQR2_SQ7_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SQR2_SQ7_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SQR2_SQ7_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_SQR2_SQ7_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_SQR2_SQ7_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_SQR2_SQ8 ((uint32_t)0x000003E0) /*!< SQ8[4:0] bits (8th conversion in regular sequence) */ +#define ADC_SQR2_SQ8_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define ADC_SQR2_SQ8_1 ((uint32_t)0x00000040) /*!< Bit 1 */ +#define ADC_SQR2_SQ8_2 ((uint32_t)0x00000080) /*!< Bit 2 */ +#define ADC_SQR2_SQ8_3 ((uint32_t)0x00000100) /*!< Bit 3 */ +#define ADC_SQR2_SQ8_4 ((uint32_t)0x00000200) /*!< Bit 4 */ + +#define ADC_SQR2_SQ9 ((uint32_t)0x00007C00) /*!< SQ9[4:0] bits (9th conversion in regular sequence) */ +#define ADC_SQR2_SQ9_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define ADC_SQR2_SQ9_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define ADC_SQR2_SQ9_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define ADC_SQR2_SQ9_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define ADC_SQR2_SQ9_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define ADC_SQR2_SQ10 ((uint32_t)0x000F8000) /*!< SQ10[4:0] bits (10th conversion in regular sequence) */ +#define ADC_SQR2_SQ10_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SQR2_SQ10_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SQR2_SQ10_2 ((uint32_t)0x00020000) /*!< Bit 2 */ +#define ADC_SQR2_SQ10_3 ((uint32_t)0x00040000) /*!< Bit 3 */ +#define ADC_SQR2_SQ10_4 ((uint32_t)0x00080000) /*!< Bit 4 */ + +#define ADC_SQR2_SQ11 ((uint32_t)0x01F00000) /*!< SQ11[4:0] bits (11th conversion in regular sequence) */ +#define ADC_SQR2_SQ11_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define ADC_SQR2_SQ11_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define ADC_SQR2_SQ11_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define ADC_SQR2_SQ11_3 ((uint32_t)0x00800000) /*!< Bit 3 */ +#define ADC_SQR2_SQ11_4 ((uint32_t)0x01000000) /*!< Bit 4 */ + +#define ADC_SQR2_SQ12 ((uint32_t)0x3E000000) /*!< SQ12[4:0] bits (12th conversion in regular sequence) */ +#define ADC_SQR2_SQ12_0 ((uint32_t)0x02000000) /*!< Bit 0 */ +#define ADC_SQR2_SQ12_1 ((uint32_t)0x04000000) /*!< Bit 1 */ +#define ADC_SQR2_SQ12_2 ((uint32_t)0x08000000) /*!< Bit 2 */ +#define ADC_SQR2_SQ12_3 ((uint32_t)0x10000000) /*!< Bit 3 */ +#define ADC_SQR2_SQ12_4 ((uint32_t)0x20000000) /*!< Bit 4 */ + +/******************* Bit definition for ADC_SQR3 register *******************/ +#define ADC_SQR3_SQ1 ((uint32_t)0x0000001F) /*!< SQ1[4:0] bits (1st conversion in regular sequence) */ +#define ADC_SQR3_SQ1_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_SQR3_SQ1_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_SQR3_SQ1_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_SQR3_SQ1_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_SQR3_SQ1_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_SQR3_SQ2 ((uint32_t)0x000003E0) /*!< SQ2[4:0] bits (2nd conversion in regular sequence) */ +#define ADC_SQR3_SQ2_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define ADC_SQR3_SQ2_1 ((uint32_t)0x00000040) /*!< Bit 1 */ +#define ADC_SQR3_SQ2_2 ((uint32_t)0x00000080) /*!< Bit 2 */ +#define ADC_SQR3_SQ2_3 ((uint32_t)0x00000100) /*!< Bit 3 */ +#define ADC_SQR3_SQ2_4 ((uint32_t)0x00000200) /*!< Bit 4 */ + +#define ADC_SQR3_SQ3 ((uint32_t)0x00007C00) /*!< SQ3[4:0] bits (3rd conversion in regular sequence) */ +#define ADC_SQR3_SQ3_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define ADC_SQR3_SQ3_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define ADC_SQR3_SQ3_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define ADC_SQR3_SQ3_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define ADC_SQR3_SQ3_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define ADC_SQR3_SQ4 ((uint32_t)0x000F8000) /*!< SQ4[4:0] bits (4th conversion in regular sequence) */ +#define ADC_SQR3_SQ4_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_SQR3_SQ4_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_SQR3_SQ4_2 ((uint32_t)0x00020000) /*!< Bit 2 */ +#define ADC_SQR3_SQ4_3 ((uint32_t)0x00040000) /*!< Bit 3 */ +#define ADC_SQR3_SQ4_4 ((uint32_t)0x00080000) /*!< Bit 4 */ + +#define ADC_SQR3_SQ5 ((uint32_t)0x01F00000) /*!< SQ5[4:0] bits (5th conversion in regular sequence) */ +#define ADC_SQR3_SQ5_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define ADC_SQR3_SQ5_1 ((uint32_t)0x00200000) /*!< Bit 1 */ +#define ADC_SQR3_SQ5_2 ((uint32_t)0x00400000) /*!< Bit 2 */ +#define ADC_SQR3_SQ5_3 ((uint32_t)0x00800000) /*!< Bit 3 */ +#define ADC_SQR3_SQ5_4 ((uint32_t)0x01000000) /*!< Bit 4 */ + +#define ADC_SQR3_SQ6 ((uint32_t)0x3E000000) /*!< SQ6[4:0] bits (6th conversion in regular sequence) */ +#define ADC_SQR3_SQ6_0 ((uint32_t)0x02000000) /*!< Bit 0 */ +#define ADC_SQR3_SQ6_1 ((uint32_t)0x04000000) /*!< Bit 1 */ +#define ADC_SQR3_SQ6_2 ((uint32_t)0x08000000) /*!< Bit 2 */ +#define ADC_SQR3_SQ6_3 ((uint32_t)0x10000000) /*!< Bit 3 */ +#define ADC_SQR3_SQ6_4 ((uint32_t)0x20000000) /*!< Bit 4 */ + +/******************* Bit definition for ADC_JSQR register *******************/ +#define ADC_JSQR_JSQ1 ((uint32_t)0x0000001F) /*!< JSQ1[4:0] bits (1st conversion in injected sequence) */ +#define ADC_JSQR_JSQ1_0 ((uint32_t)0x00000001) /*!< Bit 0 */ +#define ADC_JSQR_JSQ1_1 ((uint32_t)0x00000002) /*!< Bit 1 */ +#define ADC_JSQR_JSQ1_2 ((uint32_t)0x00000004) /*!< Bit 2 */ +#define ADC_JSQR_JSQ1_3 ((uint32_t)0x00000008) /*!< Bit 3 */ +#define ADC_JSQR_JSQ1_4 ((uint32_t)0x00000010) /*!< Bit 4 */ + +#define ADC_JSQR_JSQ2 ((uint32_t)0x000003E0) /*!< JSQ2[4:0] bits (2nd conversion in injected sequence) */ +#define ADC_JSQR_JSQ2_0 ((uint32_t)0x00000020) /*!< Bit 0 */ +#define ADC_JSQR_JSQ2_1 ((uint32_t)0x00000040) /*!< Bit 1 */ +#define ADC_JSQR_JSQ2_2 ((uint32_t)0x00000080) /*!< Bit 2 */ +#define ADC_JSQR_JSQ2_3 ((uint32_t)0x00000100) /*!< Bit 3 */ +#define ADC_JSQR_JSQ2_4 ((uint32_t)0x00000200) /*!< Bit 4 */ + +#define ADC_JSQR_JSQ3 ((uint32_t)0x00007C00) /*!< JSQ3[4:0] bits (3rd conversion in injected sequence) */ +#define ADC_JSQR_JSQ3_0 ((uint32_t)0x00000400) /*!< Bit 0 */ +#define ADC_JSQR_JSQ3_1 ((uint32_t)0x00000800) /*!< Bit 1 */ +#define ADC_JSQR_JSQ3_2 ((uint32_t)0x00001000) /*!< Bit 2 */ +#define ADC_JSQR_JSQ3_3 ((uint32_t)0x00002000) /*!< Bit 3 */ +#define ADC_JSQR_JSQ3_4 ((uint32_t)0x00004000) /*!< Bit 4 */ + +#define ADC_JSQR_JSQ4 ((uint32_t)0x000F8000) /*!< JSQ4[4:0] bits (4th conversion in injected sequence) */ +#define ADC_JSQR_JSQ4_0 ((uint32_t)0x00008000) /*!< Bit 0 */ +#define ADC_JSQR_JSQ4_1 ((uint32_t)0x00010000) /*!< Bit 1 */ +#define ADC_JSQR_JSQ4_2 ((uint32_t)0x00020000) /*!< Bit 2 */ +#define ADC_JSQR_JSQ4_3 ((uint32_t)0x00040000) /*!< Bit 3 */ +#define ADC_JSQR_JSQ4_4 ((uint32_t)0x00080000) /*!< Bit 4 */ + +#define ADC_JSQR_JL ((uint32_t)0x00300000) /*!< JL[1:0] bits (Injected Sequence length) */ +#define ADC_JSQR_JL_0 ((uint32_t)0x00100000) /*!< Bit 0 */ +#define ADC_JSQR_JL_1 ((uint32_t)0x00200000) /*!< Bit 1 */ + +/******************* Bit definition for ADC_JDR1 register *******************/ +#define ADC_JDR1_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + +/******************* Bit definition for ADC_JDR2 register *******************/ +#define ADC_JDR2_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + +/******************* Bit definition for ADC_JDR3 register *******************/ +#define ADC_JDR3_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + +/******************* Bit definition for ADC_JDR4 register *******************/ +#define ADC_JDR4_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + +/******************** Bit definition for ADC_DR register ********************/ +#define ADC_DR_DATA ((uint32_t)0x0000FFFF) /*!< Regular data */ + + +/******************** Bit definition for ADC_CR3 register ********************/ +#define ADC_CR3_ADVMODE ((uint32_t)0x00000003) /*!< ADVMODE[1:0] bits */ +#define ADC_CR3_SAMCHN ((uint32_t)0x0000000C) /*!< SAMCHN[1:0] bits */ +#define ADC_CR3_VREFCFG ((uint32_t)0x00000030) /*!< VREFCFG[1:0] bits */ +#define ADC_CR3_12BIT ((uint32_t)0x00000040) /*!< 12-bit enable */ +#define ADC_CR3_PRS ((uint32_t)0x0000FF00) /*!< PRS[7:0] bits (Prescaler to the apb clock input) */ +#define ADC_CR3_OVFIE ((uint32_t)0x00010000) /*!< ADC fifo overflow interrupt enable */ +#define ADC_CR3_EMPIE ((uint32_t)0x00020000) /*!< ADC fifo empty interrupt enable */ + +/******************* Bit definition for ADC_JDMAR register *******************/ +#define ADC_JDMAR_JDATA ((uint16_t)0xFFFF) /*!< Injected data */ + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- ISO7816 (ISO) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for ISO_FIFOSR register *********************/ +#define ISO_FIFOSR_FULL (0x1U << 0) +#define ISO_FIFOSR_EMPTY (0x1U << 1) + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- CACHE ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for CACHE_CR register ****************************/ +#define CACHE_CR_LATENCY_Msk (0xFU) +#define CACHE_CR_LATENCY_0WS (0x0U) +#define CACHE_CR_LATENCY_1WS (0x1U) +#define CACHE_CR_LATENCY_2WS (0x2U) +#define CACHE_CR_LATENCY_3WS (0x3U) +#define CACHE_CR_LATENCY_4WS (0x4U) +#define CACHE_CR_LATENCY_5WS (0x5U) +#define CACHE_CR_LATENCY_6WS (0x6U) +#define CACHE_CR_LATENCY_7WS (0x7U) +#define CACHE_CR_LATENCY_8WS (0x8U) +#define CACHE_CR_LATENCY_9WS (0x9U) +#define CACHE_CR_LATENCY_10WS (0xAU) +#define CACHE_CR_LATENCY_11WS (0xBU) +#define CACHE_CR_LATENCY_12WS (0xCU) +#define CACHE_CR_LATENCY_13WS (0xDU) +#define CACHE_CR_LATENCY_14WS (0xEU) +#define CACHE_CR_LATENCY_15WS (0xFU) + +#define CACHE_CR_PREFEN_Msk (0x3U << 4) +#define CACHE_CR_PREFEN_OFF (0x0U << 4) +#define CACHE_CR_PREFEN_ON (0x1U << 4) + +#define CACHE_CR_HIFREQ (0x1U << 8) + +#define CACHE_CR_CHEEN (0x3U << 24) + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- FMC ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for FMC_CON register ********************************/ +#define FMC_CON_OP_Msk (0x1FU) /*!< OP field mask bit */ + +#define FMC_CON_WREN (0x1U << 6) +#define FMC_CON_WR (0x1U << 7) + +#define FMC_CON_SETHLDCNT_Msk (0x7FU << 8) /*!< SETHLDCNT field mask bit */ + +/******************************** Bit definition for FMC_CRCON register ********************************/ +#define FMC_CRCON_CRCEN (0x1U << 0) +#define FMC_CRCON_CRCF (0x1U << 1) +#define FMC_CRCON_PAUSE (0x1U << 2) +#define FMC_CRCON_SLOWRD (0x1U << 3) +#define FMC_CRCON_CRCFIE (0x1U << 8) + +#define FMC_CRCON_PERIOD_Pos (12U) +#define FMC_CRCON_PERIOD_Msk (0xFU << FMC_CRCON_PERIOD_Pos) + +#define FMC_CRCON_CRCLEN_Pos (16U) +#define FMC_CRCON_CRCLEN_Msk (0x3FFU << FMC_CRCON_CRCLEN_Pos) + +/******************************** Bit definition for FMC_STAT register *******************************/ +#define FMC_STAT_ERR (0x1U << 2) + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- ANCTL ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for ANCTL_BGCR2 register ***************************/ +#define ANCTL_BGCR2_TEMPOUTEN (0x1U << 1) + +/******************************** Bit definition for ANCTL_MHSIENR register ***************************/ +#define ANCTL_MHSIENR_MHSION (0x1U << 0) /*!< Internal 8M high-speed clock enable */ + +/******************************** Bit definition for ANCTL_MHSISR register ***************************/ +#define ANCTL_MHSISR_MHSIRDY (0x1U << 0) /*!< Internal 8M high-speed clock ready flag */ + +/******************************** Bit definition for ANCTL_FHSIENR register ***************************/ +#define ANCTL_FHSIENR_FHSION (0x1U << 0) /*!< Internal 48M high-speed clock enable */ + +/******************************** Bit definition for ANCTL_FHSISR register ***************************/ +#define ANCTL_FHSISR_FHSIRDY (0x1U << 0) /*!< Internal 48M high-speed clock ready flag */ + +/******************************** Bit definition for ANCTL_LSIENR register ***************************/ +#define ANCTL_LSIENR_LSION (0x1U << 0) /*!< Internal low-speed oscillator enable */ + +/******************************** Bit definition for ANCTL_LSISR register ***************************/ +#define ANCTL_LSISR_LSIRDY (0x1U << 0) /*!< Internal low-speed oscillator ready flag */ + +/******************************** Bit definition for ANCTL_HSECR0 register ***************************/ +#define ANCTL_HSECR0_HSEON (0x1U << 0) +#define ANCTL_HSECR0_BYPASS (0x1U << 1) + +/******************************** Bit definition for ANCTL_HSECR1 register ***************************/ +#define ANCTL_HSECR1_PADOEN (0x1U << 1) + +/******************************** Bit definition for ANCTL_HSESR register ***************************/ +#define ANCTL_HSESR_HSERDY (0x1U << 0) /*!< External high-speed clock ready flag */ + +/******************************** Bit definition for ANCTL_PLLCR register ***************************/ +#define ANCTL_PLLCR_PLLMUL_Msk (0x3U << 6) +#define ANCTL_PLLCR_PLLMUL_24 (0x0U << 6) +#define ANCTL_PLLCR_PLLMUL_20 (0x1U << 6) +#define ANCTL_PLLCR_PLLMUL_16 (0x2U << 6) +#define ANCTL_PLLCR_PLLMUL_12 (0x3U << 6) + +/******************************** Bit definition for ANCTL_PLLENR register ***************************/ +#define ANCTL_PLLENR_PLLON (0x1U << 0) /*!< PLL enable */ + +/******************************** Bit definition for ANCTL_PLLSR register ***************************/ +#define ANCTL_PLLSR_PLLRDY_Msk (0x3U) + +/******************************** Bit definition for ANCTL_PVDCR register ***************************/ +#define ANCTL_PVDCR_PLS_Msk (0x7U) +#define ANCTL_PVDCR_PLS_LEV0 (0x0U) +#define ANCTL_PVDCR_PLS_LEV1 (0x1U) +#define ANCTL_PVDCR_PLS_LEV2 (0x2U) +#define ANCTL_PVDCR_PLS_LEV3 (0x3U) +#define ANCTL_PVDCR_PLS_LEV4 (0x4U) +#define ANCTL_PVDCR_PLS_LEV5 (0x5U) +#define ANCTL_PVDCR_PLS_LEV6 (0x6U) +#define ANCTL_PVDCR_PLS_LEV7 (0x7U) + +/******************************** Bit definition for ANCTL_PVDENR register ***************************/ +#define ANCTL_PVDENR_PVDE (0x1U << 0) /*!< PVD enable */ + +/******************************** Bit definition for ANCTL_SARENR register ***************************/ +#define ANCTL_SARENR_SAREN (0x1U << 0) /*!< SAR ADC enable */ + +/******************************** Bit definition for ANCTL_USBPCR register ***************************/ +#define ANCTL_USBPCR_USBPEN (0x1U << 0) /*!< USB PHY enable */ +#define ANCTL_USBPCR_DPPUEN (0x1U << 1) +#define ANCTL_USBPCR_HIGHRESEN (0x1U << 2) +#define ANCTL_USBPCR_DMSTEN (0x1U << 3) +#define ANCTL_USBPCR_DPSTEN (0x1U << 4) + +/******************************** Bit definition for ANCTL_CMPACR register ***************************/ +#define ANCTL_CMPACR_PSEL_Msk (0xFU << 0) +#define ANCTL_CMPACR_NSEL_Msk (0xFU << 4) +#define ANCTL_CMPACR_CMPAEN (0x1U << 8) + +/******************************** Bit definition for ANCTL_CMPBCR register ***************************/ +#define ANCTL_CMPBCR_PSEL_Msk (0xFU << 0) +#define ANCTL_CMPBCR_NSEL_Msk (0xFU << 4) +#define ANCTL_CMPBCR_CMPBEN (0x1U << 8) + +/******************************** Bit definition for ANCTL_ISR register ***************************/ +#define ANCTL_ISR_MHSIIS (0x1U << 0) +#define ANCTL_ISR_FHSIIS (0x1U << 1) +#define ANCTL_ISR_LSIIS (0x1U << 2) +#define ANCTL_ISR_HSEIS (0x1U << 3) +#define ANCTL_ISR_LSEIS (0x1U << 4) +#define ANCTL_ISR_PLLIS (0x1U << 5) +#define ANCTL_ISR_DCSSIS (0x1U << 7) + +/******************************** Bit definition for ANCTL_IER register ***************************/ +#define ANCTL_IER_MHSIIE (0x1U << 0) +#define ANCTL_IER_FHSIIE (0x1U << 1) +#define ANCTL_IER_LSIIE (0x1U << 2) +#define ANCTL_IER_HSEIE (0x1U << 3) +#define ANCTL_IER_LSEIE (0x1U << 4) +#define ANCTL_IER_PLLIE (0x1U << 5) + +/******************************** Bit definition for ANCTL_ICR register ***************************/ +#define ANCTL_ICR_MHSIIC (0x1U << 0) +#define ANCTL_ICR_FHSIIC (0x1U << 1) +#define ANCTL_ICR_LSIIC (0x1U << 2) +#define ANCTL_ICR_HSEIC (0x1U << 3) +#define ANCTL_ICR_LSEIC (0x1U << 4) +#define ANCTL_ICR_PLLIC (0x1U << 5) +#define ANCTL_ICR_DCSSIC (0x1U << 7) + +/******************************** Bit definition for ANCTL_DCSSENR register ***************************/ +#define ANCTL_DCSSENR_DCSSON (0x1U << 0) + +/******************************** Bit definition for ANCTL_DCSSCR register ***************************/ +#define ANCTL_DCSSCR_FREQCNT_Msk (0xFFFU) + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Reset and Clock Control (RCC) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for RCC_PLLPRE register ***************************/ +#define RCC_PLLPRE_DIVEN (0x1U << 0) + +#define RCC_PLLPRE_RATIO_Msk (0xFU << 1) +#define RCC_PLLPRE_RATIO_2 (0x0U << 1) +#define RCC_PLLPRE_RATIO_3 (0x1U << 1) +#define RCC_PLLPRE_RATIO_4 (0x2U << 1) +#define RCC_PLLPRE_RATIO_5 (0x3U << 1) +#define RCC_PLLPRE_RATIO_6 (0x4U << 1) +#define RCC_PLLPRE_RATIO_7 (0x5U << 1) +#define RCC_PLLPRE_RATIO_8 (0x6U << 1) +#define RCC_PLLPRE_RATIO_9 (0x7U << 1) +#define RCC_PLLPRE_RATIO_10 (0x8U << 1) +#define RCC_PLLPRE_RATIO_11 (0x9U << 1) +#define RCC_PLLPRE_RATIO_12 (0xAU << 1) +#define RCC_PLLPRE_RATIO_13 (0xBU << 1) +#define RCC_PLLPRE_RATIO_14 (0xCU << 1) +#define RCC_PLLPRE_RATIO_15 (0xDU << 1) +#define RCC_PLLPRE_RATIO_16 (0xEU << 1) + +#define RCC_PLLPRE_SRCEN (0x1U << 5) + +/******************************** Bit definition for RCC_PLLSRC register ***************************/ +#define RCC_PLLSRC_MHSI (0x0U) +#define RCC_PLLSRC_HSE (0x1U) + +/******************************** Bit definition for RCC_MAINCLKSRC register ***************************/ +#define RCC_MAINCLKSRC_MHSI (0x0U) +#define RCC_MAINCLKSRC_FHSI (0x1U) +#define RCC_MAINCLKSRC_PLLCLK (0x2U) +#define RCC_MAINCLKSRC_HSE (0x3U) + +/******************************** Bit definition for RCC_MAINCLKUEN register ***************************/ +#define RCC_MAINCLKUEN_ENA (0x1U) + +/******************************** Bit definition for RCC_USBPRE register ***************************/ +#define RCC_USBPRE_DIVEN (0x1U << 0) + +#define RCC_USBPRE_RATIO_Msk (0x3U << 1) +#define RCC_USBPRE_RATIO_1_5 (0x2U << 1) +#define RCC_USBPRE_RATIO_2 (0x0U << 1) +#define RCC_USBPRE_RATIO_3 (0x1U << 1) + +#define RCC_USBPRE_SRCEN (0x1U << 3) + +/******************************** Bit definition for RCC_AHBPRE register ***************************/ +#define RCC_AHBPRE_DIVEN (0x1U << 0) + +#define RCC_AHBPRE_RATIO_Msk (0x3FU << 1) +#define RCC_AHBPRE_RATIO_2 (0x0U << 1) +#define RCC_AHBPRE_RATIO_3 (0x1U << 1) +#define RCC_AHBPRE_RATIO_4 (0x2U << 1) +#define RCC_AHBPRE_RATIO_5 (0x3U << 1) +#define RCC_AHBPRE_RATIO_6 (0x4U << 1) +#define RCC_AHBPRE_RATIO_7 (0x5U << 1) +#define RCC_AHBPRE_RATIO_8 (0x6U << 1) +#define RCC_AHBPRE_RATIO_9 (0x7U << 1) +#define RCC_AHBPRE_RATIO_10 (0x8U << 1) +#define RCC_AHBPRE_RATIO_11 (0x9U << 1) +#define RCC_AHBPRE_RATIO_12 (0xAU << 1) +#define RCC_AHBPRE_RATIO_13 (0xBU << 1) +#define RCC_AHBPRE_RATIO_14 (0xCU << 1) +#define RCC_AHBPRE_RATIO_15 (0xDU << 1) +#define RCC_AHBPRE_RATIO_16 (0xEU << 1) +#define RCC_AHBPRE_RATIO_17 (0xFU << 1) +#define RCC_AHBPRE_RATIO_18 (0x10U << 1) +#define RCC_AHBPRE_RATIO_19 (0x11U << 1) +#define RCC_AHBPRE_RATIO_20 (0x12U << 1) +#define RCC_AHBPRE_RATIO_21 (0x13U << 1) +#define RCC_AHBPRE_RATIO_22 (0x14U << 1) +#define RCC_AHBPRE_RATIO_23 (0x15U << 1) +#define RCC_AHBPRE_RATIO_24 (0x16U << 1) +#define RCC_AHBPRE_RATIO_25 (0x17U << 1) +#define RCC_AHBPRE_RATIO_26 (0x18U << 1) +#define RCC_AHBPRE_RATIO_27 (0x19U << 1) +#define RCC_AHBPRE_RATIO_28 (0x1AU << 1) +#define RCC_AHBPRE_RATIO_29 (0x1BU << 1) +#define RCC_AHBPRE_RATIO_30 (0x1CU << 1) +#define RCC_AHBPRE_RATIO_31 (0x1DU << 1) +#define RCC_AHBPRE_RATIO_32 (0x1EU << 1) +#define RCC_AHBPRE_RATIO_33 (0x1FU << 1) +#define RCC_AHBPRE_RATIO_34 (0x20U << 1) +#define RCC_AHBPRE_RATIO_35 (0x21U << 1) +#define RCC_AHBPRE_RATIO_36 (0x22U << 1) +#define RCC_AHBPRE_RATIO_37 (0x23U << 1) +#define RCC_AHBPRE_RATIO_38 (0x24U << 1) +#define RCC_AHBPRE_RATIO_39 (0x25U << 1) +#define RCC_AHBPRE_RATIO_40 (0x26U << 1) +#define RCC_AHBPRE_RATIO_41 (0x27U << 1) +#define RCC_AHBPRE_RATIO_42 (0x28U << 1) +#define RCC_AHBPRE_RATIO_43 (0x29U << 1) +#define RCC_AHBPRE_RATIO_44 (0x2AU << 1) +#define RCC_AHBPRE_RATIO_45 (0x2BU << 1) +#define RCC_AHBPRE_RATIO_46 (0x2CU << 1) +#define RCC_AHBPRE_RATIO_47 (0x2DU << 1) +#define RCC_AHBPRE_RATIO_48 (0x2EU << 1) +#define RCC_AHBPRE_RATIO_49 (0x2FU << 1) +#define RCC_AHBPRE_RATIO_50 (0x30U << 1) +#define RCC_AHBPRE_RATIO_51 (0x31U << 1) +#define RCC_AHBPRE_RATIO_52 (0x32U << 1) +#define RCC_AHBPRE_RATIO_53 (0x33U << 1) +#define RCC_AHBPRE_RATIO_54 (0x34U << 1) +#define RCC_AHBPRE_RATIO_55 (0x35U << 1) +#define RCC_AHBPRE_RATIO_56 (0x36U << 1) +#define RCC_AHBPRE_RATIO_57 (0x37U << 1) +#define RCC_AHBPRE_RATIO_58 (0x38U << 1) +#define RCC_AHBPRE_RATIO_59 (0x39U << 1) +#define RCC_AHBPRE_RATIO_60 (0x3AU << 1) +#define RCC_AHBPRE_RATIO_61 (0x3BU << 1) +#define RCC_AHBPRE_RATIO_62 (0x3CU << 1) +#define RCC_AHBPRE_RATIO_63 (0x3DU << 1) +#define RCC_AHBPRE_RATIO_64 (0x3EU << 1) + +/******************************** Bit definition for RCC_APB1PRE register ***************************/ +#define RCC_APB1PRE_DIVEN (0x1U << 0) + +#define RCC_APB1PRE_RATIO_Msk (0x3FU << 1) +#define RCC_APB1PRE_RATIO_2 (0x0U << 1) +#define RCC_APB1PRE_RATIO_3 (0x1U << 1) +#define RCC_APB1PRE_RATIO_4 (0x2U << 1) +#define RCC_APB1PRE_RATIO_5 (0x3U << 1) +#define RCC_APB1PRE_RATIO_6 (0x4U << 1) +#define RCC_APB1PRE_RATIO_7 (0x5U << 1) +#define RCC_APB1PRE_RATIO_8 (0x6U << 1) +#define RCC_APB1PRE_RATIO_9 (0x7U << 1) +#define RCC_APB1PRE_RATIO_10 (0x8U << 1) +#define RCC_APB1PRE_RATIO_11 (0x9U << 1) +#define RCC_APB1PRE_RATIO_12 (0xAU << 1) +#define RCC_APB1PRE_RATIO_13 (0xBU << 1) +#define RCC_APB1PRE_RATIO_14 (0xCU << 1) +#define RCC_APB1PRE_RATIO_15 (0xDU << 1) +#define RCC_APB1PRE_RATIO_16 (0xEU << 1) +#define RCC_APB1PRE_RATIO_17 (0xFU << 1) +#define RCC_APB1PRE_RATIO_18 (0x10U << 1) +#define RCC_APB1PRE_RATIO_19 (0x11U << 1) +#define RCC_APB1PRE_RATIO_20 (0x12U << 1) +#define RCC_APB1PRE_RATIO_21 (0x13U << 1) +#define RCC_APB1PRE_RATIO_22 (0x14U << 1) +#define RCC_APB1PRE_RATIO_23 (0x15U << 1) +#define RCC_APB1PRE_RATIO_24 (0x16U << 1) +#define RCC_APB1PRE_RATIO_25 (0x17U << 1) +#define RCC_APB1PRE_RATIO_26 (0x18U << 1) +#define RCC_APB1PRE_RATIO_27 (0x19U << 1) +#define RCC_APB1PRE_RATIO_28 (0x1AU << 1) +#define RCC_APB1PRE_RATIO_29 (0x1BU << 1) +#define RCC_APB1PRE_RATIO_30 (0x1CU << 1) +#define RCC_APB1PRE_RATIO_31 (0x1DU << 1) +#define RCC_APB1PRE_RATIO_32 (0x1EU << 1) +#define RCC_APB1PRE_RATIO_33 (0x1FU << 1) +#define RCC_APB1PRE_RATIO_34 (0x20U << 1) +#define RCC_APB1PRE_RATIO_35 (0x21U << 1) +#define RCC_APB1PRE_RATIO_36 (0x22U << 1) +#define RCC_APB1PRE_RATIO_37 (0x23U << 1) +#define RCC_APB1PRE_RATIO_38 (0x24U << 1) +#define RCC_APB1PRE_RATIO_39 (0x25U << 1) +#define RCC_APB1PRE_RATIO_40 (0x26U << 1) +#define RCC_APB1PRE_RATIO_41 (0x27U << 1) +#define RCC_APB1PRE_RATIO_42 (0x28U << 1) +#define RCC_APB1PRE_RATIO_43 (0x29U << 1) +#define RCC_APB1PRE_RATIO_44 (0x2AU << 1) +#define RCC_APB1PRE_RATIO_45 (0x2BU << 1) +#define RCC_APB1PRE_RATIO_46 (0x2CU << 1) +#define RCC_APB1PRE_RATIO_47 (0x2DU << 1) +#define RCC_APB1PRE_RATIO_48 (0x2EU << 1) +#define RCC_APB1PRE_RATIO_49 (0x2FU << 1) +#define RCC_APB1PRE_RATIO_50 (0x30U << 1) +#define RCC_APB1PRE_RATIO_51 (0x31U << 1) +#define RCC_APB1PRE_RATIO_52 (0x32U << 1) +#define RCC_APB1PRE_RATIO_53 (0x33U << 1) +#define RCC_APB1PRE_RATIO_54 (0x34U << 1) +#define RCC_APB1PRE_RATIO_55 (0x35U << 1) +#define RCC_APB1PRE_RATIO_56 (0x36U << 1) +#define RCC_APB1PRE_RATIO_57 (0x37U << 1) +#define RCC_APB1PRE_RATIO_58 (0x38U << 1) +#define RCC_APB1PRE_RATIO_59 (0x39U << 1) +#define RCC_APB1PRE_RATIO_60 (0x3AU << 1) +#define RCC_APB1PRE_RATIO_61 (0x3BU << 1) +#define RCC_APB1PRE_RATIO_62 (0x3CU << 1) +#define RCC_APB1PRE_RATIO_63 (0x3DU << 1) +#define RCC_APB1PRE_RATIO_64 (0x3EU << 1) + +#define RCC_APB1PRE_SRCEN (0x1U << 7) + +/******************************** Bit definition for RCC_APB2PRE register ***************************/ +#define RCC_APB2PRE_DIVEN (0x1U << 0) + +#define RCC_APB2PRE_RATIO_Msk (0x3FU << 1) +#define RCC_APB2PRE_RATIO_2 (0x0U << 1) +#define RCC_APB2PRE_RATIO_3 (0x1U << 1) +#define RCC_APB2PRE_RATIO_4 (0x2U << 1) +#define RCC_APB2PRE_RATIO_5 (0x3U << 1) +#define RCC_APB2PRE_RATIO_6 (0x4U << 1) +#define RCC_APB2PRE_RATIO_7 (0x5U << 1) +#define RCC_APB2PRE_RATIO_8 (0x6U << 1) +#define RCC_APB2PRE_RATIO_9 (0x7U << 1) +#define RCC_APB2PRE_RATIO_10 (0x8U << 1) +#define RCC_APB2PRE_RATIO_11 (0x9U << 1) +#define RCC_APB2PRE_RATIO_12 (0xAU << 1) +#define RCC_APB2PRE_RATIO_13 (0xBU << 1) +#define RCC_APB2PRE_RATIO_14 (0xCU << 1) +#define RCC_APB2PRE_RATIO_15 (0xDU << 1) +#define RCC_APB2PRE_RATIO_16 (0xEU << 1) +#define RCC_APB2PRE_RATIO_17 (0xFU << 1) +#define RCC_APB2PRE_RATIO_18 (0x10U << 1) +#define RCC_APB2PRE_RATIO_19 (0x11U << 1) +#define RCC_APB2PRE_RATIO_20 (0x12U << 1) +#define RCC_APB2PRE_RATIO_21 (0x13U << 1) +#define RCC_APB2PRE_RATIO_22 (0x14U << 1) +#define RCC_APB2PRE_RATIO_23 (0x15U << 1) +#define RCC_APB2PRE_RATIO_24 (0x16U << 1) +#define RCC_APB2PRE_RATIO_25 (0x17U << 1) +#define RCC_APB2PRE_RATIO_26 (0x18U << 1) +#define RCC_APB2PRE_RATIO_27 (0x19U << 1) +#define RCC_APB2PRE_RATIO_28 (0x1AU << 1) +#define RCC_APB2PRE_RATIO_29 (0x1BU << 1) +#define RCC_APB2PRE_RATIO_30 (0x1CU << 1) +#define RCC_APB2PRE_RATIO_31 (0x1DU << 1) +#define RCC_APB2PRE_RATIO_32 (0x1EU << 1) +#define RCC_APB2PRE_RATIO_33 (0x1FU << 1) +#define RCC_APB2PRE_RATIO_34 (0x20U << 1) +#define RCC_APB2PRE_RATIO_35 (0x21U << 1) +#define RCC_APB2PRE_RATIO_36 (0x22U << 1) +#define RCC_APB2PRE_RATIO_37 (0x23U << 1) +#define RCC_APB2PRE_RATIO_38 (0x24U << 1) +#define RCC_APB2PRE_RATIO_39 (0x25U << 1) +#define RCC_APB2PRE_RATIO_40 (0x26U << 1) +#define RCC_APB2PRE_RATIO_41 (0x27U << 1) +#define RCC_APB2PRE_RATIO_42 (0x28U << 1) +#define RCC_APB2PRE_RATIO_43 (0x29U << 1) +#define RCC_APB2PRE_RATIO_44 (0x2AU << 1) +#define RCC_APB2PRE_RATIO_45 (0x2BU << 1) +#define RCC_APB2PRE_RATIO_46 (0x2CU << 1) +#define RCC_APB2PRE_RATIO_47 (0x2DU << 1) +#define RCC_APB2PRE_RATIO_48 (0x2EU << 1) +#define RCC_APB2PRE_RATIO_49 (0x2FU << 1) +#define RCC_APB2PRE_RATIO_50 (0x30U << 1) +#define RCC_APB2PRE_RATIO_51 (0x31U << 1) +#define RCC_APB2PRE_RATIO_52 (0x32U << 1) +#define RCC_APB2PRE_RATIO_53 (0x33U << 1) +#define RCC_APB2PRE_RATIO_54 (0x34U << 1) +#define RCC_APB2PRE_RATIO_55 (0x35U << 1) +#define RCC_APB2PRE_RATIO_56 (0x36U << 1) +#define RCC_APB2PRE_RATIO_57 (0x37U << 1) +#define RCC_APB2PRE_RATIO_58 (0x38U << 1) +#define RCC_APB2PRE_RATIO_59 (0x39U << 1) +#define RCC_APB2PRE_RATIO_60 (0x3AU << 1) +#define RCC_APB2PRE_RATIO_61 (0x3BU << 1) +#define RCC_APB2PRE_RATIO_62 (0x3CU << 1) +#define RCC_APB2PRE_RATIO_63 (0x3DU << 1) +#define RCC_APB2PRE_RATIO_64 (0x3EU << 1) + +#define RCC_APB2PRE_SRCEN (0x1U << 7) + +/******************************** Bit definition for RCC_MCLKPRE register ***************************/ +#define RCC_MCLKPRE_DIVEN (0x1U << 0) + +#define RCC_MCLKPRE_RATIO_Msk (0x3FU << 1) +#define RCC_MCLKPRE_RATIO_2 (0x0U << 1) +#define RCC_MCLKPRE_RATIO_3 (0x1U << 1) +#define RCC_MCLKPRE_RATIO_4 (0x2U << 1) +#define RCC_MCLKPRE_RATIO_5 (0x3U << 1) +#define RCC_MCLKPRE_RATIO_6 (0x4U << 1) +#define RCC_MCLKPRE_RATIO_7 (0x5U << 1) +#define RCC_MCLKPRE_RATIO_8 (0x6U << 1) +#define RCC_MCLKPRE_RATIO_9 (0x7U << 1) +#define RCC_MCLKPRE_RATIO_10 (0x8U << 1) +#define RCC_MCLKPRE_RATIO_11 (0x9U << 1) +#define RCC_MCLKPRE_RATIO_12 (0xAU << 1) +#define RCC_MCLKPRE_RATIO_13 (0xBU << 1) +#define RCC_MCLKPRE_RATIO_14 (0xCU << 1) +#define RCC_MCLKPRE_RATIO_15 (0xDU << 1) +#define RCC_MCLKPRE_RATIO_16 (0xEU << 1) +#define RCC_MCLKPRE_RATIO_17 (0xFU << 1) +#define RCC_MCLKPRE_RATIO_18 (0x10U << 1) +#define RCC_MCLKPRE_RATIO_19 (0x11U << 1) +#define RCC_MCLKPRE_RATIO_20 (0x12U << 1) +#define RCC_MCLKPRE_RATIO_21 (0x13U << 1) +#define RCC_MCLKPRE_RATIO_22 (0x14U << 1) +#define RCC_MCLKPRE_RATIO_23 (0x15U << 1) +#define RCC_MCLKPRE_RATIO_24 (0x16U << 1) +#define RCC_MCLKPRE_RATIO_25 (0x17U << 1) +#define RCC_MCLKPRE_RATIO_26 (0x18U << 1) +#define RCC_MCLKPRE_RATIO_27 (0x19U << 1) +#define RCC_MCLKPRE_RATIO_28 (0x1AU << 1) +#define RCC_MCLKPRE_RATIO_29 (0x1BU << 1) +#define RCC_MCLKPRE_RATIO_30 (0x1CU << 1) +#define RCC_MCLKPRE_RATIO_31 (0x1DU << 1) +#define RCC_MCLKPRE_RATIO_32 (0x1EU << 1) +#define RCC_MCLKPRE_RATIO_33 (0x1FU << 1) +#define RCC_MCLKPRE_RATIO_34 (0x20U << 1) +#define RCC_MCLKPRE_RATIO_35 (0x21U << 1) +#define RCC_MCLKPRE_RATIO_36 (0x22U << 1) +#define RCC_MCLKPRE_RATIO_37 (0x23U << 1) +#define RCC_MCLKPRE_RATIO_38 (0x24U << 1) +#define RCC_MCLKPRE_RATIO_39 (0x25U << 1) +#define RCC_MCLKPRE_RATIO_40 (0x26U << 1) +#define RCC_MCLKPRE_RATIO_41 (0x27U << 1) +#define RCC_MCLKPRE_RATIO_42 (0x28U << 1) +#define RCC_MCLKPRE_RATIO_43 (0x29U << 1) +#define RCC_MCLKPRE_RATIO_44 (0x2AU << 1) +#define RCC_MCLKPRE_RATIO_45 (0x2BU << 1) +#define RCC_MCLKPRE_RATIO_46 (0x2CU << 1) +#define RCC_MCLKPRE_RATIO_47 (0x2DU << 1) +#define RCC_MCLKPRE_RATIO_48 (0x2EU << 1) +#define RCC_MCLKPRE_RATIO_49 (0x2FU << 1) +#define RCC_MCLKPRE_RATIO_50 (0x30U << 1) +#define RCC_MCLKPRE_RATIO_51 (0x31U << 1) +#define RCC_MCLKPRE_RATIO_52 (0x32U << 1) +#define RCC_MCLKPRE_RATIO_53 (0x33U << 1) +#define RCC_MCLKPRE_RATIO_54 (0x34U << 1) +#define RCC_MCLKPRE_RATIO_55 (0x35U << 1) +#define RCC_MCLKPRE_RATIO_56 (0x36U << 1) +#define RCC_MCLKPRE_RATIO_57 (0x37U << 1) +#define RCC_MCLKPRE_RATIO_58 (0x38U << 1) +#define RCC_MCLKPRE_RATIO_59 (0x39U << 1) +#define RCC_MCLKPRE_RATIO_60 (0x3AU << 1) +#define RCC_MCLKPRE_RATIO_61 (0x3BU << 1) +#define RCC_MCLKPRE_RATIO_62 (0x3CU << 1) +#define RCC_MCLKPRE_RATIO_63 (0x3DU << 1) +#define RCC_MCLKPRE_RATIO_64 (0x3EU << 1) + +#define RCC_MCLKPRE_SRCEN (0x1U << 7) + +/******************************** Bit definition for RCC_I2SPRE register ***************************/ +#define RCC_I2SPRE_DIVEN (0x1U << 0) + +#define RCC_I2SPRE_RATIO_Msk (0x1FFU << 1) +#define RCC_I2SPRE_RATIO_2 (0x0U << 1) +#define RCC_I2SPRE_RATIO_3 (0x1U << 1) +#define RCC_I2SPRE_RATIO_4 (0x2U << 1) +#define RCC_I2SPRE_RATIO_5 (0x3U << 1) +#define RCC_I2SPRE_RATIO_6 (0x4U << 1) +#define RCC_I2SPRE_RATIO_7 (0x5U << 1) +#define RCC_I2SPRE_RATIO_8 (0x6U << 1) +#define RCC_I2SPRE_RATIO_9 (0x7U << 1) +#define RCC_I2SPRE_RATIO_10 (0x8U << 1) +#define RCC_I2SPRE_RATIO_11 (0x9U << 1) +#define RCC_I2SPRE_RATIO_12 (0xAU << 1) +#define RCC_I2SPRE_RATIO_13 (0xBU << 1) +#define RCC_I2SPRE_RATIO_14 (0xCU << 1) +#define RCC_I2SPRE_RATIO_15 (0xDU << 1) +#define RCC_I2SPRE_RATIO_16 (0xEU << 1) +#define RCC_I2SPRE_RATIO_17 (0xFU << 1) +#define RCC_I2SPRE_RATIO_18 (0x10U << 1) +#define RCC_I2SPRE_RATIO_19 (0x11U << 1) +#define RCC_I2SPRE_RATIO_20 (0x12U << 1) +#define RCC_I2SPRE_RATIO_21 (0x13U << 1) +#define RCC_I2SPRE_RATIO_22 (0x14U << 1) +#define RCC_I2SPRE_RATIO_23 (0x15U << 1) +#define RCC_I2SPRE_RATIO_24 (0x16U << 1) +#define RCC_I2SPRE_RATIO_25 (0x17U << 1) +#define RCC_I2SPRE_RATIO_26 (0x18U << 1) +#define RCC_I2SPRE_RATIO_27 (0x19U << 1) +#define RCC_I2SPRE_RATIO_28 (0x1AU << 1) +#define RCC_I2SPRE_RATIO_29 (0x1BU << 1) +#define RCC_I2SPRE_RATIO_30 (0x1CU << 1) +#define RCC_I2SPRE_RATIO_31 (0x1DU << 1) +#define RCC_I2SPRE_RATIO_32 (0x1EU << 1) +#define RCC_I2SPRE_RATIO_33 (0x1FU << 1) +#define RCC_I2SPRE_RATIO_34 (0x20U << 1) +#define RCC_I2SPRE_RATIO_35 (0x21U << 1) +#define RCC_I2SPRE_RATIO_36 (0x22U << 1) +#define RCC_I2SPRE_RATIO_37 (0x23U << 1) +#define RCC_I2SPRE_RATIO_38 (0x24U << 1) +#define RCC_I2SPRE_RATIO_39 (0x25U << 1) +#define RCC_I2SPRE_RATIO_40 (0x26U << 1) +#define RCC_I2SPRE_RATIO_41 (0x27U << 1) +#define RCC_I2SPRE_RATIO_42 (0x28U << 1) +#define RCC_I2SPRE_RATIO_43 (0x29U << 1) +#define RCC_I2SPRE_RATIO_44 (0x2AU << 1) +#define RCC_I2SPRE_RATIO_45 (0x2BU << 1) +#define RCC_I2SPRE_RATIO_46 (0x2CU << 1) +#define RCC_I2SPRE_RATIO_47 (0x2DU << 1) +#define RCC_I2SPRE_RATIO_48 (0x2EU << 1) +#define RCC_I2SPRE_RATIO_49 (0x2FU << 1) +#define RCC_I2SPRE_RATIO_50 (0x30U << 1) +#define RCC_I2SPRE_RATIO_51 (0x31U << 1) +#define RCC_I2SPRE_RATIO_52 (0x32U << 1) +#define RCC_I2SPRE_RATIO_53 (0x33U << 1) +#define RCC_I2SPRE_RATIO_54 (0x34U << 1) +#define RCC_I2SPRE_RATIO_55 (0x35U << 1) +#define RCC_I2SPRE_RATIO_56 (0x36U << 1) +#define RCC_I2SPRE_RATIO_57 (0x37U << 1) +#define RCC_I2SPRE_RATIO_58 (0x38U << 1) +#define RCC_I2SPRE_RATIO_59 (0x39U << 1) +#define RCC_I2SPRE_RATIO_60 (0x3AU << 1) +#define RCC_I2SPRE_RATIO_61 (0x3BU << 1) +#define RCC_I2SPRE_RATIO_62 (0x3CU << 1) +#define RCC_I2SPRE_RATIO_63 (0x3DU << 1) +#define RCC_I2SPRE_RATIO_64 (0x3EU << 1) +#define RCC_I2SPRE_RATIO_65 (0x3FU << 1) +#define RCC_I2SPRE_RATIO_66 (0x40U << 1) +#define RCC_I2SPRE_RATIO_67 (0x41U << 1) +#define RCC_I2SPRE_RATIO_68 (0x42U << 1) +#define RCC_I2SPRE_RATIO_69 (0x43U << 1) +#define RCC_I2SPRE_RATIO_70 (0x44U << 1) +#define RCC_I2SPRE_RATIO_71 (0x45U << 1) +#define RCC_I2SPRE_RATIO_72 (0x46U << 1) +#define RCC_I2SPRE_RATIO_73 (0x47U << 1) +#define RCC_I2SPRE_RATIO_74 (0x48U << 1) +#define RCC_I2SPRE_RATIO_75 (0x49U << 1) +#define RCC_I2SPRE_RATIO_76 (0x4AU << 1) +#define RCC_I2SPRE_RATIO_77 (0x4BU << 1) +#define RCC_I2SPRE_RATIO_78 (0x4CU << 1) +#define RCC_I2SPRE_RATIO_79 (0x4DU << 1) +#define RCC_I2SPRE_RATIO_80 (0x4EU << 1) +#define RCC_I2SPRE_RATIO_81 (0x4FU << 1) +#define RCC_I2SPRE_RATIO_82 (0x50U << 1) +#define RCC_I2SPRE_RATIO_83 (0x51U << 1) +#define RCC_I2SPRE_RATIO_84 (0x52U << 1) +#define RCC_I2SPRE_RATIO_85 (0x53U << 1) +#define RCC_I2SPRE_RATIO_86 (0x54U << 1) +#define RCC_I2SPRE_RATIO_87 (0x55U << 1) +#define RCC_I2SPRE_RATIO_88 (0x56U << 1) +#define RCC_I2SPRE_RATIO_89 (0x57U << 1) +#define RCC_I2SPRE_RATIO_90 (0x58U << 1) +#define RCC_I2SPRE_RATIO_91 (0x59U << 1) +#define RCC_I2SPRE_RATIO_92 (0x5AU << 1) +#define RCC_I2SPRE_RATIO_93 (0x5BU << 1) +#define RCC_I2SPRE_RATIO_94 (0x5CU << 1) +#define RCC_I2SPRE_RATIO_95 (0x5DU << 1) +#define RCC_I2SPRE_RATIO_96 (0x5EU << 1) +#define RCC_I2SPRE_RATIO_97 (0x5FU << 1) +#define RCC_I2SPRE_RATIO_98 (0x60U << 1) +#define RCC_I2SPRE_RATIO_99 (0x61U << 1) +#define RCC_I2SPRE_RATIO_100 (0x62U << 1) +#define RCC_I2SPRE_RATIO_101 (0x63U << 1) +#define RCC_I2SPRE_RATIO_102 (0x64U << 1) +#define RCC_I2SPRE_RATIO_103 (0x65U << 1) +#define RCC_I2SPRE_RATIO_104 (0x66U << 1) +#define RCC_I2SPRE_RATIO_105 (0x67U << 1) +#define RCC_I2SPRE_RATIO_106 (0x68U << 1) +#define RCC_I2SPRE_RATIO_107 (0x69U << 1) +#define RCC_I2SPRE_RATIO_108 (0x6AU << 1) +#define RCC_I2SPRE_RATIO_109 (0x6BU << 1) +#define RCC_I2SPRE_RATIO_110 (0x6CU << 1) +#define RCC_I2SPRE_RATIO_111 (0x6DU << 1) +#define RCC_I2SPRE_RATIO_112 (0x6EU << 1) +#define RCC_I2SPRE_RATIO_113 (0x6FU << 1) +#define RCC_I2SPRE_RATIO_114 (0x70U << 1) +#define RCC_I2SPRE_RATIO_115 (0x71U << 1) +#define RCC_I2SPRE_RATIO_116 (0x72U << 1) +#define RCC_I2SPRE_RATIO_117 (0x73U << 1) +#define RCC_I2SPRE_RATIO_118 (0x74U << 1) +#define RCC_I2SPRE_RATIO_119 (0x75U << 1) +#define RCC_I2SPRE_RATIO_120 (0x76U << 1) +#define RCC_I2SPRE_RATIO_121 (0x77U << 1) +#define RCC_I2SPRE_RATIO_122 (0x78U << 1) +#define RCC_I2SPRE_RATIO_123 (0x79U << 1) +#define RCC_I2SPRE_RATIO_124 (0x7AU << 1) +#define RCC_I2SPRE_RATIO_125 (0x7BU << 1) +#define RCC_I2SPRE_RATIO_126 (0x7CU << 1) +#define RCC_I2SPRE_RATIO_127 (0x7DU << 1) +#define RCC_I2SPRE_RATIO_128 (0x7EU << 1) +#define RCC_I2SPRE_RATIO_129 (0x7FU << 1) +#define RCC_I2SPRE_RATIO_130 (0x80U << 1) +#define RCC_I2SPRE_RATIO_131 (0x81U << 1) +#define RCC_I2SPRE_RATIO_132 (0x82U << 1) +#define RCC_I2SPRE_RATIO_133 (0x83U << 1) +#define RCC_I2SPRE_RATIO_134 (0x84U << 1) +#define RCC_I2SPRE_RATIO_135 (0x85U << 1) +#define RCC_I2SPRE_RATIO_136 (0x86U << 1) +#define RCC_I2SPRE_RATIO_137 (0x87U << 1) +#define RCC_I2SPRE_RATIO_138 (0x88U << 1) +#define RCC_I2SPRE_RATIO_139 (0x89U << 1) +#define RCC_I2SPRE_RATIO_140 (0x8AU << 1) +#define RCC_I2SPRE_RATIO_141 (0x8BU << 1) +#define RCC_I2SPRE_RATIO_142 (0x8CU << 1) +#define RCC_I2SPRE_RATIO_143 (0x8DU << 1) +#define RCC_I2SPRE_RATIO_144 (0x8EU << 1) +#define RCC_I2SPRE_RATIO_145 (0x8FU << 1) +#define RCC_I2SPRE_RATIO_146 (0x90U << 1) +#define RCC_I2SPRE_RATIO_147 (0x91U << 1) +#define RCC_I2SPRE_RATIO_148 (0x92U << 1) +#define RCC_I2SPRE_RATIO_149 (0x93U << 1) +#define RCC_I2SPRE_RATIO_150 (0x94U << 1) +#define RCC_I2SPRE_RATIO_151 (0x95U << 1) +#define RCC_I2SPRE_RATIO_152 (0x96U << 1) +#define RCC_I2SPRE_RATIO_153 (0x97U << 1) +#define RCC_I2SPRE_RATIO_154 (0x98U << 1) +#define RCC_I2SPRE_RATIO_155 (0x99U << 1) +#define RCC_I2SPRE_RATIO_156 (0x9AU << 1) +#define RCC_I2SPRE_RATIO_157 (0x9BU << 1) +#define RCC_I2SPRE_RATIO_158 (0x9CU << 1) +#define RCC_I2SPRE_RATIO_159 (0x9DU << 1) +#define RCC_I2SPRE_RATIO_160 (0x9EU << 1) +#define RCC_I2SPRE_RATIO_161 (0x9FU << 1) +#define RCC_I2SPRE_RATIO_162 (0xA0U << 1) +#define RCC_I2SPRE_RATIO_163 (0xA1U << 1) +#define RCC_I2SPRE_RATIO_164 (0xA2U << 1) +#define RCC_I2SPRE_RATIO_165 (0xA3U << 1) +#define RCC_I2SPRE_RATIO_166 (0xA4U << 1) +#define RCC_I2SPRE_RATIO_167 (0xA5U << 1) +#define RCC_I2SPRE_RATIO_168 (0xA6U << 1) +#define RCC_I2SPRE_RATIO_169 (0xA7U << 1) +#define RCC_I2SPRE_RATIO_170 (0xA8U << 1) +#define RCC_I2SPRE_RATIO_171 (0xA9U << 1) +#define RCC_I2SPRE_RATIO_172 (0xAAU << 1) +#define RCC_I2SPRE_RATIO_173 (0xABU << 1) +#define RCC_I2SPRE_RATIO_174 (0xACU << 1) +#define RCC_I2SPRE_RATIO_175 (0xADU << 1) +#define RCC_I2SPRE_RATIO_176 (0xAEU << 1) +#define RCC_I2SPRE_RATIO_177 (0xAFU << 1) +#define RCC_I2SPRE_RATIO_178 (0xB0U << 1) +#define RCC_I2SPRE_RATIO_179 (0xB1U << 1) +#define RCC_I2SPRE_RATIO_180 (0xB2U << 1) +#define RCC_I2SPRE_RATIO_181 (0xB3U << 1) +#define RCC_I2SPRE_RATIO_182 (0xB4U << 1) +#define RCC_I2SPRE_RATIO_183 (0xB5U << 1) +#define RCC_I2SPRE_RATIO_184 (0xB6U << 1) +#define RCC_I2SPRE_RATIO_185 (0xB7U << 1) +#define RCC_I2SPRE_RATIO_186 (0xB8U << 1) +#define RCC_I2SPRE_RATIO_187 (0xB9U << 1) +#define RCC_I2SPRE_RATIO_188 (0xBAU << 1) +#define RCC_I2SPRE_RATIO_189 (0xBBU << 1) +#define RCC_I2SPRE_RATIO_190 (0xBCU << 1) +#define RCC_I2SPRE_RATIO_191 (0xBDU << 1) +#define RCC_I2SPRE_RATIO_192 (0xBEU << 1) +#define RCC_I2SPRE_RATIO_193 (0xBFU << 1) +#define RCC_I2SPRE_RATIO_194 (0xC0U << 1) +#define RCC_I2SPRE_RATIO_195 (0xC1U << 1) +#define RCC_I2SPRE_RATIO_196 (0xC2U << 1) +#define RCC_I2SPRE_RATIO_197 (0xC3U << 1) +#define RCC_I2SPRE_RATIO_198 (0xC4U << 1) +#define RCC_I2SPRE_RATIO_199 (0xC5U << 1) +#define RCC_I2SPRE_RATIO_200 (0xC6U << 1) +#define RCC_I2SPRE_RATIO_201 (0xC7U << 1) +#define RCC_I2SPRE_RATIO_202 (0xC8U << 1) +#define RCC_I2SPRE_RATIO_203 (0xC9U << 1) +#define RCC_I2SPRE_RATIO_204 (0xCAU << 1) +#define RCC_I2SPRE_RATIO_205 (0xCBU << 1) +#define RCC_I2SPRE_RATIO_206 (0xCCU << 1) +#define RCC_I2SPRE_RATIO_207 (0xCDU << 1) +#define RCC_I2SPRE_RATIO_208 (0xCEU << 1) +#define RCC_I2SPRE_RATIO_209 (0xCFU << 1) +#define RCC_I2SPRE_RATIO_210 (0xD0U << 1) +#define RCC_I2SPRE_RATIO_211 (0xD1U << 1) +#define RCC_I2SPRE_RATIO_212 (0xD2U << 1) +#define RCC_I2SPRE_RATIO_213 (0xD3U << 1) +#define RCC_I2SPRE_RATIO_214 (0xD4U << 1) +#define RCC_I2SPRE_RATIO_215 (0xD5U << 1) +#define RCC_I2SPRE_RATIO_216 (0xD6U << 1) +#define RCC_I2SPRE_RATIO_217 (0xD7U << 1) +#define RCC_I2SPRE_RATIO_218 (0xD8U << 1) +#define RCC_I2SPRE_RATIO_219 (0xD9U << 1) +#define RCC_I2SPRE_RATIO_220 (0xDAU << 1) +#define RCC_I2SPRE_RATIO_221 (0xDBU << 1) +#define RCC_I2SPRE_RATIO_222 (0xDCU << 1) +#define RCC_I2SPRE_RATIO_223 (0xDDU << 1) +#define RCC_I2SPRE_RATIO_224 (0xDEU << 1) +#define RCC_I2SPRE_RATIO_225 (0xDFU << 1) +#define RCC_I2SPRE_RATIO_226 (0xE0U << 1) +#define RCC_I2SPRE_RATIO_227 (0xE1U << 1) +#define RCC_I2SPRE_RATIO_228 (0xE2U << 1) +#define RCC_I2SPRE_RATIO_229 (0xE3U << 1) +#define RCC_I2SPRE_RATIO_230 (0xE4U << 1) +#define RCC_I2SPRE_RATIO_231 (0xE5U << 1) +#define RCC_I2SPRE_RATIO_232 (0xE6U << 1) +#define RCC_I2SPRE_RATIO_233 (0xE7U << 1) +#define RCC_I2SPRE_RATIO_234 (0xE8U << 1) +#define RCC_I2SPRE_RATIO_235 (0xE9U << 1) +#define RCC_I2SPRE_RATIO_236 (0xEAU << 1) +#define RCC_I2SPRE_RATIO_237 (0xEBU << 1) +#define RCC_I2SPRE_RATIO_238 (0xECU << 1) +#define RCC_I2SPRE_RATIO_239 (0xEDU << 1) +#define RCC_I2SPRE_RATIO_240 (0xEEU << 1) +#define RCC_I2SPRE_RATIO_241 (0xEFU << 1) +#define RCC_I2SPRE_RATIO_242 (0xF0U << 1) +#define RCC_I2SPRE_RATIO_243 (0xF1U << 1) +#define RCC_I2SPRE_RATIO_244 (0xF2U << 1) +#define RCC_I2SPRE_RATIO_245 (0xF3U << 1) +#define RCC_I2SPRE_RATIO_246 (0xF4U << 1) +#define RCC_I2SPRE_RATIO_247 (0xF5U << 1) +#define RCC_I2SPRE_RATIO_248 (0xF6U << 1) +#define RCC_I2SPRE_RATIO_249 (0xF7U << 1) +#define RCC_I2SPRE_RATIO_250 (0xF8U << 1) +#define RCC_I2SPRE_RATIO_251 (0xF9U << 1) +#define RCC_I2SPRE_RATIO_252 (0xFAU << 1) +#define RCC_I2SPRE_RATIO_253 (0xFBU << 1) +#define RCC_I2SPRE_RATIO_254 (0xFCU << 1) +#define RCC_I2SPRE_RATIO_255 (0xFDU << 1) +#define RCC_I2SPRE_RATIO_256 (0xFEU << 1) +#define RCC_I2SPRE_RATIO_257 (0xFFU << 1) +#define RCC_I2SPRE_RATIO_258 (0x100U << 1) +#define RCC_I2SPRE_RATIO_259 (0x101U << 1) +#define RCC_I2SPRE_RATIO_260 (0x102U << 1) +#define RCC_I2SPRE_RATIO_261 (0x103U << 1) +#define RCC_I2SPRE_RATIO_262 (0x104U << 1) +#define RCC_I2SPRE_RATIO_263 (0x105U << 1) +#define RCC_I2SPRE_RATIO_264 (0x106U << 1) +#define RCC_I2SPRE_RATIO_265 (0x107U << 1) +#define RCC_I2SPRE_RATIO_266 (0x108U << 1) +#define RCC_I2SPRE_RATIO_267 (0x109U << 1) +#define RCC_I2SPRE_RATIO_268 (0x10AU << 1) +#define RCC_I2SPRE_RATIO_269 (0x10BU << 1) +#define RCC_I2SPRE_RATIO_270 (0x10CU << 1) +#define RCC_I2SPRE_RATIO_271 (0x10DU << 1) +#define RCC_I2SPRE_RATIO_272 (0x10EU << 1) +#define RCC_I2SPRE_RATIO_273 (0x10FU << 1) +#define RCC_I2SPRE_RATIO_274 (0x110U << 1) +#define RCC_I2SPRE_RATIO_275 (0x111U << 1) +#define RCC_I2SPRE_RATIO_276 (0x112U << 1) +#define RCC_I2SPRE_RATIO_277 (0x113U << 1) +#define RCC_I2SPRE_RATIO_278 (0x114U << 1) +#define RCC_I2SPRE_RATIO_279 (0x115U << 1) +#define RCC_I2SPRE_RATIO_280 (0x116U << 1) +#define RCC_I2SPRE_RATIO_281 (0x117U << 1) +#define RCC_I2SPRE_RATIO_282 (0x118U << 1) +#define RCC_I2SPRE_RATIO_283 (0x119U << 1) +#define RCC_I2SPRE_RATIO_284 (0x11AU << 1) +#define RCC_I2SPRE_RATIO_285 (0x11BU << 1) +#define RCC_I2SPRE_RATIO_286 (0x11CU << 1) +#define RCC_I2SPRE_RATIO_287 (0x11DU << 1) +#define RCC_I2SPRE_RATIO_288 (0x11EU << 1) +#define RCC_I2SPRE_RATIO_289 (0x11FU << 1) +#define RCC_I2SPRE_RATIO_290 (0x120U << 1) +#define RCC_I2SPRE_RATIO_291 (0x121U << 1) +#define RCC_I2SPRE_RATIO_292 (0x122U << 1) +#define RCC_I2SPRE_RATIO_293 (0x123U << 1) +#define RCC_I2SPRE_RATIO_294 (0x124U << 1) +#define RCC_I2SPRE_RATIO_295 (0x125U << 1) +#define RCC_I2SPRE_RATIO_296 (0x126U << 1) +#define RCC_I2SPRE_RATIO_297 (0x127U << 1) +#define RCC_I2SPRE_RATIO_298 (0x128U << 1) +#define RCC_I2SPRE_RATIO_299 (0x129U << 1) +#define RCC_I2SPRE_RATIO_300 (0x12AU << 1) +#define RCC_I2SPRE_RATIO_301 (0x12BU << 1) +#define RCC_I2SPRE_RATIO_302 (0x12CU << 1) +#define RCC_I2SPRE_RATIO_303 (0x12DU << 1) +#define RCC_I2SPRE_RATIO_304 (0x12EU << 1) +#define RCC_I2SPRE_RATIO_305 (0x12FU << 1) +#define RCC_I2SPRE_RATIO_306 (0x130U << 1) +#define RCC_I2SPRE_RATIO_307 (0x131U << 1) +#define RCC_I2SPRE_RATIO_308 (0x132U << 1) +#define RCC_I2SPRE_RATIO_309 (0x133U << 1) +#define RCC_I2SPRE_RATIO_310 (0x134U << 1) +#define RCC_I2SPRE_RATIO_311 (0x135U << 1) +#define RCC_I2SPRE_RATIO_312 (0x136U << 1) +#define RCC_I2SPRE_RATIO_313 (0x137U << 1) +#define RCC_I2SPRE_RATIO_314 (0x138U << 1) +#define RCC_I2SPRE_RATIO_315 (0x139U << 1) +#define RCC_I2SPRE_RATIO_316 (0x13AU << 1) +#define RCC_I2SPRE_RATIO_317 (0x13BU << 1) +#define RCC_I2SPRE_RATIO_318 (0x13CU << 1) +#define RCC_I2SPRE_RATIO_319 (0x13DU << 1) +#define RCC_I2SPRE_RATIO_320 (0x13EU << 1) +#define RCC_I2SPRE_RATIO_321 (0x13FU << 1) +#define RCC_I2SPRE_RATIO_322 (0x140U << 1) +#define RCC_I2SPRE_RATIO_323 (0x141U << 1) +#define RCC_I2SPRE_RATIO_324 (0x142U << 1) +#define RCC_I2SPRE_RATIO_325 (0x143U << 1) +#define RCC_I2SPRE_RATIO_326 (0x144U << 1) +#define RCC_I2SPRE_RATIO_327 (0x145U << 1) +#define RCC_I2SPRE_RATIO_328 (0x146U << 1) +#define RCC_I2SPRE_RATIO_329 (0x147U << 1) +#define RCC_I2SPRE_RATIO_330 (0x148U << 1) +#define RCC_I2SPRE_RATIO_331 (0x149U << 1) +#define RCC_I2SPRE_RATIO_332 (0x14AU << 1) +#define RCC_I2SPRE_RATIO_333 (0x14BU << 1) +#define RCC_I2SPRE_RATIO_334 (0x14CU << 1) +#define RCC_I2SPRE_RATIO_335 (0x14DU << 1) +#define RCC_I2SPRE_RATIO_336 (0x14EU << 1) +#define RCC_I2SPRE_RATIO_337 (0x14FU << 1) +#define RCC_I2SPRE_RATIO_338 (0x150U << 1) +#define RCC_I2SPRE_RATIO_339 (0x151U << 1) +#define RCC_I2SPRE_RATIO_340 (0x152U << 1) +#define RCC_I2SPRE_RATIO_341 (0x153U << 1) +#define RCC_I2SPRE_RATIO_342 (0x154U << 1) +#define RCC_I2SPRE_RATIO_343 (0x155U << 1) +#define RCC_I2SPRE_RATIO_344 (0x156U << 1) +#define RCC_I2SPRE_RATIO_345 (0x157U << 1) +#define RCC_I2SPRE_RATIO_346 (0x158U << 1) +#define RCC_I2SPRE_RATIO_347 (0x159U << 1) +#define RCC_I2SPRE_RATIO_348 (0x15AU << 1) +#define RCC_I2SPRE_RATIO_349 (0x15BU << 1) +#define RCC_I2SPRE_RATIO_350 (0x15CU << 1) +#define RCC_I2SPRE_RATIO_351 (0x15DU << 1) +#define RCC_I2SPRE_RATIO_352 (0x15EU << 1) +#define RCC_I2SPRE_RATIO_353 (0x15FU << 1) +#define RCC_I2SPRE_RATIO_354 (0x160U << 1) +#define RCC_I2SPRE_RATIO_355 (0x161U << 1) +#define RCC_I2SPRE_RATIO_356 (0x162U << 1) +#define RCC_I2SPRE_RATIO_357 (0x163U << 1) +#define RCC_I2SPRE_RATIO_358 (0x164U << 1) +#define RCC_I2SPRE_RATIO_359 (0x165U << 1) +#define RCC_I2SPRE_RATIO_360 (0x166U << 1) +#define RCC_I2SPRE_RATIO_361 (0x167U << 1) +#define RCC_I2SPRE_RATIO_362 (0x168U << 1) +#define RCC_I2SPRE_RATIO_363 (0x169U << 1) +#define RCC_I2SPRE_RATIO_364 (0x16AU << 1) +#define RCC_I2SPRE_RATIO_365 (0x16BU << 1) +#define RCC_I2SPRE_RATIO_366 (0x16CU << 1) +#define RCC_I2SPRE_RATIO_367 (0x16DU << 1) +#define RCC_I2SPRE_RATIO_368 (0x16EU << 1) +#define RCC_I2SPRE_RATIO_369 (0x16FU << 1) +#define RCC_I2SPRE_RATIO_370 (0x170U << 1) +#define RCC_I2SPRE_RATIO_371 (0x171U << 1) +#define RCC_I2SPRE_RATIO_372 (0x172U << 1) +#define RCC_I2SPRE_RATIO_373 (0x173U << 1) +#define RCC_I2SPRE_RATIO_374 (0x174U << 1) +#define RCC_I2SPRE_RATIO_375 (0x175U << 1) +#define RCC_I2SPRE_RATIO_376 (0x176U << 1) +#define RCC_I2SPRE_RATIO_377 (0x177U << 1) +#define RCC_I2SPRE_RATIO_378 (0x178U << 1) +#define RCC_I2SPRE_RATIO_379 (0x179U << 1) +#define RCC_I2SPRE_RATIO_380 (0x17AU << 1) +#define RCC_I2SPRE_RATIO_381 (0x17BU << 1) +#define RCC_I2SPRE_RATIO_382 (0x17CU << 1) +#define RCC_I2SPRE_RATIO_383 (0x17DU << 1) +#define RCC_I2SPRE_RATIO_384 (0x17EU << 1) +#define RCC_I2SPRE_RATIO_385 (0x17FU << 1) +#define RCC_I2SPRE_RATIO_386 (0x180U << 1) +#define RCC_I2SPRE_RATIO_387 (0x181U << 1) +#define RCC_I2SPRE_RATIO_388 (0x182U << 1) +#define RCC_I2SPRE_RATIO_389 (0x183U << 1) +#define RCC_I2SPRE_RATIO_390 (0x184U << 1) +#define RCC_I2SPRE_RATIO_391 (0x185U << 1) +#define RCC_I2SPRE_RATIO_392 (0x186U << 1) +#define RCC_I2SPRE_RATIO_393 (0x187U << 1) +#define RCC_I2SPRE_RATIO_394 (0x188U << 1) +#define RCC_I2SPRE_RATIO_395 (0x189U << 1) +#define RCC_I2SPRE_RATIO_396 (0x18AU << 1) +#define RCC_I2SPRE_RATIO_397 (0x18BU << 1) +#define RCC_I2SPRE_RATIO_398 (0x18CU << 1) +#define RCC_I2SPRE_RATIO_399 (0x18DU << 1) +#define RCC_I2SPRE_RATIO_400 (0x18EU << 1) +#define RCC_I2SPRE_RATIO_401 (0x18FU << 1) +#define RCC_I2SPRE_RATIO_402 (0x190U << 1) +#define RCC_I2SPRE_RATIO_403 (0x191U << 1) +#define RCC_I2SPRE_RATIO_404 (0x192U << 1) +#define RCC_I2SPRE_RATIO_405 (0x193U << 1) +#define RCC_I2SPRE_RATIO_406 (0x194U << 1) +#define RCC_I2SPRE_RATIO_407 (0x195U << 1) +#define RCC_I2SPRE_RATIO_408 (0x196U << 1) +#define RCC_I2SPRE_RATIO_409 (0x197U << 1) +#define RCC_I2SPRE_RATIO_410 (0x198U << 1) +#define RCC_I2SPRE_RATIO_411 (0x199U << 1) +#define RCC_I2SPRE_RATIO_412 (0x19AU << 1) +#define RCC_I2SPRE_RATIO_413 (0x19BU << 1) +#define RCC_I2SPRE_RATIO_414 (0x19CU << 1) +#define RCC_I2SPRE_RATIO_415 (0x19DU << 1) +#define RCC_I2SPRE_RATIO_416 (0x19EU << 1) +#define RCC_I2SPRE_RATIO_417 (0x19FU << 1) +#define RCC_I2SPRE_RATIO_418 (0x1A0U << 1) +#define RCC_I2SPRE_RATIO_419 (0x1A1U << 1) +#define RCC_I2SPRE_RATIO_420 (0x1A2U << 1) +#define RCC_I2SPRE_RATIO_421 (0x1A3U << 1) +#define RCC_I2SPRE_RATIO_422 (0x1A4U << 1) +#define RCC_I2SPRE_RATIO_423 (0x1A5U << 1) +#define RCC_I2SPRE_RATIO_424 (0x1A6U << 1) +#define RCC_I2SPRE_RATIO_425 (0x1A7U << 1) +#define RCC_I2SPRE_RATIO_426 (0x1A8U << 1) +#define RCC_I2SPRE_RATIO_427 (0x1A9U << 1) +#define RCC_I2SPRE_RATIO_428 (0x1AAU << 1) +#define RCC_I2SPRE_RATIO_429 (0x1ABU << 1) +#define RCC_I2SPRE_RATIO_430 (0x1ACU << 1) +#define RCC_I2SPRE_RATIO_431 (0x1ADU << 1) +#define RCC_I2SPRE_RATIO_432 (0x1AEU << 1) +#define RCC_I2SPRE_RATIO_433 (0x1AFU << 1) +#define RCC_I2SPRE_RATIO_434 (0x1B0U << 1) +#define RCC_I2SPRE_RATIO_435 (0x1B1U << 1) +#define RCC_I2SPRE_RATIO_436 (0x1B2U << 1) +#define RCC_I2SPRE_RATIO_437 (0x1B3U << 1) +#define RCC_I2SPRE_RATIO_438 (0x1B4U << 1) +#define RCC_I2SPRE_RATIO_439 (0x1B5U << 1) +#define RCC_I2SPRE_RATIO_440 (0x1B6U << 1) +#define RCC_I2SPRE_RATIO_441 (0x1B7U << 1) +#define RCC_I2SPRE_RATIO_442 (0x1B8U << 1) +#define RCC_I2SPRE_RATIO_443 (0x1B9U << 1) +#define RCC_I2SPRE_RATIO_444 (0x1BAU << 1) +#define RCC_I2SPRE_RATIO_445 (0x1BBU << 1) +#define RCC_I2SPRE_RATIO_446 (0x1BCU << 1) +#define RCC_I2SPRE_RATIO_447 (0x1BDU << 1) +#define RCC_I2SPRE_RATIO_448 (0x1BEU << 1) +#define RCC_I2SPRE_RATIO_449 (0x1BFU << 1) +#define RCC_I2SPRE_RATIO_450 (0x1C0U << 1) +#define RCC_I2SPRE_RATIO_451 (0x1C1U << 1) +#define RCC_I2SPRE_RATIO_452 (0x1C2U << 1) +#define RCC_I2SPRE_RATIO_453 (0x1C3U << 1) +#define RCC_I2SPRE_RATIO_454 (0x1C4U << 1) +#define RCC_I2SPRE_RATIO_455 (0x1C5U << 1) +#define RCC_I2SPRE_RATIO_456 (0x1C6U << 1) +#define RCC_I2SPRE_RATIO_457 (0x1C7U << 1) +#define RCC_I2SPRE_RATIO_458 (0x1C8U << 1) +#define RCC_I2SPRE_RATIO_459 (0x1C9U << 1) +#define RCC_I2SPRE_RATIO_460 (0x1CAU << 1) +#define RCC_I2SPRE_RATIO_461 (0x1CBU << 1) +#define RCC_I2SPRE_RATIO_462 (0x1CCU << 1) +#define RCC_I2SPRE_RATIO_463 (0x1CDU << 1) +#define RCC_I2SPRE_RATIO_464 (0x1CEU << 1) +#define RCC_I2SPRE_RATIO_465 (0x1CFU << 1) +#define RCC_I2SPRE_RATIO_466 (0x1D0U << 1) +#define RCC_I2SPRE_RATIO_467 (0x1D1U << 1) +#define RCC_I2SPRE_RATIO_468 (0x1D2U << 1) +#define RCC_I2SPRE_RATIO_469 (0x1D3U << 1) +#define RCC_I2SPRE_RATIO_470 (0x1D4U << 1) +#define RCC_I2SPRE_RATIO_471 (0x1D5U << 1) +#define RCC_I2SPRE_RATIO_472 (0x1D6U << 1) +#define RCC_I2SPRE_RATIO_473 (0x1D7U << 1) +#define RCC_I2SPRE_RATIO_474 (0x1D8U << 1) +#define RCC_I2SPRE_RATIO_475 (0x1D9U << 1) +#define RCC_I2SPRE_RATIO_476 (0x1DAU << 1) +#define RCC_I2SPRE_RATIO_477 (0x1DBU << 1) +#define RCC_I2SPRE_RATIO_478 (0x1DCU << 1) +#define RCC_I2SPRE_RATIO_479 (0x1DDU << 1) +#define RCC_I2SPRE_RATIO_480 (0x1DEU << 1) +#define RCC_I2SPRE_RATIO_481 (0x1DFU << 1) +#define RCC_I2SPRE_RATIO_482 (0x1E0U << 1) +#define RCC_I2SPRE_RATIO_483 (0x1E1U << 1) +#define RCC_I2SPRE_RATIO_484 (0x1E2U << 1) +#define RCC_I2SPRE_RATIO_485 (0x1E3U << 1) +#define RCC_I2SPRE_RATIO_486 (0x1E4U << 1) +#define RCC_I2SPRE_RATIO_487 (0x1E5U << 1) +#define RCC_I2SPRE_RATIO_488 (0x1E6U << 1) +#define RCC_I2SPRE_RATIO_489 (0x1E7U << 1) +#define RCC_I2SPRE_RATIO_490 (0x1E8U << 1) +#define RCC_I2SPRE_RATIO_491 (0x1E9U << 1) +#define RCC_I2SPRE_RATIO_492 (0x1EAU << 1) +#define RCC_I2SPRE_RATIO_493 (0x1EBU << 1) +#define RCC_I2SPRE_RATIO_494 (0x1ECU << 1) +#define RCC_I2SPRE_RATIO_495 (0x1EDU << 1) +#define RCC_I2SPRE_RATIO_496 (0x1EEU << 1) +#define RCC_I2SPRE_RATIO_497 (0x1EFU << 1) +#define RCC_I2SPRE_RATIO_498 (0x1F0U << 1) +#define RCC_I2SPRE_RATIO_499 (0x1F1U << 1) +#define RCC_I2SPRE_RATIO_500 (0x1F2U << 1) +#define RCC_I2SPRE_RATIO_501 (0x1F3U << 1) +#define RCC_I2SPRE_RATIO_502 (0x1F4U << 1) +#define RCC_I2SPRE_RATIO_503 (0x1F5U << 1) +#define RCC_I2SPRE_RATIO_504 (0x1F6U << 1) +#define RCC_I2SPRE_RATIO_505 (0x1F7U << 1) +#define RCC_I2SPRE_RATIO_506 (0x1F8U << 1) +#define RCC_I2SPRE_RATIO_507 (0x1F9U << 1) +#define RCC_I2SPRE_RATIO_508 (0x1FAU << 1) +#define RCC_I2SPRE_RATIO_509 (0x1FBU << 1) +#define RCC_I2SPRE_RATIO_510 (0x1FCU << 1) +#define RCC_I2SPRE_RATIO_511 (0x1FDU << 1) +#define RCC_I2SPRE_RATIO_512 (0x1FEU << 1) + +#define RCC_I2SPRE_SRCEN (0x1U << 10) + +/******************************** Bit definition for RCC_MCLKSRC register ***************************/ +#define RCC_MCLKSRC_MAINCLK (0x0U) +#define RCC_MCLKSRC_FHSI (0x1U) + +/******************************** Bit definition for RCC_USBFIFOCLKSRC register ***************************/ +#define RCC_USBFIFOCLKSRC_AHBCLK (0x0U) +#define RCC_USBFIFOCLKSRC_USBCLK (0x1U) + +/******************************** Bit definition for RCC_MCOSEL register ***************************/ +#define RCC_MCOSEL_NOCLOCK (0x0U) +#define RCC_MCOSEL_AHBCLK (0x1U << 0) +#define RCC_MCOSEL_HSE (0x1U << 1) +#define RCC_MCOSEL_MHSI (0x1U << 2) +#define RCC_MCOSEL_PLLDIV2 (0x1U << 3) +#define RCC_MCOSEL_MCLK (0x1U << 4) + +/******************************** Bit definition for RCC_AHBENR0 register ***************************/ +#define RCC_AHBENR0_IWDGEN (0x1U << 2) + +/******************************** Bit definition for RCC_AHBENR1 register ***************************/ +#define RCC_AHBENR1_USBEN (0x1U << 1) +#define RCC_AHBENR1_ISOEN (0x1U << 2) +#define RCC_AHBENR1_FLASHEN (0x1U << 3) +#define RCC_AHBENR1_CACHEEN (0x1U << 4) +#define RCC_AHBENR1_SYSEN (0x1U << 5) +#define RCC_AHBENR1_DMAC1BREN (0x1U << 6) +#define RCC_AHBENR1_DMAC2BREN (0x1U << 7) +#define RCC_AHBENR1_CRCSFMEN (0x1U << 8) + +/******************************** Bit definition for RCC_AHBENR2 register ***************************/ +#define RCC_AHBENR2_BDIEN (0x1U << 2) + +/******************************** Bit definition for RCC_APB1ENR register ***************************/ +#define RCC_APB1ENR_DMAC1EN (0x1U << 0) +#define RCC_APB1ENR_TIM1EN (0x1U << 1) +#define RCC_APB1ENR_TIM2EN (0x1U << 2) +#define RCC_APB1ENR_TIM3EN (0x1U << 3) +#define RCC_APB1ENR_TIM4EN (0x1U << 4) +#define RCC_APB1ENR_GPIOAEN (0x1U << 5) +#define RCC_APB1ENR_GPIOBEN (0x1U << 6) +#define RCC_APB1ENR_GPIOCEN (0x1U << 7) +#define RCC_APB1ENR_GPIODEN (0x1U << 8) +#define RCC_APB1ENR_EXTIEN (0x1U << 9) +#define RCC_APB1ENR_AFIOEN (0x1U << 10) +#define RCC_APB1ENR_ADCEN (0x1U << 11) +#define RCC_APB1ENR_QSPIEN (0x1U << 12) +#define RCC_APB1ENR_SPIS1EN (0x1U << 13) +#define RCC_APB1ENR_UART1EN (0x1U << 14) +#define RCC_APB1ENR_BMX1EN (0x1U << 15) + +/******************************** Bit definition for RCC_APB2ENR register ***************************/ +#define RCC_APB2ENR_DMAC2EN (0x1U << 0) +#define RCC_APB2ENR_WWDGEN (0x1U << 1) +#define RCC_APB2ENR_UART2EN (0x1U << 2) +#define RCC_APB2ENR_UART3EN (0x1U << 3) +#define RCC_APB2ENR_SPIM2EN (0x1U << 4) +#define RCC_APB2ENR_SPIS2EN (0x1U << 5) +#define RCC_APB2ENR_I2SEN (0x1U << 6) +#define RCC_APB2ENR_I2C1EN (0x1U << 7) +#define RCC_APB2ENR_I2C2EN (0x1U << 8) +#define RCC_APB2ENR_RNGEN (0x1U << 9) +#define RCC_APB2ENR_LEDEN (0x1U << 10) +#define RCC_APB2ENR_BMX2EN (0x1U << 11) + + +/******************************** Bit definition for RCC_RNGCLKENR register ***************************/ +#define RCC_RNGCLKENR_CLKEN (0x1U) + +/******************************** Bit definition for RCC_IWDGCLKENR register ***************************/ +#define RCC_IWDGCLKENR_IWDGCLKEN (0x1U) +#define RCC_IWDGCLKENR_DCSSCLKEN (0x1U << 2) + +/******************************** Bit definition for RCC_USBCLKENR register ***************************/ +#define RCC_USBCLKENR_CLKEN (0x1U) + +/******************************** Bit definition for RCC_I2SCLKENR register ***************************/ +#define RCC_I2SCLKENR_CLKEN (0x1U) + +/******************************** Bit definition for RCC_SPIS1CLKENR register ***************************/ +#define RCC_SPIS1CLKENR_CLKEN (0x1U) + +/******************************** Bit definition for RCC_SPIS2CLKENR register ***************************/ +#define RCC_SPIS2CLKENR_CLKEN (0x1U) + +/******************************** Bit definition for RCC_USBFIFOCLKENR register ***************************/ +#define RCC_USBFIFOCLKENR_CLKEN (0x1U) + +/******************************** Bit definition for RCC_AHBRSTR1 register ***************************/ +#define RCC_AHBRSTR1_USBRST (0x1U << 1) +#define RCC_AHBRSTR1_ISORST (0x1U << 2) +#define RCC_AHBRSTR1_FLASHRST (0x1U << 3) +#define RCC_AHBRSTR1_CACHERST (0x1U << 4) +#define RCC_AHBRSTR1_SYSRST (0x1U << 5) +#define RCC_AHBRSTR1_CRCSFMRST (0x1U << 8) + +/******************************** Bit definition for RCC_APB1RSTR register ***************************/ +#define RCC_APB1RSTR_DMAC1RST (0x1U << 0) +#define RCC_APB1RSTR_TIM1RST (0x1U << 1) +#define RCC_APB1RSTR_TIM2RST (0x1U << 2) +#define RCC_APB1RSTR_TIM3RST (0x1U << 3) +#define RCC_APB1RSTR_TIM4RST (0x1U << 4) +#define RCC_APB1RSTR_GPIOARST (0x1U << 5) +#define RCC_APB1RSTR_GPIOBRST (0x1U << 6) +#define RCC_APB1RSTR_GPIOCRST (0x1U << 7) +#define RCC_APB1RSTR_GPIODRST (0x1U << 8) +#define RCC_APB1RSTR_EXTIRST (0x1U << 9) +#define RCC_APB1RSTR_AFIORST (0x1U << 10) +#define RCC_APB1RSTR_ADCRST (0x1U << 11) +#define RCC_APB1RSTR_QSPIRST (0x1U << 12) +#define RCC_APB1RSTR_SPIS1RST (0x1U << 13) +#define RCC_APB1RSTR_UART1RST (0x1U << 14) +#define RCC_APB1RSTR_BMX1RST (0x1U << 15) + +/******************************** Bit definition for RCC_APB2RSTR register ***************************/ +#define RCC_APB2RSTR_DMAC2RST (0x1U << 0) +#define RCC_APB2RSTR_WWDGRST (0x1U << 1) +#define RCC_APB2RSTR_UART2RST (0x1U << 2) +#define RCC_APB2RSTR_UART3RST (0x1U << 3) +#define RCC_APB2RSTR_SPIM2RST (0x1U << 4) +#define RCC_APB2RSTR_SPIS2RST (0x1U << 5) +#define RCC_APB2RSTR_I2SRST (0x1U << 6) +#define RCC_APB2RSTR_I2C1RST (0x1U << 7) +#define RCC_APB2RSTR_I2C2RST (0x1U << 8) +#define RCC_APB2RSTR_RNGRST (0x1U << 9) +#define RCC_APB2RSTR_LEDRST (0x1U << 10) +#define RCC_APB2RSTR_BMX2RST (0x1U << 11) + +/******************************** Bit definition for RCC_I2SCLKRSTR register ***************************/ +#define RCC_I2SCLKRSTR_SCLKRST (0x1U) + +/******************************** Bit definition for RCC_CLRRSTSTAT register ***************************/ +#define RCC_CLRRSTSTAT_CLR (0x1U) + +/******************************** Bit definition for RCC_BDRSTR register ***************************/ +#define RCC_BDRSTR_BDRST (0x1U) + +/******************************** Bit definition for RCC_LSI2RTCENR register ***************************/ +#define RCC_LSI2RTCENR_CLKEN (0x1U) + +/******************************** Bit definition for RCC_HSE2RTCENR register ***************************/ +#define RCC_HSE2RTCENR_DIVEN (0x1U) + +/******************************** Bit definition for RCC_RSTSTAT register ***************************/ +#define RCC_RSTSTAT_LPWRRSTF (0x1U << 0) +#define RCC_RSTSTAT_WWDGRSTF (0x1U << 1) +#define RCC_RSTSTAT_IWDGRSTF (0x1U << 2) +#define RCC_RSTSTAT_SFTRSTF (0x1U << 3) +#define RCC_RSTSTAT_PORRSTF (0x1U << 4) +#define RCC_RSTSTAT_PINRSTF (0x1U << 5) + + +/*------------------------------------------------------------------------------------------------------*/ +/*--- Power Control (PWR) ---*/ +/*------------------------------------------------------------------------------------------------------*/ +/******************************** Bit definition for PWR_CR0 register *********************************/ +#define PWR_CR0_DBP (0x1U << 0) /*!< Disable Backup Domain write protection */ + +#define PWR_CR0_FCLKSD (0x1U << 3) + +#define PWR_CR0_PDDS_Pos (5U) +#define PWR_CR0_PDDS_Msk (0x3U << PWR_CR0_PDDS_Pos) + +#define PWR_CR0_S32KMODE (0x1U << 18) +#define PWR_CR0_S4KMODE (0x1U << 19) + +/******************************** Bit definition for PWR_CR1 register *********************************/ +#define PWR_CR1_CWUF (0x1U << 0) +#define PWR_CR1_CSBF (0x1U << 1) +#define PWR_CR1_CSPF (0x1U << 2) +#define PWR_CR1_CCKF (0x1U << 3) + +/******************************** Bit definition for PWR_CR2 register *********************************/ +#define PWR_CR2_EWUP (0x1U << 0) + +/******************************** Bit definition for PWR_SR0 register *********************************/ +#define PWR_SR0_PVDO (0x1U << 0) + +/******************************** Bit definition for PWR_SR1 register *********************************/ +#define PWR_SR1_WUF (0x1U << 0) +#define PWR_SR1_SBF (0x1U << 1) +#define PWR_SR1_SPF (0x1U << 2) +#define PWR_SR1_CKF (0x1U << 3) + +/******************************** Bit definition for DBGMCU_CR register *********************************/ +#define DBGMCU_CR_DBG_IWDG_STOP_Pos (8U) +#define DBGMCU_CR_DBG_IWDG_STOP_Msk (0x1U << DBGMCU_CR_DBG_IWDG_STOP_Pos) /*!< 0x00000100 */ +#define DBGMCU_CR_DBG_IWDG_STOP DBGMCU_CR_DBG_IWDG_STOP_Msk /*!< Debug Independent Watchdog stopped when Core is halted */ +#define DBGMCU_CR_DBG_WWDG_STOP_Pos (9U) +#define DBGMCU_CR_DBG_WWDG_STOP_Msk (0x1U << DBGMCU_CR_DBG_WWDG_STOP_Pos) /*!< 0x00000200 */ +#define DBGMCU_CR_DBG_WWDG_STOP DBGMCU_CR_DBG_WWDG_STOP_Msk /*!< Debug Window Watchdog stopped when Core is halted */ +#define DBGMCU_CR_DBG_TIM1_STOP_Pos (10U) +#define DBGMCU_CR_DBG_TIM1_STOP_Msk (0x1U << DBGMCU_CR_DBG_TIM1_STOP_Pos) /*!< 0x00000400 */ +#define DBGMCU_CR_DBG_TIM1_STOP DBGMCU_CR_DBG_TIM1_STOP_Msk /*!< TIM1 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM2_STOP_Pos (11U) +#define DBGMCU_CR_DBG_TIM2_STOP_Msk (0x1U << DBGMCU_CR_DBG_TIM2_STOP_Pos) /*!< 0x00000800 */ +#define DBGMCU_CR_DBG_TIM2_STOP DBGMCU_CR_DBG_TIM2_STOP_Msk /*!< TIM2 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM3_STOP_Pos (12U) +#define DBGMCU_CR_DBG_TIM3_STOP_Msk (0x1U << DBGMCU_CR_DBG_TIM3_STOP_Pos) /*!< 0x00001000 */ +#define DBGMCU_CR_DBG_TIM3_STOP DBGMCU_CR_DBG_TIM3_STOP_Msk /*!< TIM3 counter stopped when core is halted */ +#define DBGMCU_CR_DBG_TIM4_STOP_Pos (13U) +#define DBGMCU_CR_DBG_TIM4_STOP_Msk (0x1U << DBGMCU_CR_DBG_TIM4_STOP_Pos) /*!< 0x00002000 */ +#define DBGMCU_CR_DBG_TIM4_STOP DBGMCU_CR_DBG_TIM4_STOP_Msk /*!< TIM4 counter stopped when core is halted */ + + +#define BIT_BAND_ADDR(addr, bitnum) ((((uint32_t)(addr)) & 0xF0000000) + 0x2000000 + ((((uint32_t)(addr)) & 0xFFFFF) << 5) + ((bitnum) << 2)) + + +/** @addtogroup Exported_macro + * @{ + */ + +#define SET_BIT(REG, BIT) ((REG) |= (BIT)) + +#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) + +#define READ_BIT(REG, BIT) ((REG) & (BIT)) + +#define CLEAR_REG(REG) ((REG) = (0x0)) + +#define WRITE_REG(REG, VAL) ((REG) = (VAL)) + +#define READ_REG(REG) ((REG)) + +#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* __WB32FQ95xx_H__ */ + +/** + * @} + */ + +/** + * @} + */ diff --git a/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95x9.ld b/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95x9.ld new file mode 100644 index 00000000..84f4137f --- /dev/null +++ b/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95x9.ld @@ -0,0 +1,85 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * WB32FQ95x9 memory setup. + */ +MEMORY +{ + flash0 (rx) : org = 0x08000000, len = 96k + flash1 (rx) : org = 0x00000000, len = 0 + flash2 (rx) : org = 0x00000000, len = 0 + flash3 (rx) : org = 0x00000000, len = 0 + flash4 (rx) : org = 0x00000000, len = 0 + flash5 (rx) : org = 0x00000000, len = 0 + flash6 (rx) : org = 0x00000000, len = 0 + flash7 (rx) : org = 0x00000000, len = 0 + ram0 (wx) : org = 0x20000000, len = 28k + ram1 (wx) : org = 0x00000000, len = 0 + ram2 (wx) : org = 0x00000000, len = 0 + ram3 (wx) : org = 0x00000000, len = 0 + ram4 (wx) : org = 0x00000000, len = 0 + ram5 (wx) : org = 0x00000000, len = 0 + ram6 (wx) : org = 0x00000000, len = 0 + ram7 (wx) : org = 0x00000000, len = 0 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash0); +REGION_ALIAS("XTORS_FLASH_LMA", flash0); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash0); +REGION_ALIAS("TEXT_FLASH_LMA", flash0); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash0); +REGION_ALIAS("RODATA_FLASH_LMA", flash0); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash0); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash0); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash0); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95xB.ld b/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95xB.ld new file mode 100644 index 00000000..0e796555 --- /dev/null +++ b/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95xB.ld @@ -0,0 +1,85 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * WB32FQ95xB memory setup. + */ +MEMORY +{ + flash0 (rx) : org = 0x08000000, len = 128k + flash1 (rx) : org = 0x00000000, len = 0 + flash2 (rx) : org = 0x00000000, len = 0 + flash3 (rx) : org = 0x00000000, len = 0 + flash4 (rx) : org = 0x00000000, len = 0 + flash5 (rx) : org = 0x00000000, len = 0 + flash6 (rx) : org = 0x00000000, len = 0 + flash7 (rx) : org = 0x00000000, len = 0 + ram0 (wx) : org = 0x20000000, len = 28k + ram1 (wx) : org = 0x00000000, len = 0 + ram2 (wx) : org = 0x00000000, len = 0 + ram3 (wx) : org = 0x00000000, len = 0 + ram4 (wx) : org = 0x00000000, len = 0 + ram5 (wx) : org = 0x00000000, len = 0 + ram6 (wx) : org = 0x00000000, len = 0 + ram7 (wx) : org = 0x00000000, len = 0 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash0); +REGION_ALIAS("XTORS_FLASH_LMA", flash0); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash0); +REGION_ALIAS("TEXT_FLASH_LMA", flash0); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash0); +REGION_ALIAS("RODATA_FLASH_LMA", flash0); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash0); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash0); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash0); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95xC.ld b/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95xC.ld new file mode 100644 index 00000000..bea7eee1 --- /dev/null +++ b/os/common/startup/ARMCMx/compilers/GCC/ld/WB32FQ95xC.ld @@ -0,0 +1,85 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/* + * WB32FQ95xC memory setup. + */ +MEMORY +{ + flash0 (rx) : org = 0x08000000, len = 256k + flash1 (rx) : org = 0x00000000, len = 0 + flash2 (rx) : org = 0x00000000, len = 0 + flash3 (rx) : org = 0x00000000, len = 0 + flash4 (rx) : org = 0x00000000, len = 0 + flash5 (rx) : org = 0x00000000, len = 0 + flash6 (rx) : org = 0x00000000, len = 0 + flash7 (rx) : org = 0x00000000, len = 0 + ram0 (wx) : org = 0x20000000, len = 36k + ram1 (wx) : org = 0x00000000, len = 0 + ram2 (wx) : org = 0x00000000, len = 0 + ram3 (wx) : org = 0x00000000, len = 0 + ram4 (wx) : org = 0x00000000, len = 0 + ram5 (wx) : org = 0x00000000, len = 0 + ram6 (wx) : org = 0x00000000, len = 0 + ram7 (wx) : org = 0x00000000, len = 0 +} + +/* For each data/text section two region are defined, a virtual region + and a load region (_LMA suffix).*/ + +/* Flash region to be used for exception vectors.*/ +REGION_ALIAS("VECTORS_FLASH", flash0); +REGION_ALIAS("VECTORS_FLASH_LMA", flash0); + +/* Flash region to be used for constructors and destructors.*/ +REGION_ALIAS("XTORS_FLASH", flash0); +REGION_ALIAS("XTORS_FLASH_LMA", flash0); + +/* Flash region to be used for code text.*/ +REGION_ALIAS("TEXT_FLASH", flash0); +REGION_ALIAS("TEXT_FLASH_LMA", flash0); + +/* Flash region to be used for read only data.*/ +REGION_ALIAS("RODATA_FLASH", flash0); +REGION_ALIAS("RODATA_FLASH_LMA", flash0); + +/* Flash region to be used for various.*/ +REGION_ALIAS("VARIOUS_FLASH", flash0); +REGION_ALIAS("VARIOUS_FLASH_LMA", flash0); + +/* Flash region to be used for RAM(n) initialization data.*/ +REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0); + +/* RAM region to be used for Main stack. This stack accommodates the processing + of all exceptions and interrupts.*/ +REGION_ALIAS("MAIN_STACK_RAM", ram0); + +/* RAM region to be used for the process stack. This is the stack used by + the main() function.*/ +REGION_ALIAS("PROCESS_STACK_RAM", ram0); + +/* RAM region to be used for data segment.*/ +REGION_ALIAS("DATA_RAM", ram0); +REGION_ALIAS("DATA_RAM_LMA", flash0); + +/* RAM region to be used for BSS segment.*/ +REGION_ALIAS("BSS_RAM", ram0); + +/* RAM region to be used for the default heap.*/ +REGION_ALIAS("HEAP_RAM", ram0); + +/* Generic rules inclusion.*/ +INCLUDE rules.ld diff --git a/os/common/startup/ARMCMx/compilers/GCC/mk/startup_wb32fq95xx.mk b/os/common/startup/ARMCMx/compilers/GCC/mk/startup_wb32fq95xx.mk new file mode 100644 index 00000000..fa848f1a --- /dev/null +++ b/os/common/startup/ARMCMx/compilers/GCC/mk/startup_wb32fq95xx.mk @@ -0,0 +1,19 @@ +# List of the ChibiOS generic WB32FQ95xx startup and CMSIS files. +STARTUPSRC = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/crt1.c + +STARTUPASM = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/crt0_v7m.S \ + $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/vectors.S + +STARTUPINC = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC \ + $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/ld \ + $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/devices/WB32FQ95xx \ + $(CHIBIOS)/os/common/ext/ARM/CMSIS/Core/Include \ + $(CHIBIOS_CONTRIB)/os/common/ext/CMSIS/WB32/WB32FQ95xx + +STARTUPLD = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/ld +STARTUPLD_CONTRIB = $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/compilers/GCC/ld + +# Shared variables +ALLXASMSRC += $(STARTUPASM) +ALLCSRC += $(STARTUPSRC) +ALLINC += $(STARTUPINC) diff --git a/os/common/startup/ARMCMx/devices/WB32FQ95xx/cmparams.h b/os/common/startup/ARMCMx/devices/WB32FQ95xx/cmparams.h new file mode 100644 index 00000000..77a211fd --- /dev/null +++ b/os/common/startup/ARMCMx/devices/WB32FQ95xx/cmparams.h @@ -0,0 +1,88 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2014 Giovanni Di Sirio. + (C) 2015 RedoX https://github.com/RedoXyde + (C) 2021 Westberry Technology (ChangZhou) Corp., Ltd + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file WB32FQ95xx/cmparams.h + * @brief ARM Cortex-M3 parameters for the Westberry WB32FQ95xx + * + * @defgroup ARMCMx_WB32FQ95xx Westberry WB32FQ95xx Specific Parameters + * @ingroup ARMCMx_SPECIFIC + * @details This file contains the Cortex-M3 specific parameters for the + * Westberry WB32FQ95xx platform. + * @{ + */ + +#ifndef _CMPARAMS_H_ +#define _CMPARAMS_H_ + +/** + * @brief Cortex core model. + */ +#define CORTEX_MODEL 3 + +/** + * @brief Systick unit presence. + */ +#define CORTEX_HAS_ST TRUE + +/** + * @brief Floating Point unit presence. + */ +#define CORTEX_HAS_FPU FALSE + +/** + * @brief Number of bits in priority masks. + */ +#define CORTEX_PRIORITY_BITS 4 + +/** + * @brief Number of interrupt vectors. + * @note This number does not include the 16 system vectors and must be + * rounded to a multiple of 8. + */ +#define CORTEX_NUM_VECTORS 40 + +/* The following code is not processed when the file is included from an + asm module.*/ +#if !defined(_FROM_ASM_) + +#if !defined (WB32FQ95xx) + #include "board.h" +#endif + +/* Including the device CMSIS header. Note, we are not using the definitions + from this header because we need this file to be usable also from + assembler source files. We verify that the info matches instead.*/ +#include "wb32fq95xx.h" + +#if CORTEX_MODEL != __CORTEX_M +#error "CMSIS __CORTEX_M mismatch" +#endif + +#if CORTEX_PRIORITY_BITS != __NVIC_PRIO_BITS +#error "CMSIS __NVIC_PRIO_BITS mismatch" +#endif + +#endif /* !defined(_FROM_ASM_) */ + +#endif /* _CMPARAMS_H_ */ + +/** @} */ diff --git a/os/hal/ports/WB32/LLD/I2Cv1/hal_i2c_lld.c b/os/hal/ports/WB32/LLD/I2Cv1/hal_i2c_lld.c index 746b8ac7..9273cee2 100644 --- a/os/hal/ports/WB32/LLD/I2Cv1/hal_i2c_lld.c +++ b/os/hal/ports/WB32/LLD/I2Cv1/hal_i2c_lld.c @@ -106,7 +106,7 @@ static void i2c_lld_abort_operation(I2CDriver *i2cp) { * @notapi */ static void i2c_lld_configuration(I2CDriver *i2cp) { - I2C_TypeDef *dp = i2cp->i2c; + I2C_TypeDef *dp = i2cp->i2c; float tclk, tval; uint32_t con_reg; i2copmode_t opmode = i2cp->config->op_mode; @@ -150,7 +150,7 @@ static void i2c_lld_configuration(I2CDriver *i2cp) { dp->FS_SCL_LCNT = (uint32_t)(tval - 1); } - dp->CON = con_reg; + dp->CON = con_reg; } /** @@ -400,7 +400,7 @@ void i2c_lld_stop(I2CDriver *i2cp) { /** * @brief Receives data via the I2C bus as master. - * @details Number of receiving bytes must be more than 1 on WB32F3G71x. + * @details Number of receiving bytes must be more than 1. * This is hardware restriction. * * @param[in] i2cp pointer to the @p I2CDriver object @@ -427,7 +427,7 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, I2C_TypeDef *dp = i2cp->i2c; msg_t msg; -#if defined(WB32F3G71xx_I2C) +#if defined(WB32_I2C) osalDbgCheck(rxbytes > 0); #endif /* Resetting error flags for this transfer.*/ @@ -472,7 +472,7 @@ msg_t i2c_lld_master_receive_timeout(I2CDriver *i2cp, i2caddr_t addr, /** * @brief Transmits data via the I2C bus as master. - * @details Number of receiving bytes must be 0 or more than 1 on WB32F3G71x. + * @details Number of receiving bytes must be 0 or more than 1. * This is hardware restriction. * * @param[in] i2cp pointer to the @p I2CDriver object @@ -503,7 +503,7 @@ msg_t i2c_lld_master_transmit_timeout(I2CDriver *i2cp, i2caddr_t addr, I2C_TypeDef *dp = i2cp->i2c; __IO msg_t msg; -#if defined(WB32F3G71xx_I2C) +#if defined(WB32_I2C) osalDbgCheck((rxbytes == 0) || ((rxbytes > 0) && (rxbuf != NULL))); #endif /* Resetting error flags for this transfer.*/ diff --git a/os/hal/ports/WB32/LLD/I2Cv1/hal_i2c_lld.h b/os/hal/ports/WB32/LLD/I2Cv1/hal_i2c_lld.h index 94f5c5fd..add421dc 100644 --- a/os/hal/ports/WB32/LLD/I2Cv1/hal_i2c_lld.h +++ b/os/hal/ports/WB32/LLD/I2Cv1/hal_i2c_lld.h @@ -82,8 +82,8 @@ #define WB32_I2C_I2C2_IRQ_PRIORITY 10 #endif -#if defined(WB32F3G71xx) -#define WB32F3G71xx_I2C +#if defined(WB32F3G71xx) || defined(WB32FQ95xx) +#define WB32_I2C #endif /** @} */ @@ -136,22 +136,22 @@ typedef struct { volatile uint32_t rx_cmd_len; uint32_t tx_abrt_source; } i2c_xfer_info_t; - + typedef enum { OPMODE_I2C = 1, OPMODE_SMBUS_DEVICE = 2, OPMODE_SMBUS_HOST = 3, } i2copmode_t; - + /** * @brief Type of I2C driver configuration structure. */ typedef struct { - /* End of the mandatory fields.*/ + /* End of the mandatory fields.*/ i2copmode_t op_mode; /**< @brief Specifies the I2C mode. */ uint32_t clock_speed; /**< @brief Specifies the clock frequency. @note Must be set to a value lower - than 400kHz. */ + than 400kHz. */ } I2CConfig; /** diff --git a/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c b/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c index c0ba8244..80ecc755 100644 --- a/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c +++ b/os/hal/ports/WB32/LLD/TIMv1/hal_st_lld.c @@ -52,7 +52,7 @@ #define ST_NUMBER WB32_TIM2_NUMBER #define ST_CLOCK_SRC WB32_TIMCLK1 #define ST_ENABLE_CLOCK() rccEnableTIM2() -#if defined(WB32F3G71xx) +#if defined(WB32F3G71xx) || defined(WB32FQ95xx) #define ST_ENABLE_STOP() DBGMCU->CR |= DBGMCU_CR_DBG_TIM2_STOP #endif @@ -70,7 +70,7 @@ #define ST_NUMBER WB32_TIM3_NUMBER #define ST_CLOCK_SRC WB32_TIMCLK1 #define ST_ENABLE_CLOCK() rccEnableTIM3() -#if defined(WB32F3G71xx) +#if defined(WB32F3G71xx) || defined(WB32FQ95xx) #define ST_ENABLE_STOP() DBGMCU->CR |= DBGMCU_CR_DBG_TIM3_STOP #endif @@ -88,7 +88,7 @@ #define ST_NUMBER WB32_TIM4_NUMBER #define ST_CLOCK_SRC WB32_TIMCLK1 #define ST_ENABLE_CLOCK() rccEnableTIM4() -#if defined(WB32F3G71xx) +#if defined(WB32F3G71xx) || defined(WB32FQ95xx) #define ST_ENABLE_STOP() DBGMCU->CR |= DBGMCU_CR_DBG_TIM4_STOP #endif diff --git a/os/hal/ports/WB32/WB32FQ95xx/hal_lld.c b/os/hal/ports/WB32/WB32FQ95xx/hal_lld.c new file mode 100644 index 00000000..edd90c59 --- /dev/null +++ b/os/hal/ports/WB32/WB32FQ95xx/hal_lld.c @@ -0,0 +1,387 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file WB32FQ95xx/hal_lld.c + * @brief WB32FQ95xx HAL subsystem low level driver source. + * + * @addtogroup HAL + * @{ + */ + +#include "hal.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/** + * @brief System Clock Frequency (Core Clock) + */ +uint32_t SystemCoreClock = WB32_MAINCLK; + +/*===========================================================================*/ +/* Driver local variables and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level HAL driver initialization. + * + * @notapi + */ +void hal_lld_init(void) { + + void SystemCoreClockUpdate(void); + SystemCoreClockUpdate(); +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * @param None + * @return None + */ +void SystemCoreClockUpdate(void) { + + uint32_t ahbprediv, pllprediv, pllmul, mainclk; + + switch (RCC->MAINCLKSRC) { + case 0x00: /* MHSI used as main clock */ + mainclk = 8000000; + break; + case 0x01: /* FHSI used as main clock */ + mainclk = 48000000; + break; + case 0x03: /* HSE used as main clock */ + mainclk = WB32_HSECLK; + break; + case 0x02: /* PLL used as main clock */ + pllprediv = + (((RCC->PLLPRE & (RCC_PLLPRE_RATIO_Msk | RCC_PLLPRE_DIVEN)) + 1) >> 1) + 1; + pllmul = (0x03 - ((ANCTL->PLLCR >> 6) & 0x03)) * 4 + 12; + if (RCC->PLLSRC == RCC_PLLSRC_HSE) { + mainclk = WB32_HSECLK * pllmul / pllprediv; + } + else { + mainclk = 8000000 * pllmul / pllprediv; + } + break; + default: + mainclk = 8000000; + break; + } + + ahbprediv = + (((RCC->AHBPRE & (RCC_AHBPRE_RATIO_Msk | RCC_AHBPRE_DIVEN)) + 1) >> 1) + 1; + SystemCoreClock = mainclk / ahbprediv; +} + +#if defined(WB32FQ95xx) + +/** + * @brief Configures the main clock frequency, AHBCLK, APB1CLK and APB2CLK prescalers. + * @note This function should be used only after reset. + * @param None + * @return None + */ +static void SetSysClock(void) { + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Unlocks write to ANCTL registers */ + PWR->ANAKEY1 = 0x03; + PWR->ANAKEY2 = 0x0C; + + /* APB1CLK = MAINCLK / WB32_PPRE1*/ + RCC->APB1PRE = RCC_APB1PRE_SRCEN; +#if WB32_PPRE1 == 1 + RCC->APB1PRE |= 0x00; +#else + RCC->APB1PRE |= (WB32_PPRE1 - 2); + RCC->APB1PRE |= 0x01; +#endif /* WB32_PPRE1 == 1 */ + +#if WB32_HSE_ENABLED == TRUE + /* Configure PD0 and PD1 to analog mode */ + RCC->APB1ENR = RCC_APB1ENR_BMX1EN | RCC_APB1ENR_GPIODEN; + GPIOD->CFGMSK = 0xFFFC; + GPIOD->MODER = 0x0F; + + /* Enable HSE */ + ANCTL->HSECR1 = ANCTL_HSECR1_PADOEN; + ANCTL->HSECR0 = ANCTL_HSECR0_HSEON; + + /* Wait till HSE is ready and if Time out is reached exit */ + do { + HSEStatus = ANCTL->HSESR & ANCTL_HSESR_HSERDY; + StartUpCounter++; + } while ((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if (HSEStatus == 0) { + /* If HSE fails to start-up, the application will have wrong clock + * configuration. User can add here some code to deal with this error */ + while (1) + ; + } +#endif /* WB32_HSE_ENABLED == TRUE */ + /* Configure Flash prefetch, Cache and wait state */ +#if WB32_MAINCLK <= 32000000 + CACHE->CR = CACHE_CR_LATENCY_0WS; +#elif WB32_MAINCLK <= 48000000 + CACHE->CR = CACHE_CR_CHEEN | CACHE_CR_PREFEN_ON | CACHE_CR_LATENCY_1WS; +#elif WB32_MAINCLK <= 72000000 + CACHE->CR = CACHE_CR_CHEEN | CACHE_CR_PREFEN_ON | CACHE_CR_LATENCY_2WS; +#else + CACHE->CR = CACHE_CR_CHEEN | CACHE_CR_PREFEN_ON | CACHE_CR_LATENCY_3WS; +#endif + + /* AHBCLK = WB32_HPRE */ +#if WB32_HPRE == 1 + RCC->AHBPRE = 0x00; +#else + RCC->AHBPRE = (WB32_HPRE - 2); + RCC->AHBPRE |= 0x01; +#endif /* WB32_HPRE == 1 */ + + /* APB2CLK = MAINCLK / WB32_PPRE2 */ + RCC->APB2PRE = RCC_APB2PRE_SRCEN; +#if WB32_PPRE2 == 1 + RCC->APB2PRE |= 0x00; +#else + RCC->APB2PRE |= (WB32_PPRE2 - 2); + RCC->APB2PRE |= 0x01; +#endif /* WB32_PPRE2 == 1 */ + +#if WB32_PLL_ENABLED == TRUE + /* PLL configuration: + PLLCLK = WB32_HSECLK / WB32_PLLDIV_VALUE * WB32_PLLMUL_VALUE*/ + RCC->PLLSRC = WB32_PLLSRC; + RCC->PLLPRE = RCC_PLLPRE_SRCEN; + +#if WB32_PLLDIV_VALUE == 1 + RCC->PLLPRE |= 0x00; +#else + RCC->PLLPRE |= (WB32_PLLDIV_VALUE - 2); + RCC->PLLPRE |= 0x01; +#endif /* WB32_PLLDIV_VALUE == 1 */ + +#if WB32_PLLMUL_VALUE == 12 + ANCTL->PLLCR = (0x3U << 6); +#elif WB32_PLLMUL_VALUE == 16 + ANCTL->PLLCR = (0x2U << 6); +#elif WB32_PLLMUL_VALUE == 20 + ANCTL->PLLCR = (0x1U << 6); +#elif WB32_PLLMUL_VALUE == 24 + ANCTL->PLLCR = (0x0U << 6); +#endif + + /* Enable PLL */ + ANCTL->PLLENR = ANCTL_PLLENR_PLLON; + /* Wait till PLL is ready */ + while (ANCTL->PLLSR != 0x03) { + } +#endif /* WB32_PLL_ENABLED == TRUE */ + + /* Select WB32_MAINCLKSRC as system clock source */ + RCC->MAINCLKSRC = WB32_MAINCLKSRC; + RCC->MAINCLKUEN = RCC_MAINCLKUEN_ENA; + + /* Locks write to ANCTL registers */ + PWR->ANAKEY1 = 0x00; + PWR->ANAKEY2 = 0x00; +} + +/** + * @brief Clocks initialization. + * @note None + * @param None + * @return None + */ +void wb32_clock_init(void) { + +#if WB32_NO_INIT == FALSE + /* Unlocks write to ANCTL registers */ + PWR->ANAKEY1 = 0x03; + PWR->ANAKEY2 = 0x0C; + + /* Turn off POR */ + ANCTL->PORCR = 0x7BE; + + /* Locks write to ANCTL registers */ + PWR->ANAKEY1 = 0x00; + PWR->ANAKEY2 = 0x00; + + SetSysClock(); + + rccEnableAPB1(RCC_APB1ENR_BMX1EN); + rccEnableAPB2(RCC_APB2ENR_BMX2EN); + + SCB->VTOR = FLASH_BASE; /* Vector Table Relocation in Internal FLASH. */ + +#endif /* WB32_NO_INIT == FALSE */ +} + +#if HAL_USE_USB || defined(__DOXYGEN__) + +/** + * @brief wb32 usb initialization. + * @param[in] usbp pointer to the @p USBDriver object + * @return None + */ +void wb32_usb_init(USBDriver *usbp) { + + /* Clock activation.*/ +#if WB32_USB_USE_USB1 + if (&USBD1 == usbp) { + RCC->AHBENR1 |= RCC_AHBENR1_CRCSFMEN; + + /* Enable USB peripheral clock */ + RCC->AHBENR1 |= RCC_AHBENR1_USBEN; + + /* Configure USB FIFO clock source */ + RCC->USBFIFOCLKSRC = RCC_USBFIFOCLKSRC_USBCLK; + + /* Enable USB FIFO clock */ + RCC->USBFIFOCLKENR = RCC_USBFIFOCLKENR_CLKEN; + + /* Configure and enable USB PHY */ + SFM->USBPCON = 0x02; + + /* Configure and enable USBCLK */ +#if (WB32_USBPRE == WB32_USBPRE_DIV1P5) + RCC->USBCLKENR = RCC_USBCLKENR_CLKEN; + RCC->USBPRE = RCC_USBPRE_SRCEN; + RCC->USBPRE |= RCC_USBPRE_RATIO_1_5; + RCC->USBPRE |= RCC_USBPRE_DIVEN; +#elif (WB32_USBPRE == WB32_USBPRE_DIV1) + RCC->USBCLKENR = RCC_USBCLKENR_CLKEN; + RCC->USBPRE = RCC_USBPRE_SRCEN; + RCC->USBPRE |= 0x00; +#elif (WB32_USBPRE == WB32_USBPRE_DIV2) + RCC->USBCLKENR = RCC_USBCLKENR_CLKEN; + RCC->USBPRE = RCC_USBPRE_SRCEN; + RCC->USBPRE |= RCC_USBPRE_RATIO_2; + RCC->USBPRE |= RCC_USBPRE_DIVEN; +#elif (WB32_USBPRE == WB32_USBPRE_DIV3) + RCC->USBCLKENR = RCC_USBCLKENR_CLKEN; + RCC->USBPRE = RCC_USBPRE_SRCEN; + RCC->USBPRE |= RCC_USBPRE_RATIO_3; + RCC->USBPRE |= RCC_USBPRE_DIVEN; +#else +#error "invalid WB32_USBPRE value specified" +#endif + } +#endif +} + +/** + * @brief wb32 usb deinitialization. + * @param[in] usbp pointer to the @p USBDriver object + * @return None + */ +void wb32_usb_deinit(USBDriver *usbp) { + +#if WB32_USB_USE_USB1 + if (&USBD1 == usbp) { + /* Disable USBCLK */ + RCC->USBPRE &= RCC_USBPRE_SRCEN; + RCC->USBPRE = 0x00; + RCC->USBCLKENR = 0x00; + + /* Disable USB FIFO clock */ + RCC->USBFIFOCLKENR = 0x0000; + + /* Disable USB peripheral clock */ + RCC->AHBENR1 &= ~RCC_AHBENR1_USBEN; + } +#endif +} + +/** + * @brief wb32 usb connect. + * @param[in] usbp pointer to the @p USBDriver object + * @return None + */ +void wb32_usb_connect(USBDriver *usbp) { + + /* Enable BMX1, GPIOA clock */ + RCC->APB1ENR |= RCC_APB1ENR_BMX1EN | RCC_APB1ENR_GPIOAEN; + + GPIOA->CFGMSK = (~(GPIO_CFGMSK_CFGMSK11 | GPIO_CFGMSK_CFGMSK12)); + /* Configure the drive current of PA11 and PA12 */ + GPIOA->CURRENT = (0x3 << 22) | (0x3 << 24); + /* Configure PA11 and PA12 as Alternate function mode */ + GPIOA->MODER = (0x2 << 22) | (0x2 << 24); + GPIOA->OTYPER = 0x00; + GPIOA->OSPEEDR = 0x00; + GPIOA->PUPDR = 0x00; + GPIOA->AFRH = (3 << 12) | (3 << 16); + + USB->POWER = USB_POWER_SUSEN; + USB->INTRUSBE = USB_INTRUSBE_RSTIE | USB_INTRUSBE_RSUIE | USB_INTRUSBE_SUSIE; +} + +/** + * @brief wb32 usb disconnect. + * @param[in] usbp pointer to the @p USBDriver object + * @return None + */ +void wb32_usb_disconnect(USBDriver *usbp) { + + /* Enable BMX1, GPIOA clock */ + RCC->APB1ENR |= RCC_APB1ENR_BMX1EN | RCC_APB1ENR_GPIOAEN; + + GPIOA->CFGMSK = (~(GPIO_CFGMSK_CFGMSK11 | GPIO_CFGMSK_CFGMSK12)); + /* Configure PA11 and PA12 as input mode */ + GPIOA->MODER = 0x00; + GPIOA->OSPEEDR = 0x00; + GPIOA->PUPDR = 0x00; + /* Configure PA12(D+) as open-drain output mode and output low level */ + GPIOA->CFGMSK = (~GPIO_CFGMSK_CFGMSK12); + GPIOA->MODER = (0x1 << 24); + GPIOA->OTYPER = (0x1 << 12); + GPIOA->AFRH = 0x00; + GPIOA->BSRR = (0x1000 << 16); +} +#endif + +#else + +#error "not defined wb32_clock_init" + +#endif + +/** @} */ diff --git a/os/hal/ports/WB32/WB32FQ95xx/hal_lld.h b/os/hal/ports/WB32/WB32FQ95xx/hal_lld.h new file mode 100644 index 00000000..b8cc5240 --- /dev/null +++ b/os/hal/ports/WB32/WB32FQ95xx/hal_lld.h @@ -0,0 +1,509 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file WB32FQ95xx/hal_lld.h + * @brief WB32FQ95xx HAL subsystem low level driver header. + * @pre This module requires the following macros to be defined in the + * @p board.h file: + * - WB32_LSECLK. + * - WB32_LSE_BYPASS (optionally). + * - WB32_HSECLK. + * - WB32_HSE_BYPASS (optionally). + * . + * + * @addtogroup HAL + * @{ + */ + +#ifndef HAL_LLD_H +#define HAL_LLD_H + +#include "wb32_registry.h" +#include "wb32_tim.h" + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/** + * @name Platform identification + * @{ + */ +#define PLATFORM_NAME "WB32FQ95xx" + +/** + * @brief Sub-family identifier. + */ +#if !defined(WB32FQ95xx) || defined(__DOXYGEN__) +#define WB32FQ95xx TRUE +#endif +/** @} */ + +/** + * @name Absolute Maximum Ratings + * @{ + */ + +/** + * @brief Maximum HSE clock frequency. + */ +#define WB32_HSECLK_MAX 16000000 + +/** + * @brief Minimum HSE clock frequency. + */ +#define WB32_HSECLK_MIN 4000000 + +/** + * @brief Maximum LSE clock frequency. + */ +#define WB32_LSECLK_MAX 1000000 + +/** + * @brief Minimum LSE clock frequency. + */ +#define WB32_LSECLK_MIN 32768 + +/** + * @brief Maximum PLLs input clock frequency. + */ +#define WB32_PLLIN_MAX 16000000 + +/** + * @brief Minimum PLLs input clock frequency. + */ +#define WB32_PLLIN_MIN 2000000 + +/** + * @brief Maximum PLL output clock frequency. + */ +#define WB32_PLLOUT_MAX 96000000 + +/** + * @brief Minimum PLL output clock frequency. + */ +#define WB32_PLLOUT_MIN 48000000 + +/** + * @brief Maximum APB1 clock frequency. + */ +#define WB32_PCLK1_MAX 96000000 + +/** + * @brief Maximum APB2 clock frequency. + */ +#define WB32_PCLK2_MAX 96000000 +/** @} */ + + +/** + * @name RCC_MAINCLKSRC register bits definitions + * @{ + */ +#define WB32_MAINCLKSRC_MHSI (0) +#define WB32_MAINCLKSRC_FHSI (1) +#define WB32_MAINCLKSRC_PLL (2) +#define WB32_MAINCLKSRC_HSE (3) +/** @} */ + +/** + * @name RCC_PLLSRC register bits definitions + * @{ + */ +#define WB32_PLLSRC_MHSI (0x0U) +#define WB32_PLLSRC_HSE (0x1U) +/** @} */ + +/** + * @name RCC_USBPRE register bits definitions + * @{ + */ +#define WB32_USBPRE_MASK (0x3U << 1) +#define WB32_USBPRE_DIV1 (0x0U) +#define WB32_USBPRE_DIV1P5 (0x5U) +#define WB32_USBPRE_DIV2 (0x1U) +#define WB32_USBPRE_DIV3 (0x3U) +/** @} */ + + +/*===========================================================================*/ +/* Platform capabilities. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @name Configuration options + * @{ + */ +/** + * @brief Disables the PWR/RCC initialization in the HAL. + */ +#if !defined(WB32_NO_INIT) || defined(__DOXYGEN__) +#define WB32_NO_INIT FALSE +#endif + +/** + * @brief Enables or disables the MHSI clock source. + */ +#if !defined(WB32_MHSI_ENABLED) || defined(__DOXYGEN__) +#define WB32_MHSI_ENABLED TRUE +#endif + +/** + * @brief Enables or disables the FHSI clock source. + */ +#if !defined(WB32_FHSI_ENABLED) || defined(__DOXYGEN__) +#define WB32_FHSI_ENABLED FALSE +#endif + +/** + * @brief Enables or disables the LSI clock source. + */ +#if !defined(WB32_LSI_ENABLED) || defined(__DOXYGEN__) +#define WB32_LSI_ENABLED FALSE +#endif + +/** + * @brief Enables or disables the HSE clock source. + */ +#if !defined(WB32_HSE_ENABLED) || defined(__DOXYGEN__) +#define WB32_HSE_ENABLED FALSE +#endif + +/** + * @brief Enables or disables the LSE clock source. + */ +#if !defined(WB32_LSE_ENABLED) || defined(__DOXYGEN__) +#define WB32_LSE_ENABLED FALSE +#endif + +/** + * @brief Enables or disables the PLL clock source. + */ +#if !defined(WB32_PLL_ENABLED) || defined(__DOXYGEN__) +#define WB32_PLL_ENABLED FALSE +#endif + +/** + * @brief Main clock source selection. + * @note If the selected clock source is not the PLL then the PLL is not + * initialized and started. + * @note The default value is calculated for a 96MHz system clock from + * a 8MHz crystal using the PLL. + */ +#if !defined(WB32_MAINCLKSRC) || defined(__DOXYGEN__) +#define WB32_MAINCLKSRC WB32_MAINCLKSRC_PLL +#endif + +/** + * @brief Clock source for the PLL. + * @note This setting has only effect if the PLL is selected as the + * system clock source. + */ +#if !defined(WB32_PLLSRC) || defined(__DOXYGEN__) +#define WB32_PLLSRC WB32_PLLSRC_HSE +#endif + +/** + * @brief Crystal PLL pre-divider. + * @note This setting has only effect if the PLL is selected as the + * system clock source. + */ +#if !defined(WB32_PLLDIV_VALUE) || defined(__DOXYGEN__) +#define WB32_PLLDIV_VALUE 1 +#endif + +/** + * @brief PLL multiplier value. + * @note The allowed value is 12, 16, 20, 24. + */ +#if !defined(WB32_PLLMUL_VALUE) || defined(__DOXYGEN__) +#define WB32_PLLMUL_VALUE 12 +#endif + +/** + * @brief AHB prescaler value. + * @note The default value is calculated for a 96MHz system clock from + * a 8MHz crystal using the PLL. + */ +#if !defined(WB32_HPRE) || defined(__DOXYGEN__) +#define WB32_HPRE 1 +#endif + +/** + * @brief APB1 prescaler value. + */ +#if !defined(WB32_PPRE1) || defined(__DOXYGEN__) +#define WB32_PPRE1 1 +#endif + +/** + * @brief APB2 prescaler value. + */ +#if !defined(WB32_PPRE2) || defined(__DOXYGEN__) +#define WB32_PPRE2 1 +#endif + +/** @} */ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + + + +/* + * Configuration-related checks. + */ +#if !defined(WB32FQ95xx_MCUCONF) +#error "Using a wrong mcuconf.h file, WB32FQ95xx_MCUCONF not defined" +#endif + +/* + * MHSI related checks. + */ +#if WB32_MHSI_ENABLED +#else /* !WB32_MHSI_ENABLED */ + +#if (WB32_MAINCLKSRC == WB32_MAINCLKSRC_MHSI) +#error "MHSI not enabled, required by WB32_MAINCLKSRC" +#endif + +#if (WB32_MAINCLKSRC == WB32_MAINCLKSRC_PLL) && \ + (WB32_PLLSRC == WB32_PLLSRC_MHSI) +#error "MHSI not enabled, required by WB32_MAINCLKSRC and WB32_PLLSRC" +#endif + +#endif + +/* + * FHSI related checks. + */ +#if WB32_FHSI_ENABLED +#else /* !WB32_FHSI_ENABLED */ + +#if (WB32_MAINCLKSRC == WB32_MAINCLKSRC_FHSI) +#error "FHSI not enabled, required by WB32_MAINCLKSRC" +#endif + +#endif /* !WB32_FHSI_ENABLED */ + +/* + * HSE related checks. + */ +#if WB32_HSE_ENABLED + +#if WB32_HSECLK == 0 +#error "HSE frequency not defined" +#elif (WB32_HSECLK < WB32_HSECLK_MIN) || (WB32_HSECLK > WB32_HSECLK_MAX) +#error "WB32_HSECLK outside acceptable range (WB32_HSECLK_MIN...WB32_HSECLK_MAX)" +#endif + +#else /* !WB32_HSE_ENABLED */ + +#if (WB32_MAINCLKSRC == WB32_MAINCLKSRC_HSE) +#error "HSE not enabled, required by WB32_MAINCLKSRC" +#endif + +#if ((WB32_MAINCLKSRC == WB32_MAINCLKSRC_PLL) && (WB32_PLLSRC == WB32_PLLSRC_HSE)) +#error "HSE not enabled, required by WB32_MAINCLKSRC and WB32_PLLSRC" +#endif + +#endif /* !WB32_HSE_ENABLED */ + +/* + * LSI related checks. + */ +#if WB32_LSI_ENABLED +#else /* !WB32_LSI_ENABLED */ +#endif /* !WB32_LSI_ENABLED */ + +/* + * LSE related checks. + */ +#if WB32_LSE_ENABLED + +#if (WB32_LSECLK == 0) +#error "LSE frequency not defined" +#endif + +#if (WB32_LSECLK < WB32_LSECLK_MIN) || (WB32_LSECLK > WB32_LSECLK_MAX) +#error "WB32_LSECLK outside acceptable range (WB32_LSECLK_MIN...WB32_LSECLK_MAX)" +#endif + +#else /* !WB32_LSE_ENABLED */ +#endif /* !WB32_LSE_ENABLED */ + +/** + * @brief PLLDIV field. + */ +#if ((WB32_PLLDIV_VALUE >= 1) && (WB32_PLLDIV_VALUE <= 16)) || \ + defined(__DOXYGEN__) +#define WB32_PLLDIV WB32_PLLDIV_VALUE +#else +#error "invalid WB32_PLLDIV_VALUE value specified" +#endif + +/** + * @brief PLLMUL field. + */ +#if (WB32_PLLMUL_VALUE == 12) || (WB32_PLLMUL_VALUE == 16) || \ + (WB32_PLLMUL_VALUE == 20) || (WB32_PLLMUL_VALUE == 24) || \ + defined(__DOXYGEN__) +#define WB32_PLLMUL WB32_PLLMUL_VALUE +#else +#error "invalid WB32_PLLMUL_VALUE value specified" +#endif + +/** + * @brief PLL input clock frequency. + */ +#if (WB32_PLLSRC == WB32_PLLSRC_HSE) || defined(__DOXYGEN__) +#define WB32_PLLCLKIN (WB32_HSECLK / WB32_PLLDIV_VALUE) +#elif (WB32_PLLSRC == WB32_PLLSRC_MHSI) +#define WB32_PLLCLKIN (8000000 / WB32_PLLDIV_VALUE) +#else +#error "invalid WB32_PLLSRC value specified" +#endif + +/* PLL input frequency range check.*/ +#if (WB32_PLLCLKIN < WB32_PLLIN_MIN) || (WB32_PLLCLKIN > WB32_PLLIN_MAX) +#error "WB32_PLLCLKIN outside acceptable range (WB32_PLLIN_MIN...WB32_PLLIN_MAX)" +#endif + +/** + * @brief PLL output clock frequency. + */ +#define WB32_PLLCLKOUT (WB32_PLLCLKIN * WB32_PLLMUL_VALUE) + +/* PLL output frequency range check.*/ +#if (WB32_PLLCLKOUT < WB32_PLLOUT_MIN) || (WB32_PLLCLKOUT > WB32_PLLOUT_MAX) +#error "WB32_PLLCLKOUT outside acceptable range (WB32_PLLOUT_MIN...WB32_PLLOUT_MAX)" +#endif + +/** + * @brief System clock source. + */ +#if (WB32_MAINCLKSRC == WB32_MAINCLKSRC_PLL) || defined(__DOXYGEN__) +#define WB32_MAINCLK WB32_PLLCLKOUT +#elif (WB32_MAINCLKSRC == WB32_MAINCLKSRC_MHSI) +#define WB32_MAINCLK 8000000 +#elif (WB32_MAINCLKSRC == WB32_MAINCLKSRC_FHSI) +#define WB32_MAINCLK 48000000 +#elif (WB32_MAINCLKSRC == WB32_MAINCLKSRC_HSE) +#define WB32_MAINCLK WB32_HSECLK +#else +#error "invalid WB32_MAINCLKSRC value specified" +#endif + +/** + * @brief AHB frequency. + */ +#if ((WB32_HPRE >= 1) && (WB32_HPRE <= 64)) || \ + defined(__DOXYGEN__) +#define WB32_HCLK (WB32_MAINCLK / WB32_HPRE) +#else +#error "invalid WB32_HPRE value specified" +#endif + + +/** + * @brief APB1 frequency. + */ +#if ((WB32_PPRE1 >= 1) && (WB32_PPRE1 <= 64)) || \ + defined(__DOXYGEN__) +#define WB32_PCLK1 (WB32_MAINCLK / WB32_PPRE1) +#else +#error "invalid WB32_PPRE1 value specified" +#endif + +/* APB1 frequency check.*/ +#if WB32_PCLK1 > WB32_PCLK1_MAX +#error "WB32_PCLK1 exceeding maximum frequency (WB32_PCLK1_MAX)" +#endif + +/** + * @brief APB2 frequency. + */ +#if ((WB32_PPRE2 >= 1) && (WB32_PPRE2 <= 64)) || \ + defined(__DOXYGEN__) +#define WB32_PCLK2 (WB32_MAINCLK / WB32_PPRE2) +#else +#error "invalid WB32_PPRE2 value specified" +#endif + +/* APB2 frequency check.*/ +#if WB32_PCLK2 > WB32_PCLK2_MAX +#error "WB32_PCLK2 exceeding maximum frequency (WB32_PCLK2_MAX)" +#endif + +/** + * @brief USB frequency. + */ +#if (WB32_USBPRE == WB32_USBPRE_DIV1P5) || defined(__DOXYGEN__) +#define WB32_USBCLK ((WB32_MAINCLK * 2) / 3) +#elif (WB32_USBPRE == WB32_USBPRE_DIV1) +#define WB32_USBCLK WB32_MAINCLK +#elif (WB32_USBPRE == WB32_USBPRE_DIV2) +#define WB32_USBCLK (WB32_MAINCLK / 2) +#elif (WB32_USBPRE == WB32_USBPRE_DIV3) +#define WB32_USBCLK (WB32_MAINCLK / 3) +#else +#error "invalid WB32_USBPRE value specified" +#endif + +/** + * @brief Timers 1, 2, 3, 4 clock. + */ +#define WB32_TIMCLK1 WB32_PCLK1 + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +/* Various helpers.*/ +#include "nvic.h" +#include "wb32_isr.h" +#include "wb32_rcc.h" + +#ifdef __cplusplus +extern "C" { +#endif + void hal_lld_init(void); + void wb32_clock_init(void); +#ifdef __cplusplus +} +#endif + +#endif /* HAL_LLD_H */ + +/** @} */ diff --git a/os/hal/ports/WB32/WB32FQ95xx/platform.mk b/os/hal/ports/WB32/WB32FQ95xx/platform.mk new file mode 100644 index 00000000..6cdaf0fc --- /dev/null +++ b/os/hal/ports/WB32/WB32FQ95xx/platform.mk @@ -0,0 +1,35 @@ +# Required platform files. +PLATFORMSRC_CONTRIB := $(CHIBIOS)/os/hal/ports/common/ARMCMx/nvic.c \ + $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/WB32FQ95xx/hal_lld.c \ + $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/WB32FQ95xx/wb32_isr.c + +# Required include directories. +PLATFORMINC_CONTRIB := $(CHIBIOS)/os/hal/ports/common/ARMCMx \ + $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/WB32FQ95xx + + +ifeq ($(USE_SMART_BUILD),yes) + +# Configuration files directory +ifeq ($(HALCONFDIR),) + ifeq ($(CONFDIR),) + HALCONFDIR = . + else + HALCONFDIR := $(CONFDIR) + endif +endif + +HALCONF := $(strip $(shell cat $(HALCONFDIR)/halconf.h | egrep -e "\#define")) +endif #ifeq ($(USE_SMART_BUILD), yes) + +# Drivers compatible with the platform. +include ${CHIBIOS_CONTRIB}/os/hal/ports/WB32/LLD/GPIOv1/driver.mk +include $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/LLD/TIMv1/driver.mk +include $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/LLD/I2Cv1/driver.mk +include $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/LLD/UARTv1/driver.mk +include $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/LLD/SPIv1/driver.mk +include $(CHIBIOS_CONTRIB)/os/hal/ports/WB32/LLD/USBv1/driver.mk + +# Shared variables +ALLCSRC += $(PLATFORMSRC_CONTRIB) +ALLINC += $(PLATFORMINC_CONTRIB) diff --git a/os/hal/ports/WB32/WB32FQ95xx/wb32_isr.c b/os/hal/ports/WB32/WB32FQ95xx/wb32_isr.c new file mode 100644 index 00000000..38e227d8 --- /dev/null +++ b/os/hal/ports/WB32/WB32FQ95xx/wb32_isr.c @@ -0,0 +1,254 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file WB32FQ95xx/wb32_isr.c + * @brief WB32FQ95xx ISR handler code. + * + * @addtogroup WB32FQ95xx_ISR + * @{ + */ + +#include "hal.h" + +/*===========================================================================*/ +/* Driver local definitions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver local functions. */ +/*===========================================================================*/ + +#define exti_serve_irq(pr, channel) { \ + if ((pr) & (1U << (channel))) { \ + _pal_isr_code(channel); \ + } \ + } + +/*===========================================================================*/ +/* Driver interrupt handlers. */ +/*===========================================================================*/ + +#if (HAL_USE_PAL && (PAL_USE_WAIT || PAL_USE_CALLBACKS)) || defined(__DOXYGEN__) +#if !defined(WB32_DISABLE_EXTI0_HANDLER) +/** + * @brief EXTI[0] interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(WB32_EXTI0_IRQ_VECTOR) { + uint32_t pr; + + OSAL_IRQ_PROLOGUE(); + + pr = EXTI->PR; + pr &= EXTI->IMR & EXTI_IMR_MR0; + EXTI->PR = pr; + + exti_serve_irq(pr, 0); + + OSAL_IRQ_EPILOGUE(); +} +#endif + +#if !defined(WB32_DISABLE_EXTI1_HANDLER) +/** + * @brief EXTI[1] interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(WB32_EXTI1_IRQ_VECTOR) { + uint32_t pr; + + OSAL_IRQ_PROLOGUE(); + + pr = EXTI->PR; + pr &= EXTI->IMR & EXTI_IMR_MR1; + EXTI->PR = pr; + + exti_serve_irq(pr, 1); + + OSAL_IRQ_EPILOGUE(); +} +#endif + +#if !defined(WB32_DISABLE_EXTI2_HANDLER) +/** + * @brief EXTI[2] interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(WB32_EXTI2_IRQ_VECTOR) { + uint32_t pr; + + OSAL_IRQ_PROLOGUE(); + + pr = EXTI->PR; + pr &= EXTI->IMR & EXTI_IMR_MR2; + EXTI->PR = pr; + + exti_serve_irq(pr, 2); + + OSAL_IRQ_EPILOGUE(); +} +#endif + +#if !defined(WB32_DISABLE_EXTI3_HANDLER) +/** + * @brief EXTI[3] interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(WB32_EXTI3_IRQ_VECTOR) { + uint32_t pr; + + OSAL_IRQ_PROLOGUE(); + + pr = EXTI->PR; + pr &= EXTI->IMR & EXTI_IMR_MR3; + EXTI->PR = pr; + + exti_serve_irq(pr, 3); + + OSAL_IRQ_EPILOGUE(); +} +#endif + +#if !defined(WB32_DISABLE_EXTI4_HANDLER) +/** + * @brief EXTI[4] interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(WB32_EXTI4_IRQ_VECTOR) { + uint32_t pr; + + OSAL_IRQ_PROLOGUE(); + + pr = EXTI->PR; + pr &= EXTI->IMR & EXTI_IMR_MR4; + EXTI->PR = pr; + + exti_serve_irq(pr, 4); + + OSAL_IRQ_EPILOGUE(); +} +#endif + +#if !defined(WB32_DISABLE_EXTI9_5_HANDLER) +/** + * @brief EXTI[5]...EXTI[9] interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(WB32_EXTI9_5_IRQ_VECTOR) { + uint32_t pr; + + OSAL_IRQ_PROLOGUE(); + + pr = EXTI->PR; + pr &= EXTI->IMR & (EXTI_IMR_MR5 | EXTI_IMR_MR6 | EXTI_IMR_MR7 | EXTI_IMR_MR8 | + EXTI_IMR_MR9); + EXTI->PR = pr; + + exti_serve_irq(pr, 5); + exti_serve_irq(pr, 6); + exti_serve_irq(pr, 7); + exti_serve_irq(pr, 8); + exti_serve_irq(pr, 9); + + OSAL_IRQ_EPILOGUE(); +} +#endif + +#if !defined(WB32_DISABLE_EXTI15_10_HANDLER) +/** + * @brief EXTI[10]...EXTI[15] interrupt handler. + * + * @isr + */ +OSAL_IRQ_HANDLER(WB32_EXTI15_10_IRQ_VECTOR) { + uint32_t pr; + + OSAL_IRQ_PROLOGUE(); + + pr = EXTI->PR; + pr &= EXTI->IMR & (EXTI_IMR_MR10 | EXTI_IMR_MR11 | EXTI_IMR_MR12 | + EXTI_IMR_MR13 | EXTI_IMR_MR14 | EXTI_IMR_MR15); + EXTI->PR = pr; + + exti_serve_irq(pr, 10); + exti_serve_irq(pr, 11); + exti_serve_irq(pr, 12); + exti_serve_irq(pr, 13); + exti_serve_irq(pr, 14); + exti_serve_irq(pr, 15); + + OSAL_IRQ_EPILOGUE(); +} +#endif + +#endif /* HAL_USE_PAL */ + +/*===========================================================================*/ +/* Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Enables IRQ sources. + * + * @notapi + */ +void irqInit(void) { + +#if HAL_USE_PAL + nvicEnableVector(EXTI0_IRQn, WB32_IRQ_EXTI0_PRIORITY); + nvicEnableVector(EXTI1_IRQn, WB32_IRQ_EXTI1_PRIORITY); + nvicEnableVector(EXTI2_IRQn, WB32_IRQ_EXTI2_PRIORITY); + nvicEnableVector(EXTI3_IRQn, WB32_IRQ_EXTI3_PRIORITY); + nvicEnableVector(EXTI4_IRQn, WB32_IRQ_EXTI4_PRIORITY); + nvicEnableVector(EXTI9_5_IRQn, WB32_IRQ_EXTI5_9_PRIORITY); + nvicEnableVector(EXTI15_10_IRQn, WB32_IRQ_EXTI10_15_PRIORITY); +#endif +} + +/** + * @brief Disables IRQ sources. + * + * @notapi + */ +void irqDeinit(void) { + +#if HAL_USE_PAL + nvicDisableVector(EXTI0_IRQn); + nvicDisableVector(EXTI1_IRQn); + nvicDisableVector(EXTI2_IRQn); + nvicDisableVector(EXTI3_IRQn); + nvicDisableVector(EXTI4_IRQn); + nvicDisableVector(EXTI9_5_IRQn); + nvicDisableVector(EXTI15_10_IRQn); +#endif +} + +/** @} */ diff --git a/os/hal/ports/WB32/WB32FQ95xx/wb32_isr.h b/os/hal/ports/WB32/WB32FQ95xx/wb32_isr.h new file mode 100644 index 00000000..ac30fcc8 --- /dev/null +++ b/os/hal/ports/WB32/WB32FQ95xx/wb32_isr.h @@ -0,0 +1,306 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file WB32FQ95xx/wb32_isr.h + * @brief WB32FQ95xx ISR handler header. + * + * @addtogroup WB32FQ95xx_ISR + * @{ + */ + +#ifndef WB32_ISR_H +#define WB32_ISR_H + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/** + * @name ISR names and numbers remapping + * @{ + */ + +/* + * IWDG units. + */ +#define WB32_WWDG_IRQ_VECTOR Vector40 +#define WB32_WWDG_NUMBER 0 + +/* + * PVD units. + */ +#define WB32_PVD_IRQ_VECTOR Vector44 +#define WB32_PVD_NUMBER 1 + +/* + * TAMPER units. + */ +#define WB32_TAMPER_IRQ_VECTOR Vector48 +#define WB32_TAMPER_NUMBER 2 + +/* + * RTC units. + */ +#define WB32_RTC_IRQ_VECTOR Vector4C +#define WB32_RTC_NUMBER 3 + +#define WB32_RTCAlarm_IRQ_VECTOR VectorC8 +#define WB32_RTCAlarm_NUMBER 34 + +/* + * FMC units. + */ +#define WB32_FMC_IRQ_VECTOR Vector50 +#define WB32_FMC_NUMBER 4 +#define WB32_RCC_IRQ_VECTOR Vector54 +#define WB32_RCC_NUMBER 5 + +/* + * EXTI units. + */ +#define WB32_EXTI0_IRQ_VECTOR Vector58 +#define WB32_EXTI0_NUMBER 6 + +#define WB32_EXTI1_IRQ_VECTOR Vector5C +#define WB32_EXTI1_NUMBER 7 + +#define WB32_EXTI2_IRQ_VECTOR Vector60 +#define WB32_EXTI2_NUMBER 8 + +#define WB32_EXTI3_IRQ_VECTOR Vector64 +#define WB32_EXTI3_NUMBER 9 + +#define WB32_EXTI4_IRQ_VECTOR Vector68 +#define WB32_EXTI4_NUMBER 10 + +#define WB32_EXTI9_5_IRQ_VECTOR Vector80 +#define WB32_EXTI9_5_NUMBER 16 + +#define WB32_EXTI15_10_IRQ_VECTOR VectorC4 +#define WB32_EXTI15_10_NUMBER 33 + +/* + * DMAC units. + */ +#define WB32_DMAC1_IRQ_VECTOR Vector6C +#define WB32_DMAC1_NUMBER 11 + +#define WB32_DMAC2_IRQ_VECTOR Vector70 +#define WB32_DMAC2_NUMBER 12 + +/* + * ADC units. + */ +#define WB32_ADC_IRQ_VECTOR Vector74 +#define WB32_ADC_NUMBER 13 + +/* + * USB units. + */ +#define WB32_USB1_IRQ_VECTOR Vector78 +#define WB32_USB1_DMA_IRQ_VECTOR Vector7C +#define WB32_USBP1_WKUP_IRQ_VECTOR VectorCC + +#define WB32_USB1_NUMBER 14 +#define WB32_USB1_DMA_NUMBER 15 +#define WB32_USBP1_WKUP_NUMBER 35 + +/* + * I2C units. + */ +#define WB32_I2C1_IRQ_VECTOR VectorA0 +#define WB32_I2C1_NUMBER 24 + +#define WB32_I2C2_IRQ_VECTOR VectorA4 +#define WB32_I2C2_NUMBER 25 + +/* + * I2S units. + */ +#define WB32_I2S_IRQ_VECTOR VectorD0 +#define WB32_I2S_NUMBER 36 + +/* + * SPI units. + */ +#define WB32_QSPI_IRQ_VECTOR VectorA8 +#define WB32_QSPI_NUMBER 26 + +#define WB32_SPIM2_IRQ_VECTOR VectorAC +#define WB32_SPIM2_NUMBER 27 + +#define WB32_SPIS1_IRQ_VECTOR VectorB0 +#define WB32_SPIS1_NUMBER 28 + +#define WB32_SPIS2_IRQ_VECTOR VectorB4 +#define WB32_SPIS2_NUMBER 29 + +/* + * TIM units. + */ +#define WB32_TIM1_BRK_IRQ_VECTOR Vector84 +#define WB32_TIM1_UP_IRQ_VECTOR Vector88 +#define WB32_TIM1_TRG_COM_IRQ_VECTOR Vector8C +#define WB32_TIM1_CC_IRQ_VECTOR Vector90 +#define WB32_TIM1_BRK_NUMBER 17 +#define WB32_TIM1_UP_NUMBER 18 +#define WB32_TIM1_TRG_COM_NUMBER 19 +#define WB32_TIM1_CC_NUMBER 20 + +#define WB32_TIM2_IRQ_VECTOR Vector94 +#define WB32_TIM2_NUMBER 21 + +#define WB32_TIM3_IRQ_VECTOR Vector98 +#define WB32_TIM3_NUMBER 22 + +#define WB32_TIM4_IRQ_VECTOR Vector9C +#define WB32_TIM4_NUMBER 23 + +/* + * USART units. + */ +#define WB32_UART1_IRQ_VECTOR VectorB8 +#define WB32_UART1_NUMBER 30 + +#define WB32_UART2_IRQ_VECTOR VectorBC +#define WB32_UART2_NUMBER 31 + +#define WB32_UART3_IRQ_VECTOR VectorC0 +#define WB32_UART3_NUMBER 32 + +/* + * ISO units. + */ +#define WB32_ISO_IRQ_VECTOR VectorD4 +#define WB32_ISO_NUMBER 37 + +/** @} */ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @name Configuration options + * @{ + */ +/** + * @brief EXTI0 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI0_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI0_PRIORITY 6 +#endif + +/** + * @brief EXTI1 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI1_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI1_PRIORITY 6 +#endif + +/** + * @brief EXTI2 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI2_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI2_PRIORITY 6 +#endif + +/** + * @brief EXTI3 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI3_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI3_PRIORITY 6 +#endif + +/** + * @brief EXTI4 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI4_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI4_PRIORITY 6 +#endif + +/** + * @brief EXTI9..5 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI5_9_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI5_9_PRIORITY 6 +#endif + +/** + * @brief EXTI15..10 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI10_15_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI10_15_PRIORITY 6 +#endif + +/** + * @brief EXTI16 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI16_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI16_PRIORITY 6 +#endif + +/** + * @brief EXTI17 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI17_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI17_PRIORITY 6 +#endif + +/** + * @brief EXTI18 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI18_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI18_PRIORITY 6 +#endif + +/** + * @brief EXTI19 interrupt priority level setting. + */ +#if !defined(WB32_IRQ_EXTI19_PRIORITY) || defined(__DOXYGEN__) +#define WB32_IRQ_EXTI19_PRIORITY 6 +#endif +/** @} */ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void irqInit(void); + void irqDeinit(void); +#ifdef __cplusplus +} +#endif + +#endif /* WB32_ISR_H */ + +/** @} */ diff --git a/os/hal/ports/WB32/WB32FQ95xx/wb32_rcc.h b/os/hal/ports/WB32/WB32FQ95xx/wb32_rcc.h new file mode 100644 index 00000000..50239300 --- /dev/null +++ b/os/hal/ports/WB32/WB32FQ95xx/wb32_rcc.h @@ -0,0 +1,518 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file WB32FQ95xx/wb32_rcc.h + * @brief RCC helper driver header. + * @note This file requires definitions from the WB header file + * @p WB32fq95xx.h. + * + * @addtogroup WB32FQ95xx_RCC + * @{ + */ + +#ifndef WB32_RCC_H +#define WB32_RCC_H + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver macros. */ +/*===========================================================================*/ + +/** + * @name Generic RCC operations + * @{ + */ +/** + * @brief Enables the clock of one or more peripheral on the APB1 bus. + * + * @param[in] mask APB1 peripherals mask + * + * @api + */ +#define rccEnableAPB1(mask) { \ + RCC->APB1ENR |= (mask); \ + (void)RCC->APB1ENR; \ + } + +/** + * @brief Disables the clock of one or more peripheral on the APB1 bus. + * + * @param[in] mask APB1 peripherals mask + * + * @api + */ +#define rccDisableAPB1(mask) { \ + RCC->APB1ENR &= ~(mask); \ + (void)RCC->APB1ENR; \ + } + +/** + * @brief Resets one or more peripheral on the APB1 bus. + * + * @param[in] mask APB1 peripherals mask + * + * @api + */ +#define rccResetAPB1(mask) { \ + RCC->APB1RSTR |= (mask); \ + RCC->APB1RSTR &= ~(mask); \ + (void)RCC->APB1RSTR; \ + } + +/** + * @brief Enables the clock of one or more peripheral on the APB2 bus. + * + * @param[in] mask APB2 peripherals mask + * + * @api + */ +#define rccEnableAPB2(mask) { \ + RCC->APB2ENR |= (mask); \ + (void)RCC->APB2ENR; \ + } + +/** + * @brief Disables the clock of one or more peripheral on the APB2 bus. + * + * @param[in] mask APB2 peripherals mask + * + * @api + */ +#define rccDisableAPB2(mask) { \ + RCC->APB2ENR &= ~(mask); \ + (void)RCC->APB2ENR; \ + } + +/** + * @brief Resets one or more peripheral on the APB2 bus. + * + * @param[in] mask APB2 peripherals mask + * + * @api + */ +#define rccResetAPB2(mask) { \ + RCC->APB2RSTR |= (mask); \ + RCC->APB2RSTR &= ~(mask); \ + (void)RCC->APB2RSTR; \ + } + +/** + * @brief Enables the clock of one or more peripheral on the AHB bus. + * + * @param[in] mask AHB peripherals mask + * + * @api + */ +#define rccEnableAHB(mask) { \ + RCC->AHBENR |= (mask); \ + (void)RCC->AHBENR; \ + } + +/** + * @brief Disables the clock of one or more peripheral on the AHB bus. + * + * @param[in] mask AHB peripherals mask + * + * @api + */ +#define rccDisableAHB(mask) { \ + RCC->AHBENR &= ~(mask); \ + (void)RCC->AHBENR; \ + } + +/** + * @brief Resets one or more peripheral on the AHB bus. + * + * @param[in] mask AHB peripherals mask + * + * @api + */ +#define rccResetAHB(mask) { \ + RCC->AHBRSTR |= (mask); \ + RCC->AHBRSTR &= ~(mask); \ + (void)RCC->AHBRSTR; \ + } +/** @} */ + + + + +/** + * @name EXTI peripherals specific RCC operations + * @{ + */ +/** + * @brief Enables the EXTI peripheral clock. + * + * @api + */ +#define rccEnableEXTI() rccEnableAPB1(RCC_APB1ENR_EXTIEN | RCC_APB1ENR_AFIOEN) + +/** + * @brief Disables the EXTI peripheral clock. + * + * @api + */ +#define rccDisableEXTI() rccDisableAPB1(RCC_APB1ENR_EXTIEN | RCC_APB1ENR_AFIOEN) + +/** + * @brief Resets the EXTI peripheral. + * + * @api + */ +#define rccResetEXTI() rccResetAPB1(RCC_APB1RSTR_EXTIRST | RCC_APB1RSTR_AFIORST) +/** @} */ + + +/** + * @name I2C peripherals specific RCC operations + * @{ + */ +/** + * @brief Enables the I2C1 peripheral clock. + * + * @api + */ +#define rccEnableI2C1() rccEnableAPB2(RCC_APB2ENR_I2C1EN) + +/** + * @brief Disables the I2C1 peripheral clock. + * + * @api + */ +#define rccDisableI2C1() rccDisableAPB2(RCC_APB2ENR_I2C1EN) + +/** + * @brief Resets the I2C1 peripheral. + * + * @api + */ +#define rccResetI2C1() rccResetAPB2(RCC_APB2RSTR_I2C1RST) + +/** + * @brief Enables the I2C2 peripheral clock. + * + * @api + */ +#define rccEnableI2C2() rccEnableAPB2(RCC_APB2ENR_I2C2EN) + +/** + * @brief Disables the I2C2 peripheral clock. + * + * @api + */ +#define rccDisableI2C2() rccDisableAPB2(RCC_APB2ENR_I2C2EN) + +/** + * @brief Resets the I2C2 peripheral. + * + * @api + */ +#define rccResetI2C2() rccResetAPB2(RCC_APB2RSTR_I2C2RST) +/** @} */ + + +/** + * @name SPI peripherals specific RCC operations + * @{ + */ +/** + * @brief Enables the QSPI peripheral clock. + * + * @api + */ +#define rccEnableQSPI() rccEnableAPB1(RCC_APB1ENR_QSPIEN) + +/** + * @brief Disables the QSPI peripheral clock. + * + * @api + */ +#define rccDisableQSPI() rccDisableAPB1(RCC_APB1ENR_QSPIEN) + +/** + * @brief Resets the QSPI peripheral. + * + * @api + */ +#define rccResetQSPI() rccResetAPB1(RCC_APB1RSTR_QSPIRST) + +/** + * @brief Enables the SPIS1 peripheral clock. + * + * @api + */ +#define rccEnableSPIS1() do { \ + rccEnableAPB1(RCC_APB1ENR_SPIS1EN); \ + RCC->SPIS1CLKENR = RCC_SPIS1CLKENR_CLKEN; \ + } while (false) + +/** + * @brief Disables the SPIS1 peripheral clock. + * + * @api + */ +#define rccDisableSPIS1() do { \ + RCC->SPIS1CLKENR = 0x00; \ + rccDisableAPB1(RCC_APB1ENR_SPIS1EN); \ + } while (false) + +/** + * @brief Resets the SPIS1 peripheral. + * + * @api + */ +#define rccResetSPIS1() rccResetAPB1(RCC_APB1RSTR_SPIS1RST) + +/** + * @brief Enables the SPIM2 peripheral clock. + * + * @api + */ +#define rccEnableSPIM2() rccEnableAPB2(RCC_APB2ENR_SPIM2EN) + +/** + * @brief Disables the SPIM2 peripheral clock. + * + * @api + */ +#define rccDisableSPIM2() rccDisableAPB2(RCC_APB2ENR_SPIM2EN) + +/** + * @brief Resets the SPIM2 peripheral. + * + * @api + */ +#define rccResetSPIM2() rccResetAPB2(RCC_APB2RSTR_SPIM2RST) + +/** + * @brief Enables the SPIS2 peripheral clock. + * + * @api + */ +#define rccEnableSPIS2() do { \ + rccEnableAPB2(RCC_APB2ENR_SPIS2EN); \ + RCC->SPIS2CLKENR = RCC_SPIS2CLKENR_CLKEN; \ + } while (false) + +/** + * @brief Disables the SPIS2 peripheral clock. + * + * @api + */ +#define rccDisableSPIS2() do { \ + RCC->SPIS2CLKENR = 0x00; \ + rccDisableAPB2(RCC_APB2ENR_SPIS2EN); \ + } while (false) + +/** + * @brief Resets the SPIS2 peripheral. + * + * @api + */ +#define rccResetSPIS2() rccResetAPB2(RCC_APB2RSTR_SPIS2RST) + +/** @} */ + + +/** + * @name TIM peripherals specific RCC operations + * @{ + */ +/** + * @brief Enables the TIM1 peripheral clock. + * + * @api + */ +#define rccEnableTIM1() rccEnableAPB1(RCC_APB1ENR_TIM1EN) + +/** + * @brief Disables the TIM1 peripheral clock. + * + * @api + */ +#define rccDisableTIM1() rccDisableAPB1(RCC_APB1ENR_TIM1EN) + +/** + * @brief Resets the TIM1 peripheral. + * + * @api + */ +#define rccResetTIM1() rccResetAPB1(RCC_APB1RSTR_TIM1RST) + +/** + * @brief Enables the TIM2 peripheral clock. + * + * @api + */ +#define rccEnableTIM2() rccEnableAPB1(RCC_APB1ENR_TIM2EN) + +/** + * @brief Disables the TIM2 peripheral clock. + * + * @api + */ +#define rccDisableTIM2() rccDisableAPB1(RCC_APB1ENR_TIM2EN) + +/** + * @brief Resets the TIM2 peripheral. + * + * @api + */ +#define rccResetTIM2() rccResetAPB1(RCC_APB1RSTR_TIM2RST) + +/** + * @brief Enables the TIM3 peripheral clock. + * + * @api + */ +#define rccEnableTIM3() rccEnableAPB1(RCC_APB1ENR_TIM3EN) + +/** + * @brief Disables the TIM3 peripheral clock. + * + * @api + */ +#define rccDisableTIM3() rccDisableAPB1(RCC_APB1ENR_TIM3EN) + +/** + * @brief Resets the TIM3 peripheral. + * + * @api + */ +#define rccResetTIM3() rccResetAPB1(RCC_APB1RSTR_TIM3RST) + +/** + * @brief Enables the TIM4 peripheral clock. + * + * @api + */ +#define rccEnableTIM4() rccEnableAPB1(RCC_APB1ENR_TIM4EN) + +/** + * @brief Disables the TIM4 peripheral clock. + * + * @api + */ +#define rccDisableTIM4() rccDisableAPB1(RCC_APB1ENR_TIM4EN) + +/** + * @brief Resets the TIM4 peripheral. + * + * @api + */ +#define rccResetTIM4() rccResetAPB1(RCC_APB1RSTR_TIM4RST) +/** @} */ + + +/** + * @name UART peripherals specific RCC operations + * @{ + */ +/** + * @brief Enables the UART1 peripheral clock. + * + * @api + */ +#define rccEnableUART1() rccEnableAPB1(RCC_APB1ENR_UART1EN) + +/** + * @brief Disables the UART1 peripheral clock. + * + * @api + */ +#define rccDisableUART1() rccDisableAPB1(RCC_APB1ENR_UART1EN) + +/** + * @brief Resets the UART1 peripheral. + * + * @api + */ +#define rccResetUART1() rccResetAPB1(RCC_APB1RSTR_UART1RST) + +/** + * @brief Enables the UART2 peripheral clock. + * + * @api + */ +#define rccEnableUART2() rccEnableAPB2(RCC_APB2ENR_UART2EN) + +/** + * @brief Disables the UART2 peripheral clock. + * + * @api + */ +#define rccDisableUART2() rccDisableAPB2(RCC_APB2ENR_UART2EN) + +/** + * @brief Resets the UART2 peripheral. + * + * @api + */ +#define rccResetUART2() rccResetAPB2(RCC_APB2RSTR_UART2RST) + +/** + * @brief Enables the UART3 peripheral clock. + * + * @api + */ +#define rccEnableUART3() rccEnableAPB2(RCC_APB2ENR_UART3EN) + +/** + * @brief Disables the UART3 peripheral clock. + * + * @api + */ +#define rccDisableUART3() rccDisableAPB2(RCC_APB2ENR_UART3EN) + +/** + * @brief Resets the UART3 peripheral. + * + * @api + */ +#define rccResetUART3() rccResetAPB2(RCC_APB2RSTR_UART3RST) +/** @} */ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif + +#endif /* WB32_RCC_H */ + +/** @} */ diff --git a/os/hal/ports/WB32/WB32FQ95xx/wb32_registry.h b/os/hal/ports/WB32/WB32FQ95xx/wb32_registry.h new file mode 100644 index 00000000..f640ab8f --- /dev/null +++ b/os/hal/ports/WB32/WB32FQ95xx/wb32_registry.h @@ -0,0 +1,138 @@ +/* + Copyright (C) 2022 Westberry Technology (ChangZhou) Corp., Ltd + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * @file WB32FQ95xx/wb32_registry.h + * @brief WB32FQ95xx capabilities registry. + * + * @addtogroup HAL + * @{ + */ + +#ifndef WB32_REGISTRY_H +#define WB32_REGISTRY_H + +#if !defined(WB32FQ95xx) +#error "unsupported or unrecognized WB32FQ95xx member" +#endif + +/*===========================================================================*/ +/* Platform capabilities. */ +/*===========================================================================*/ +#if defined(WB32FQ95xx) || defined(__DOXYGEN__) +/** + * @name WB32FQ95xx capabilities + * @{ + */ +/* GPIO attributes.*/ +#define WB32_HAS_GPIOA TRUE +#define WB32_HAS_GPIOB TRUE +#define WB32_HAS_GPIOC TRUE +#define WB32_HAS_GPIOD TRUE + +/* WWDG attributes */ +#define WB32_HAS_WWDG TRUE + +/* PVD attributes */ +#define WB32_HAS_PVD TRUE + +/* TAMPER attributes */ +#define WB32_HAS_TAMPER TRUE + +/* RTC attributes */ +#define WB32_HAS_RTC TRUE + +/* FMC attributes */ +#define WB32_HAS_FMC TRUE + +/* EXTI attributes */ +#define WB32_HAS_EXTI TRUE +#define WB32_HAS_EXTI0 TRUE +#define WB32_HAS_EXTI1 TRUE +#define WB32_HAS_EXTI2 TRUE +#define WB32_HAS_EXTI3 TRUE +#define WB32_HAS_EXTI4 TRUE +#define WB32_HAS_EXTI9_5 TRUE +#define WB32_HAS_EXTI15_10 TRUE +#define WB32_EXTI_NUM_LINES 19 + +/* DMAC1 attributes */ +#define WB32_HAS_DMAC TRUE +#define WB32_HAS_DMAC1 TRUE +#define WB32_DMAC1_NUM_CHANNELS 3 +#define WB32_HAS_DMAC2 TRUE +#define WB32_DMAC2_NUM_CHANNELS 3 + +/* ADC attributes */ +#define WB32_HAS_ADC TRUE + +/* USB attributes */ +#define WB32_HAS_USB TRUE +#define WB32_HAS_USB1 TRUE +#define WB32_HAS_USB1_DMA TRUE +#define WB32_HAS_USB1_WKUP TRUE + +/* TIM attributes */ +#define WB32_HAS_TIM TRUE +#define WB32_HAS_TIM1 TRUE +#define WB32_HAS_TIM2 TRUE +#define WB32_HAS_TIM3 TRUE +#define WB32_HAS_TIM4 TRUE + +#define WB32_TIM1_IS_32BITS TRUE +#define WB32_TIM1_CHANNELS 4 +#define WB32_TIM2_IS_32BITS TRUE +#define WB32_TIM2_CHANNELS 4 +#define WB32_TIM3_IS_32BITS TRUE +#define WB32_TIM3_CHANNELS 4 +#define WB32_TIM4_IS_32BITS TRUE +#define WB32_TIM4_CHANNELS 4 + +/* I2C attributes */ +#define WB32_HAS_I2C TRUE +#define WB32_HAS_I2C1 TRUE +#define WB32_HAS_I2C2 TRUE + +/* SPI attributes */ +#define WB32_HAS_SPI TRUE +#define WB32_HAS_QSPI TRUE +#define WB32_HAS_SPIM2 TRUE +#define WB32_HAS_SPIS1 TRUE +#define WB32_HAS_SPIS2 TRUE + +/* UART attributes */ +#define WB32_HAS_UART TRUE +#define WB32_HAS_UART1 TRUE +#define WB32_HAS_UART2 TRUE +#define WB32_HAS_UART3 TRUE + +/* I2S attributes */ +#define WB32_HAS_I2S TRUE + +/* ISO attributes */ +#define WB32_HAS_ISO TRUE + +/* IWDG attributes.*/ +#define WB32_HAS_IWDG TRUE + +/* CRC attributes.*/ +#define WB32_HAS_CRC TRUE +/** @} */ +#endif /* defined(WB32FQ95xx) */ + +#endif /* WB32_REGISTRY_H */ + +/** @} */